/ Développeurs / Correction des délimitations

Correction des délimitations

Les délimitations de parcelles arrivent rarement parfaites. Launch Pad fait passer chaque délimitation par un pipeline de correction géométrique automatique qui détecte les formes invalides et les répare avant la planification, de sorte que les Plans de Passages soient toujours générés à partir d'une géométrie propre et valide.

La plupart des problèmes de délimitation sont invisibles

La géométrie invalide est étonnamment fréquente dans les données de délimitation réelles, et elle est le plus souvent indécelable sur une carte : une auto-intersection peut se cacher dans un seul sommet. La plupart des clients ne savent jamais que leurs délimitations présentent ces défauts, car Launch Pad les corrige automatiquement. Si vous développez une intégration avec l'API et vous demandez pourquoi une délimitation que vous relisez diffère légèrement de celle que vous avez envoyée, cette page explique ce qui s'est passé et pourquoi.

D'où vient la géométrie invalide

Édition manuelle

Dessiner un polygone sur la carte, puis ajouter, supprimer ou faire glisser des sommets peut introduire des auto-intersections et des chevauchements sans aucun signe visible.

Services tiers

Les délimitations modifiées par des plateformes connectées (par exemple John Deere Operations Center) peuvent revenir topologiquement malformées.

Fichiers au contenu mixte

Les fichiers importés contiennent parfois des points isolés, des lignes ou des collections de géométries au lieu de polygones propres.

Bien plus qu'un simple « make valid »

La plupart des outils SIG réparent une géométrie défectueuse par une unique opération « make valid » (rendre valide). Cela résout l'erreur de topologie, mais c'est un instrument grossier, sans aucun parti pris sur ce à quoi doit ressembler ensuite une délimitation de parcelle exploitable. Launch Pad applique au contraire une séquence de corrections ciblées et conserve une réparation « make valid » générique en dernier recours pour les cas que les corrections ciblées ne parviennent pas à résoudre.

Filtrage

Les points, les lignes et les autres géométries sans surface sont supprimés afin que seuls les polygones poursuivent le traitement.

Division

Les anneaux extérieurs qui s'auto-intersectent sont divisés en polygones valides distincts au lieu d'écarter une partie de la parcelle.

Fusion

Les trous qui se chevauchent ou s'intersectent sont fusionnés par union en un seul trou, comme l'exige la spécification.

Tampon

Un tampon d'une faible tolérance est appliqué aux anneaux afin que les trous ne partagent jamais d'arête avec l'anneau extérieur.

Reconstruction

Les trous sont soustraits des anneaux extérieurs pour reconstruire un MultiPolygon propre, en rognant tout trou qui déborde de son enveloppe.

Suppression des fragments résiduels

Les fragments résiduels dont la surface est inférieure à un seuil minimal sont éliminés, sauf s'ils constituent le seul morceau de la parcelle.

Normalisation

L'orientation des anneaux suit la règle de la main droite de GeoJSON et les coordonnées sont aplaties en 2D, toute valeur d'altitude étant supprimée.

Réparation de secours

Une réparation « make valid » générique traite les auto-intersections et les autres erreurs qui subsistent après les étapes ciblées.

Ce que signifie « valide »

La sortie du pipeline est toujours un MultiPolygon valide, conforme aux règles de validité des polygones et des MultiPolygon de la OGC Simple Features Specification :

  • Chaque polygone possède exactement un anneau extérieur, et cet anneau est un polygone valide : une ligne fermée comptant au moins 3 points distincts et sans auto-intersection.
  • Les anneaux intérieurs, s'il y en a, sont des polygones valides entièrement situés à l'intérieur de leur anneau extérieur.
  • Les anneaux intérieurs ne s'intersectent pas entre eux ; ceux qui s'intersectent sont fusionnés en un seul.

Anneau extérieur (enveloppe)

Le contour extérieur d'un polygone. Il y en a exactement un par polygone.

Anneau intérieur (trou)

Un contour intérieur découpé dans le polygone, comme une zone humide ou un tas de pierres. Un polygone peut comporter de nombreux trous.

MultiPolygon

Une collection de polygones. Une parcelle composée de deux îlots séparés forme un seul MultiPolygon avec deux polygones.

Fusion

Une opération d'union géométrique : la combinaison de formes qui se chevauchent en une seule forme.

Comment fonctionne le pipeline

  1. 1
    Normaliser l'entrée. Seule la géométrie polygonale est conservée. Les points, les lignes et les autres membres sans surface des collections de géométries sont écartés, et les anneaux extérieurs sont extraits.
  2. 2
    Valider chaque anneau. Chaque polygone extérieur est validé tour à tour, puis chaque anneau intérieur.
  3. 3
    Réparer les auto-intersections. Les anneaux extérieurs qui s'auto-intersectent sont divisés en polygones distincts. Les anneaux intérieurs qui s'intersectent sont fusionnés. Si une fusion ne résout pas une intersection à l'intérieur de l'enveloppe principale, le polygone bascule vers une réparation « make valid » générique.
  4. 4
    Appliquer un tampon aux anneaux. Un tampon d'une faible tolérance est appliqué à chaque anneau afin que les anneaux intérieurs ne finissent jamais par partager une arête avec un anneau extérieur.
  5. 5
    Reconstruire le résultat. Les anneaux intérieurs sont soustraits des anneaux extérieurs pour former le MultiPolygon final valide. Les trous qui débordent d'une enveloppe sont rognés aux limites de l'enveloppe qui les contient, et un trou situé entièrement hors de toute enveloppe est conservé comme polygone à part entière plutôt que d'être écarté.

Si l'entrée ne peut pas être récupérée, par exemple lorsqu'il ne reste rien une fois les parties invalides supprimées, Launch Pad signale l'échec au lieu d'inventer une forme, et chaque étape de correction est journalisée afin que le résultat puisse être audité.

Remarque : Le traitement s'effectue dans un système de coordonnées projeté, où les distances sont en mètres, puis le résultat est reconverti en WGS84. C'est pourquoi les tolérances de tampon sont exprimées en mètres plutôt qu'en degrés.

Exemples avant/après

Cinq cas représentatifs de géométrie d'entrée malformée (en bleu) et de résultat corrigé (en jaune). Dépliez le WKT pour voir les coordonnées exactes.

Cas 1 : Types de géométries mélangés

L'entrée est une GeometryCollection plutôt qu'un MultiPolygon, et elle contient une LineString et un Point aux côtés du polygone proprement dit. La ligne et le point sont supprimés, et l'anneau extérieur est extrait du polygone.

Entrée
Géométrie d'entrée contenant un polygone accompagné d'une ligne et d'un point isolés
WKT d'entrée
GEOMETRYCOLLECTION (LINESTRING (131 125, 305 326),
  POINT (260 130),
  POLYGON ((130 330, 223 330, 223 245, 130 245, 130 330)))
Résultat
Géométrie du résultat : un seul polygone propre, la ligne et le point ayant été supprimés
WKT du résultat
MULTIPOLYGON (((130 330, 223 330, 223 245, 130 245, 130 330)))

Cas 2 : Délimitation avec auto-intersection

L'anneau extérieur se croise lui-même et forme un nœud papillon. Ce n'est pas un polygone valide, et de nombreux planificateurs le rejetteraient ou supprimeraient silencieusement l'un des lobes. Le module de correction divise l'anneau au point de croisement en deux polygones valides, préservant ainsi toute la surface dessinée.

Entrée
Polygone d'entrée dont le contour se croise lui-même en formant un nœud papillon, avec le point d'intersection mis en évidence
WKT d'entrée
POLYGON ((120 110, 120 360, 340 130, 310 360, 120 110))
Résultat
Géométrie du résultat : le nœud papillon divisé en deux polygones valides qui se rejoignent en un seul point
WKT du résultat
MULTIPOLYGON (((120 110, 120 360, 225.87639311043566 249.3110435663627, 120 110)),
  ((225.87639311043566 249.3110435663627, 310 360, 340 130, 225.87639311043566 249.3110435663627)))

Cas 3 : Trous qui se chevauchent

Deux anneaux intérieurs s'intersectent, ce que la spécification interdit. Les trous sont fusionnés en un seul, et le polygone est recréé avec ce trou combiné unique.

Entrée
Géométrie d'entrée avec deux trous qui se chevauchent à l'intérieur de la délimitation de la parcelle
WKT d'entrée
-- outer boundary
POLYGON ((130 460, 550 460, 550 30, 130 30, 130 460))
-- inner boundary
MULTIPOLYGON (((230 110, 410 290, 470 100, 230 110)),
  ((370 380, 400 140, 200 200, 370 380)))
Résultat
Géométrie du résultat : les trous qui se chevauchaient fusionnés en un seul trou à l'intérieur de la délimitation
WKT du résultat
MULTIPOLYGON (((130 460, 550 460, 550 30, 130 30, 130 460),
  (292.3076923076923 172.30769230769232, 200 200, 370 380, 384.44444444444446 264.44444444444446, 410 290, 470 100, 230 110, 292.3076923076923 172.30769230769232)))

Cas 4 : Anneaux extérieurs qui se chevauchent

Plusieurs anneaux extérieurs se chevauchent et s'auto-intersectent, délimitant ensemble une poche vide. Un tampon est appliqué aux anneaux, qui sont ensuite fusionnés en un contour unique, et la poche enclose est préservée en tant que véritable trou.

Entrée
Géométrie d'entrée avec plusieurs rectangles qui se chevauchent, disposés en boucle
WKT d'entrée
MULTIPOLYGON (((107 153, 134.3 153, 134.3 121.6, 107 121.6, 107 153),
  (120 147, 120 176.2, 130.5 176.2, 130.5 147, 120 147)),
  ((125 174, 163 174, 163 168, 125 168, 125 174)),
  ((157.5 178.6, 191 178.6, 191 156, 157.5 156, 157.5 178.6),
    (170 166, 185 166, 185 135, 170 135, 170 166)),
  ((180 140, 180 136, 120 136, 120 140, 180 140)))
Résultat
Géométrie du résultat : les rectangles fusionnés en un seul contour renfermant un trou unique
WKT du résultat
MULTIPOLYGON (((170 136, 134.3 136, 134.3 121.6, 107 121.6, 107 153, 120 153, 120 176.2, 130.5 176.2, 130.5 174, 157.5 174, 157.5 178.6, 191 178.6, 191 156, 185 156, 185 135, 170 135, 170 136),
  (130.5 168, 130.5 153, 134.3 153, 134.3 140, 170 140, 170 156, 157.5 156, 157.5 168, 130.5 168)))

Cas 5 : Trous hors de l'enveloppe

La parcelle comporte deux anneaux extérieurs distincts, et les trous ne les respectent pas : un trou enjambe l'espace entre les deux enveloppes et d'autres débordent des bords. Chaque enveloppe est reconstruite séparément et chaque trou est rogné aux limites de l'enveloppe qui le contient, avec un léger tampon afin qu'aucun trou ne partage d'arête avec son enveloppe.

Entrée
Géométrie d'entrée avec deux contours distincts et des trous qui les traversent ou en sortent
WKT d'entrée
-- outer boundary
MULTIPOLYGON (((104 199, 165 199, 165 125, 104 125, 104 199)),
  ((170 150, 195 150, 195 132, 170 132, 170 150)))
-- inner boundary
MULTIPOLYGON (((158.44444444444446 144.33333333333334, 174 144.33333333333334, 174 139, 158.44444444444446 139, 158.44444444444446 144.33333333333334)),
  ((101 169, 159 169, 159 165, 101 165, 101 169)),
  ((136 122, 109.44444444444444 122, 109.44444444444444 151.55555555555554, 136 151.55555555555554, 136 122)))
Résultat
Géométrie du résultat : deux polygones propres, chaque trou étant rogné pour tenir à l'intérieur de son propre contour
WKT du résultat
MULTIPOLYGON (((170 150, 195 150, 195 132, 170 132, 170 150),
  (170.0010000000475 144.33333333333334, 174 144.33333333333334, 174 139, 170.0010000000475 139, 170.0010000000475 144.33333333333334)),
  ((104 199, 165 199, 165 125, 104 125, 104 199),
    (109.44444444444444 125.0010000000475, 109.44444444444444 151.55555555555554, 136 151.55555555555554, 136 125.0010000000475, 109.44444444444444 125.0010000000475),
    (164.9989999999525 139, 158.44444444444446 139, 158.44444444444446 144.33333333333334, 164.9989999999525 144.33333333333334, 164.9989999999525 139),
    (104.0010000000475 169, 159 169, 159 165, 104.0010000000475 165, 104.0010000000475 169)))

Pages associées