Retour au catalogue
Season 42 8 Épisodes 28 min 2026

Shapely

v2.1 — Édition 2026. Manipulation et analyse d'objets géométriques dans le plan cartésien. Découvrez le modèle de données spatiales, les opérations constructives, les prédicats, les opérations ensemblistes et l'indexation spatiale avec Shapely 2.1 (2026).

Analyse géospatiale Opérations géométriques
Shapely
Lecture en cours
Click play to start
0:00
0:00
1
Le modèle de données spatiales
Plongez dans les concepts fondamentaux de Shapely et la façon dont il modélise le monde. Vous apprendrez la différence entre les points, les courbes et les surfaces, et comment la théorie des ensembles de points sous-tend la géométrie plane.
3m 07s
2
Création et sérialisation de géométries
Découvrez comment construire et transporter efficacement des géométries dans Shapely. Vous apprendrez la différence entre la création d'objets singuliers et les ufuncs vectorisées à haute performance, ainsi que la sérialisation WKT et GeoJSON.
3m 36s
3
Mesures et propriétés
Apprenez à extraire des mesures critiques de vos géométries. Vous comprendrez comment calculer l'aire, la longueur et des métriques de distance avancées comme la Hausdorff distance.
3m 31s
4
Prédicats spatiaux et la DE-9IM
Maîtrisez l'art de vérifier les relations spatiales. Vous apprendrez à utiliser des prédicats booléens pour déterminer exactement comment deux formes interagissent, grâce à la matrice DE-9IM.
3m 36s
5
Opérations ensemblistes
Découvrez comment fusionner, couper et diviser des géométries. Vous apprendrez à utiliser des opérations mathématiques ensemblistes telles que l'intersection, la différence et l'union pour créer de toutes nouvelles formes.
3m 22s
6
Opérations constructives : Buffers et Hulls
Apprenez à générer synthétiquement de nouvelles formes de limites. Vous explorerez le buffering, la création de zones de sécurité et l'enveloppement de points dispersés à l'aide de convex et concave hulls.
3m 35s
7
Opérations constructives avancées
Faites passer la manipulation de vos formes au niveau supérieur. Vous apprendrez à nettoyer des polygones massifs grâce à la simplification, à assembler des éléments avec le snap, et à générer des diagrammes de Voronoi.
3m 39s
8
Indexation spatiale à haute performance avec STRtree
Débloquez des requêtes spatiales ultra-rapides. Vous apprendrez à utiliser l'arbre Sort-Tile-Recursive (STR) pour filtrer instantanément des ensembles de données spatiales massifs et effectuer des recherches de plus proche voisin presque instantanées.
3m 53s

Épisodes

1

Le modèle de données spatiales

3m 07s

Plongez dans les concepts fondamentaux de Shapely et la façon dont il modélise le monde. Vous apprendrez la différence entre les points, les courbes et les surfaces, et comment la théorie des ensembles de points sous-tend la géométrie plane.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Shapely, épisode 1 sur 8. Tu as peut-être l'habitude de traiter les géométries de cartes comme de simples listes de coordonnées, utilisées principalement pour dessiner des formes sur un écran. Mais quand tu dois calculer si une trace GPS traverse une frontière spécifique, la simple logique de dessin ne tient plus la route. Pour faire de la vraie analyse spatiale mathématique, tu as besoin du Spatial Data Model. D'abord, on doit dissiper une source fréquente de confusion concernant ce modèle. Shapely opère strictement sur un plan cartésien plat en 2D. Tu peux fournir des coordonnées X, Y et Z quand tu crées tes géométries. Shapely va les parser et même stocker cette valeur Z en mémoire. Mais il ignore complètement la coordonnée Z pendant toute analyse spatiale. Si tu demandes la distance entre deux points, Shapely calcule la distance 2D à plat. Il ne calcule pas de volumes 3D ou de distances 3D. C'est une library purement planaire. Voici l'idée clé. Shapely est construit sur la théorie mathématique des ensembles de points. Il ne voit pas une forme comme juste la poignée de vertices que tu as tapés dans ton code. Au lieu de ça, il traite chaque géométrie comme un ensemble rigoureux contenant un nombre infini de points. Dans ce modèle, chaque géométrie divise le plan 2D entier en trois parties distinctes. L'intérieur est la substance même de la forme. La frontière est le bord qui encadre la forme. L'extérieur est le reste du plan infini qui ne fait pas partie de la forme. Imagine modéliser un parc municipal pour voir comment ces trois concepts s'appliquent. Tu commences avec une fontaine, représentée comme une géométrie Point. Un Point est de dimension zéro. Il représente un emplacement unique et exact sur le plan. Comme il n'a ni longueur ni surface, son intérieur se compose uniquement de cette coordonnée spécifique. Un Point n'a aucune frontière du tout. Toutes les autres coordonnées sur l'ensemble du plan cartésien constituent son extérieur. Ensuite, tu ajoutes un chemin piéton qui mène à la fontaine. C'est modélisé comme un LineString. Un LineString est une géométrie en une dimension définie par une séquence ordonnée de vertices de coordonnées. Même si tu lui passes seulement une coordonnée de départ et de fin, Shapely comprend le LineString comme l'ensemble infini de points formant le chemin continu entre elles. L'intérieur est toute la longueur continue du chemin. La frontière se compose d'exactement deux points : la première coordonnée de départ et la dernière coordonnée de fin. Enfin, tu modélises l'empreinte du parc lui-même en utilisant un Polygon. Un Polygon est une géométrie en deux dimensions avec une surface mesurable. Tu le définis en utilisant un anneau fermé de coordonnées, ce qui veut dire que le premier et le dernier point sont identiques. Cet anneau extérieur forme la frontière du Polygon. L'intérieur est l'ensemble infini de points enfermés dans cette frontière. Les Polygons peuvent aussi contenir des trous, comme une zone de conservation restreinte à l'intérieur du parc. Le bord de ce trou agit simplement comme une frontière intérieure, séparant proprement l'intérieur valide du parc de l'espace extérieur vide à l'intérieur du trou. Shapely ne voit pas ta géométrie comme un wireframe creux de coordonnées ; il voit une région continue de l'espace mathématiquement divisée en intérieur, frontière et extérieur. Si tu trouves ces épisodes utiles et que tu veux soutenir l'émission, cherche DevStoriesEU sur Patreon. C'est tout pour cet épisode. Merci d'avoir écouté, et continue de builder !
2

Création et sérialisation de géométries

3m 36s

Découvrez comment construire et transporter efficacement des géométries dans Shapely. Vous apprendrez la différence entre la création d'objets singuliers et les ufuncs vectorisées à haute performance, ainsi que la sérialisation WKT et GeoJSON.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Shapely, épisode 2 sur 8. Tu traites un batch de coordonnées spatiales. Tu écris une boucle pour transformer chaque paire de coordonnées en une forme, une par une. Ça marche, mais quand ton dataset atteint des millions de points, ton application s'arrête complètement. Le problème, c'est l'overhead de Python, et la solution demande de contourner complètement la création d'objets standard. Cet épisode parle de la création de géométries et de la sérialisation. Créer des formes, c'est le point de départ logique. Si tu gères un seul emplacement, instancier une géométrie est super simple. Tu importes la classe Point au singulier et tu lui passes une valeur X et Y. C'est facile à lire, mais c'est lent. Voici l'idée clé. Shapely fournit des fonctions universelles vectorisées qui opèrent directement sur les arrays NumPy. Au lieu d'utiliser la classe Point au singulier dans une boucle Python, tu utilises la fonction au pluriel shapely dot points. Tu lui passes un array de coordonnées en deux dimensions, et ça repousse toute l'itération au niveau C, qui est hautement optimisé. Le résultat, c'est un array d'objets géométriques renvoyé en une fraction du temps. Ça s'applique partout, avec des fonctions au pluriel disponibles pour les line strings, les polygons et les linear rings. Disons que tu développes un outil de routing et que tu dois charger un dataset de mille points de livraison. Les données arrivent sous forme d'array de payloads GeoJSON. Ça nous amène à la sérialisation. Tu dois parser ces strings pour les convertir en vrais objets géométriques en mémoire. Tu pourrais être tenté d'utiliser le parsing JSON standard et d'extraire manuellement les coordonnées pour construire tes formes. Ne fais pas ça. Shapely a des fonctions d'input et d'output intégrées pour les trois principaux formats spatiaux : Well-Known Text, Well-Known Binary, et GeoJSON. Tout comme la création de géométries, ces fonctions de parsing sont vectorisées. Tu prends tout ton array de mille strings GeoJSON et tu le passes directement à la fonction shapely dot from geojson. Ça parse tout le batch d'un coup et ça renvoie un array de géométries haute performance. Si tes données étaient au format texte, tu utiliserais shapely dot from wkt. Si elles étaient au format binaire, tu utiliserais shapely dot from wkb. Ça couvre les inputs. Et pour les outputs ? Une fois que tu as fini de traiter tes points de livraison, tu dois les sauvegarder ou les envoyer vers une base de données. Tu inverses le processus en utilisant les fonctions d'export. Si tu fais du debug et que tu as besoin de lire les coordonnées de tes propres yeux, tu utilises shapely dot to wkt. Well-Known Text te donne une string lisible par un humain, qui épelle le type de géométrie suivi des coordonnées. Cependant, le parsing de texte coûte cher et prend de la place. Si tu envoies ces données vers une base de données spatiale, ou que tu les stockes pour plus tard, tu devrais utiliser shapely dot to wkb. Well-Known Binary est la représentation en bytes bruts de la géométrie. C'est nettement plus petit, ça évite la perte de précision due à la conversion de strings en virgule flottante, et c'est beaucoup plus rapide à lire et à écrire pour les machines. Tu passes ton array de géométries dans shapely dot to wkb, et tu obtiens un array de byte strings prêt pour le stockage. À chaque fois que tu fais entrer ou sortir des données spatiales de ton application, rappelle-toi que les boucles Python sont l'ennemi. L'habitude la plus importante pour les performances, c'est de passer des arrays complets aux fonctions Shapely au pluriel, en laissant la librairie C sous-jacente faire le gros du travail en une seule passe. Merci d'avoir écouté, et happy coding tout le monde !
3

Mesures et propriétés

3m 31s

Apprenez à extraire des mesures critiques de vos géométries. Vous comprendrez comment calculer l'aire, la longueur et des métriques de distance avancées comme la Hausdorff distance.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Shapely, épisode 3 sur 8. La distance classique t'indique à quel point deux lignes se rapprochent l'une de l'autre. Mais si tu veux connaître l'écart maximum absolu entre elles, la distance classique ne sert strictement à rien. Pour répondre à ça, tu as besoin de comprendre les mesures et les propriétés. Chaque objet geometry dans Shapely possède des attributs intégrés qui décrivent ses dimensions physiques. Les plus basiques sont area, length et bounds. La propriété area te donne l'espace en deux dimensions couvert par une forme. Pour un polygon, c'est un nombre positif. Pour les points et les lignes, la propriété area vaut exactement zéro. La propriété length renvoie l'étendue en une dimension d'une geometry. Pour une ligne, c'est la distance du début à la fin le long du tracé. La propriété bounds te fournit les limites exactes des coordonnées de ta forme. Elle renvoie un tuple de quatre nombres qui représente le X minimum, le Y minimum, le X maximum et le Y maximum. C'est ta bounding box. Imagine un scénario où tu as deux traces GPS de coureurs, toutes les deux représentées sous forme de LineStrings. Tu lis la propriété length pour voir la distance totale que chaque personne a courue. Tu lis la propriété bounds pour définir le viewport rectangulaire exact dont tu as besoin pour afficher leurs deux parcours sur un écran. Les maths deviennent plus lourdes quand tu as besoin de mesurer l'espace entre ces deux traces. La mesure de distance standard renvoie l'écart absolu le plus court entre deux objets geometry. Elle scanne la trace A, scanne la trace B, et trouve l'unique paire de points la plus proche. Si les deux coureurs se sont croisés à une intersection à la moitié de leur course, la distance standard entre leurs traces est de zéro. Voici l'idée clé. Les gens confondent fréquemment la distance classique avec la distance de Hausdorff. La distance classique trouve les points les plus proches. La distance de Hausdorff trouve la distance la plus éloignée entre les points les plus proches. Dis-toi que la distance de Hausdorff mesure la dérive maximale. Elle représente le plus grand écart que tu serais forcé de traverser si quelqu'un te plaçait au pire endroit possible sur une trace et te disait de marcher jusqu'au point le plus proche sur l'autre trace. Si nos deux coureurs ont commencé au même endroit, se sont séparés de deux miles au milieu de leur entraînement, et ont fini au même endroit, la distance classique est de zéro. La distance de Hausdorff est de deux miles. Elle définit la séparation dans le pire des cas sur toute la longueur des deux objets geometry. Il y a une autre fonction de mesure qui s'appelle minimum clearance. Celle-ci ne compare pas deux objets différents. Elle mesure la stabilité structurelle d'un seul objet geometry. Le minimum clearance calcule la plus petite distance dont un nœud peut se déplacer avant que la geometry ne s'effondre dans un état invalide, comme une ligne qui se chevauche elle-même. Si ta geometry a un tout petit minimum clearance, les coordonnées sont serrées de très près. Une légère erreur d'arrondi pendant un export de base de données pourrait complètement casser la forme. Si tu veux simplifier les données des coureurs pour économiser de la taille de fichier, vérifier le minimum clearance te dit exactement de combien tu peux décaler les points avant que la geometry ne se détruise. Savoir à quel point deux formes se rapprochent permet de gérer les collisions de base. Connaître la limite maximale absolue de leur séparation détermine à quel point tu comprends vraiment la relation spatiale entre elles. Merci d'avoir passé quelques minutes avec moi. À la prochaine, prends soin de toi.
4

Prédicats spatiaux et la DE-9IM

3m 36s

Maîtrisez l'art de vérifier les relations spatiales. Vous apprendrez à utiliser des prédicats booléens pour déterminer exactement comment deux formes interagissent, grâce à la matrice DE-9IM.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Shapely, épisode 4 sur 8. Tu conçois le tracé d'une nouvelle ligne de métro près d'une zone humide protégée. Tu dois savoir si la voie traverse l'eau directement ou si elle longe juste le bord. Comment l'ordinateur calcule ça mathématiquement ? Il utilise une matrice trois par trois super maligne pour répondre à la question. Ça nous amène aux prédicats spatiaux et au Dimensionally Extended nine-Intersection Model, ou DE-9IM. Les prédicats spatiaux sont des fonctions binaires. Ils comparent deux géométries et renvoient exactement une chose : True ou False. Ils ne créent pas de nouvelles formes. Ils ne calculent pas les zones de chevauchement. Ils répondent simplement par oui ou par non à des questions sur les relations topologiques. Sous le capot, Shapely évalue ces relations en utilisant le DE-9IM. Chaque géométrie a trois parties : un intérieur, une frontière et un extérieur. Le DE-9IM est une matrice qui teste les intersections entre ces trois parties de la première géométrie et les trois parties de la deuxième géométrie. Trois parties fois trois parties, ça te donne neuf intersections possibles. Selon quelles intersections donnent un ensemble vide, un point, une ligne ou une surface, Shapely détermine la relation exacte. Appliquons ça à la ligne de métro et à la zone humide. Le prédicat le plus large, c'est intersects. Si la voie partage le moindre point, ligne ou surface avec la zone humide, intersects renvoie True. C'est le fourre-tout de base. Si intersects est False, les deux géométries sont complètement séparées dans l'espace. Mais tu as souvent besoin de plus de précision. Tu veux savoir si la ligne de métro traverse vraiment la zone humide. Pour ça, tu utilises crosses. Une ligne crosses un polygone si son intérieur intersecte l'intérieur du polygone, mais que la ligne s'étend aussi à l'extérieur du polygone. La matrice DE-9IM vérifie que l'intersection de leurs intérieurs est une ligne, et que l'intérieur de la ligne intersecte aussi l'extérieur du polygone. Si les deux sont vraies, crosses renvoie True. Et si la voie longe exactement la bordure de la zone humide sans entrer dans l'eau ? C'est là que touches entre en jeu. Deux géométries se touchent si elles partagent au moins un point, mais que leurs intérieurs ne s'intersectent pas du tout. Seules leurs frontières interagissent. Si la voie dévie ne serait-ce d'un millimètre dans l'intérieur de la zone humide, touches devient False. Maintenant, imagine une station de métro construite complètement à l'intérieur de la zone humide. Là, tu vérifies l'inclusion. On confond souvent contains et within, mais ce sont juste des opérations inverses l'une de l'autre. Si la zone humide contains la station, alors la station est within la zone humide. Géométriquement, ça signifie que l'intérieur et la frontière de la station sont entièrement enfermés dans l'intérieur de la zone humide. Aucune partie de la station n'intersecte l'extérieur de la zone humide. Tu peux écrire ton code en vérifiant si la zone humide contains la station, ou en vérifiant si la station est within la zone humide. Le résultat est exactement le même. Voici l'idée clé. Tu n'as pas besoin de mémoriser la matrice des neuf intersections pour tracer ton métro, mais savoir qu'elle existe explique pourquoi ces vérifications binaires sont si fiables. Chaque prédicat spatial nommé est juste un motif spécifique de flags True et False dans cette matrice mathématique sous-jacente. Merci d'avoir écouté. J'espère que tu as appris quelque chose de nouveau.
5

Opérations ensemblistes

3m 22s

Découvrez comment fusionner, couper et diviser des géométries. Vous apprendrez à utiliser des opérations mathématiques ensemblistes telles que l'intersection, la différence et l'union pour créer de toutes nouvelles formes.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Shapely, épisode 5 sur 8. Les diagrammes de Venn ne servent pas qu'aux ensembles logiques ou aux requêtes de base de données. Tu peux utiliser exactement les mêmes principes mathématiques pour découper physiquement la géographie du monde réel. Pour faire ça, tu as besoin des opérations ensemblistes. Dans Shapely, chaque geometry est essentiellement un ensemble infini de points sur un plan en deux dimensions. Comme ce sont des ensembles, tu peux les manipuler en utilisant la théorie des ensembles classique. D'abord, on doit dissiper une source fréquente de confusion. Les prédicats spatiaux, comme vérifier si deux formes se touchent ou se croisent, évaluent une condition et renvoient un simple True ou False. Les opérations ensemblistes font quelque chose de complètement différent. Elles renvoient de tout nouveaux objets geometry. Elles prennent deux formes en input, analysent leurs points de chevauchement, et construisent une toute nouvelle troisième forme en output. Prends un scénario concret. Tu as deux datasets de polygones. L'un représente une ancienne carte de zones inondables. L'autre est un modèle de risque d'inondation récemment mis à jour. Tu dois calculer la zone exacte où ces deux modèles correspondent. Pour ça, tu utilises la méthode intersection. Tu appelles intersection sur la première geometry et tu passes la deuxième geometry en argument. Shapely regarde le chevauchement spatial et renvoie un nouveau polygone qui contient uniquement les points qui existent à la fois dans l'ancienne et dans la nouvelle carte. Si les deux formes ne se chevauchent pas du tout, ça renvoie une geometry vide. Maintenant, et si tu as besoin de trouver les zones à risque strictement nouvelles ? Ce sont les quartiers qui étaient sûrs sur l'ancienne carte, mais qui sont maintenant dans la zone inondable mise à jour. Ici, tu utilises la méthode difference. Tu prends la geometry de ton nouveau modèle d'inondation et tu appelles difference, en passant la geometry de l'ancienne carte. Ça renvoie une forme contenant tous les points du nouveau modèle, moins explicitement tous les points qui étaient déjà dans l'ancien. L'ordre est crucial ici. Si tu l'inverses et que tu appelles difference sur l'ancienne carte, en passant le nouveau modèle, tu obtiens un résultat complètement différent. Tu obtiens les zones qui ne sont plus considérées à risque. C'est juste une soustraction spatiale. Parfois, tu ne veux pas comparer des formes, tu veux juste les combiner. Si les services d'urgence ont besoin d'une carte globale de tout ce qui a déjà été signalé comme risque d'inondation, tu utilises la méthode union. Tu appelles union sur une forme, tu passes l'autre, et Shapely les fusionne. Si les formes se chevauchent, les frontières internes se dissolvent. L'output est une seule geometry continue qui représente tous les points des deux formes d'origine. Enfin, il y a la méthode symmetric difference. Vois ça comme l'équivalent spatial d'une opération exclusive OR. Ça renvoie une nouvelle geometry contenant les points qui sont soit dans l'ancienne carte, soit dans la nouvelle, mais absolument pas dans les deux. Dans notre scénario d'inondation, cette seule opération te donne exactement les zones de désaccord entre les deux modèles. Ça produit en output les zones à risque nouvellement ajoutées avec les zones à risque nouvellement retirées, en vidant complètement les zones où les modèles sont d'accord. Voici l'idée clé. Quand tu arrêtes de voir les frontières spatiales comme des concepts géographiques complexes et que tu commences à les traiter comme des ensembles mathématiques de base, calculer des chevauchements et des exclusions complexes devient un process prévisible et complètement standard. C'est tout pour cette fois. Merci d'avoir écouté, et continue de développer !
6

Opérations constructives : Buffers et Hulls

3m 35s

Apprenez à générer synthétiquement de nouvelles formes de limites. Vous explorerez le buffering, la création de zones de sécurité et l'enveloppement de points dispersés à l'aide de convex et concave hulls.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Shapely, épisode 6 sur 8. Un simple point mathématique a une aire exactement égale à zéro. C'est juste une position. Mais comment faire si tu dois représenter le rayon d'une explosion autour de cette position ? Tu peux instantanément transformer ce point de dimension zéro en un polygone massif et précis. C'est toute la puissance des opérations constructives, et plus particulièrement des buffers et des hulls. Les opérations constructives prennent une géométrie existante et en créent une nouvelle, différente, en fonction de ses propriétés spatiales. Tu peux les voir comme des wrappers de sécurité autour de tes données spatiales. L'opération constructive la plus utilisée, c'est le buffer. Tu passes une valeur de distance à la fonction buffer, et Shapely te retourne un polygone qui représente tous les points situés à cette distance exacte de ta géométrie d'origine. Si tu as une ligne qui représente la trajectoire d'un déversement de produits chimiques le long d'une autoroute, et que tu dois établir une zone de sécurité de 50 mètres, tu appelles buffer sur cette géométrie de ligne avec une distance de 50. L'output est un nouveau polygone qui trace tout le trajet, en s'étendant vers l'extérieur d'exactement 50 mètres dans toutes les directions. Mais voici le truc important. Les buffers ne font pas que s'agrandir. Ils peuvent aussi rétrécir. Si tu passes une distance positive, la géométrie se gonfle. Si tu appliques une distance négative à un polygone, la géométrie se dégonfle. Un buffer négatif tire les limites vers l'intérieur. C'est super utile pour trouver le noyau central sûr d'une zone, en isolant la surface qui se trouve à une distance stricte des bords dangereux. Parfois, tu n'as pas besoin d'un buffer exact autour de formes complexes. Tu as juste besoin des limites absolues de tes données. Appeler la propriété envelope te donne exactement ça. Elle te retourne la bounding box, c'est-à-dire le plus petit rectangle parfaitement droit qui englobe complètement ta géométrie. C'est très peu coûteux à calculer mathématiquement et parfait pour du spatial indexing rapide. Mais que se passe-t-il quand tes données ne sont pas une forme solide, mais une collection de points dispersés ? Si tu as des dizaines d'échantillons de sol contaminé et que tu dois tracer une seule limite continue autour de la zone affectée, tu as besoin d'un hull. Shapely te donne deux moyens principaux de le faire. Le convex hull calcule le plus petit polygone convexe qui contient toutes tes géométries. Tu peux imaginer ça comme un élastique tendu autour d'une planche remplie de piquets. L'élastique se tend fermement sur les piquets les plus à l'extérieur. Comme c'est convexe, la limite ne se creuse jamais vers l'intérieur. Il n'y a aucun angle intérieur supérieur à 180 degrés. Bien que le convex hull soit fiable, il inclut souvent beaucoup d'espace vide si tes points forment un croissant ou un cluster irrégulier. Si tu as besoin d'un ajustement plus précis, tu utilises un concave hull. Au lieu d'un élastique rigide, un concave hull agit comme un film thermorétractable. Il permet à la limite de se creuser vers l'intérieur pour suivre l'empreinte réelle de tes données. Tu contrôles à quel point il s'ajuste en modifiant un paramètre qui limite la longueur maximale autorisée des bords de la limite. Des limites plus strictes forcent la bordure à se replier dans les espaces entre les points, ce qui te donne une carte très précise et réaliste de ce sol contaminé. La différence entre ces outils se résume à la façon dont ils épousent tes données. L'envelope te donne une boîte large et rapide, le convex hull s'étire fermement sur les points extérieurs extrêmes, le concave hull moule la forme exacte, et le buffer ajoute un padding strict sur les bords selon une distance définie. Si tu veux aider à ce que ces épisodes continuent, tu peux soutenir l'émission en cherchant DevStoriesEU sur Patreon. C'est tout pour celui-ci. Merci d'avoir écouté, et continue de coder !
7

Opérations constructives avancées

3m 39s

Faites passer la manipulation de vos formes au niveau supérieur. Vous apprendrez à nettoyer des polygones massifs grâce à la simplification, à assembler des éléments avec le snap, et à générer des diagrammes de Voronoi.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Shapely, épisode 7 sur 8. Essaie de faire le rendu d'un littoral d'un million de points sur une carte web, et tu vas vite faire planter le navigateur de l'utilisateur. Il te faut un moyen de réduire l'empreinte de ces données à 1 % de leur taille d'origine tout en gardant un aspect complètement identique. Ça demande des opérations constructives avancées. L'outil principal pour ce nettoyage de données, c'est la fonction simplify. Les auditeurs pensent parfois que simplifier une forme, c'est juste sauter un point sur deux ou trois dans un array. Faire ça détruit la géométrie. Ça crée des lignes qui s'auto-intersectent, ça fait disparaître les petites îles et ça ruine la structure topologique. La fonction simplify de Shapely évalue la vraie géométrie. Tu lui passes ton littoral complexe et une valeur de tolérance. La fonction supprime les sommets qui ne s'écartent pas de la forme de base au-delà de cette tolérance. Point crucial, Shapely te donne un flag pour préserver la topologie. Quand il est activé, l'algorithme vérifie activement si supprimer un point va faire se croiser un polygone ou le diviser en morceaux invalides. Ça garantit que ton littoral fortement compressé reste mathématiquement valide. Une fois que tu as simplifié un base layer très lourd, tu as souvent besoin que d'autres layers s'alignent parfaitement avec. Disons que tu as des parcelles de terrain ou des limites de propriété qui s'arrêtent exactement au bord de l'eau. Comme tu viens de simplifier le littoral, ses bords se sont légèrement décalés. Ça crée des chevauchements microscopiques ou des espaces vides, qu'on appelle des slivers. Tu corriges ça en utilisant la fonction snap. Tu fournis la géométrie de ta limite de propriété, la géométrie de ton littoral et une distance de tolérance stricte. Snap regarde les sommets de la première forme. Si un sommet se trouve dans la distance de tolérance d'un sommet ou d'un segment de la deuxième forme, il est directement attiré dessus. Les points en dehors de la tolérance restent exactement là où ils sont. Ça crée un ajustement parfait et sans faille entre les géométries adjacentes, sans déformer le reste de la forme. Voilà pour le nettoyage des formes existantes. L'autre aspect des opérations constructives, c'est la division de l'espace vide en utilisant des points. Si tu prends les sommets d'une géométrie, tu peux les passer à la fonction delaunay triangles. Ça connecte ces points pour former un mesh continu de triangles qui ne se chevauchent pas. La logique dessine spécifiquement ces triangles pour maximiser les plus petits angles internes. Ça évite les triangles longs en forme d'aiguille, ce qui crée un mesh équilibré très utile pour le rendu de terrain. Si tu veux seulement le contour de ces connexions plutôt que des formes pleines, tu peux définir un flag pour ne renvoyer que les edges des lignes. Très similaire, il y a la fonction voronoi polygons. Alors que Delaunay connecte des points, Voronoi dessine des frontières entre eux. Tu fournis une géométrie, et Shapely utilise ses sommets pour diviser la zone environnante en régions polygonales complètement distinctes. N'importe quel endroit à l'intérieur d'un polygone de Voronoi spécifique est plus proche de son point générateur central que de n'importe quel autre point de tout le set. Si tu analyses une dispersion de hubs de livraison, les polygones de Voronoi cartographient instantanément la zone de couverture exacte pour chaque hub en se basant sur la pure proximité. Tout comme pour Delaunay, tu peux dire à la fonction de ne renvoyer que les edges des frontières si tu n'as pas besoin de polygones pleins. Voici l'idée clé. Les données spatiales du monde réel sont denses, déconnectées et s'alignent rarement parfaitement. Les opérations constructives comme simplify, snap et Voronoi te donnent les outils pour imposer un ordre mathématique, rendant les données assez légères pour le rendu et assez précises pour l'analyse. Merci d'avoir passé quelques minutes avec moi. À la prochaine, prends soin de toi.
8

Indexation spatiale à haute performance avec STRtree

3m 53s

Débloquez des requêtes spatiales ultra-rapides. Vous apprendrez à utiliser l'arbre Sort-Tile-Recursive (STR) pour filtrer instantanément des ensembles de données spatiales massifs et effectuer des recherches de plus proche voisin presque instantanées.

Télécharger
Salut, c'est Alex de DEV STORIES DOT EU. Shapely, épisode 8 sur 8. Comparer un seul point à un million de polygones demande un temps de calcul énorme, pourtant certaines applications le font en quelques millisecondes. Elles ne calculent pas toutes les distances. Elles filtrent 99 % des données avant même de faire la moindre équation mathématique. C'est ça l'indexation spatiale haute performance avec le STRtree. Disons que tu veux trouver le café le plus proche parmi dix mille emplacements par rapport aux coordonnées GPS actuelles d'un utilisateur. Si tu calcules la distance exacte pour chaque café, ton système va complètement ramer. À la place, l'indexation spatiale utilise un R-tree. Imagine un R-tree comme un système de dossiers hiérarchique pour un espace en deux dimensions. Il dessine un simple rectangle, qu'on appelle une bounding box ou une enveloppe, autour de groupes de géométries proches. Ensuite, il dessine des boîtes plus grandes autour de ces boîtes. Vérifier si deux rectangles simples se chevauchent est une opération très peu coûteuse en calcul. Dans Shapely, l'implémentation spécifique est le STRtree, qui signifie Sort-Tile-Recursive. Tu en crées un en passant un array de géométries dans le constructor. Sous le capot, ça fait un bulk-load de l'index. L'arbre est construit une seule fois et il est immutable. Tu ne peux pas ajouter ou supprimer d'éléments après sa création. Tu dois préparer tout ton dataset à l'avance. Une fois que l'arbre existe, tu fais des recherches dedans en utilisant la méthode query. Tu passes une géométrie en input, et la méthode retourne un array NumPy d'indices entiers. Ces indices correspondent directement à la séquence originale de géométries que tu as utilisée pour construire l'arbre. Si tu passes plusieurs géométries en input en même temps, query retourne un array en deux dimensions, qui associe les indices de tes inputs avec les indices correspondants dans l'arbre. Voici le point clé. L'index de base d'un STRtree vérifie uniquement les bounding boxes, pas les géométries exactes. Si tu fais un query sur un polygone complexe, l'arbre utilise l'enveloppe carrée de ce polygone pour trouver des correspondances. Ça te donne une liste restreinte de candidats qui contient des faux positifs. Pour obtenir une réponse exacte, Shapely te permet de passer un prédicat spatial, comme intersects ou contains, directement dans la méthode query comme argument. L'arbre utilise d'abord les bounding boxes, qui sont peu coûteuses, pour trouver des candidats, puis il évalue automatiquement ton prédicat exact sur cette liste restreinte. Ça permet de garder le gros du travail mathématique dans le code C compilé. Au-delà des chevauchements, le STRtree excelle pour la proximité. Pour en revenir à notre scénario de café, tu n'as pas besoin de vérifier les enveloppes manuellement. Tu utilises la méthode query nearest. Tu passes le point GPS de ton utilisateur, et l'arbre parcourt ses boîtes hiérarchiques pour trouver la géométrie la plus proche dans l'absolu, sans faire la mesure avec les dix mille autres. Il retourne immédiatement l'index du café le plus proche. Tu peux aussi spécifier un paramètre pour retourner un array des N plus proches voisins, ou définir un seuil de distance maximum pour limiter complètement le rayon de recherche. Il y a aussi une méthode nearest distincte, qui compare deux arbres séparés entre eux pour trouver les paires de géométries les plus proches. Les opérations géométriques en elles-mêmes sont toujours la partie la plus coûteuse de l'analyse spatiale. Le STRtree agit comme un filtre impitoyable. Il t'évite de gaspiller des cycles CPU sur des géométries qui ne sont pas du tout proches les unes des autres, en te fournissant une toute petite liste de candidats gérable, pour que tes vérifications mathématiques exactes ne s'exécutent que quand c'est absolument nécessaire. Ça conclut notre série sur Shapely. Je t'encourage vivement à explorer la documentation officielle et à tester ces concepts d'indexation toi-même dans tes propres datasets. Si tu as des workflows ou des outils que tu aimerais voir abordés dans de futures séries, visite devstories dot eu et laisse-nous une suggestion. Merci d'avoir écouté. À la prochaine !