/ Entwickler / Korrektur von Feldgrenzen

Korrektur von Feldgrenzen

Feldgrenzen kommen selten perfekt an. Launch Pad schickt jede Grenze durch eine automatische Pipeline zur Geometriekorrektur, die ungültige Formen erkennt und vor der Planung repariert, damit Spurpläne immer aus sauberer, gültiger Geometrie erzeugt werden.

Die meisten Probleme mit Feldgrenzen sind unsichtbar

Ungültige Geometrie ist in realen Grenzdaten erstaunlich häufig, und das meiste davon ist auf der Karte nicht zu sehen: Eine Selbstüberschneidung kann sich in einem einzigen Stützpunkt verbergen. Die meisten Kunden erfahren nie, dass ihre Grenzen solche Probleme haben, weil Launch Pad sie automatisch korrigiert. Wenn Sie eine Integration mit der API entwickeln und sich fragen, warum eine zurückgelesene Grenze leicht von der gesendeten abweicht, erklärt diese Seite, was passiert ist und warum.

Woher ungültige Geometrie kommt

Manuelle Bearbeitung

Wer ein Polygon auf der Karte zeichnet und danach Stützpunkte hinzufügt, löscht oder verschiebt, kann Selbstüberschneidungen und Überlappungen erzeugen, ohne dass etwas davon sichtbar wird.

Dienste von Drittanbietern

Grenzen, die von verbundenen Plattformen verändert wurden (zum Beispiel John Deere Operations Center), können topologisch fehlerhaft zurückkommen.

Dateien mit gemischtem Inhalt

Hochgeladene Dateien enthalten manchmal verirrte Punkte, Linien oder Geometriesammlungen statt sauberer Polygone.

Mehr als ein einfaches "make valid"

Die meisten GIS-Stacks reparieren defekte Geometrie mit einer einzigen "make valid"-Operation, also einem pauschalen Gültigmachen. Das behebt den Topologiefehler, ist aber ein grobes Werkzeug ohne Vorstellung davon, wie eine brauchbare Feldgrenze danach aussehen sollte. Launch Pad wendet stattdessen eine Abfolge gezielter Korrekturen an und behält eine allgemeine "make valid"-Reparatur als Fallback für Fälle, die sich mit den gezielten Korrekturen nicht beheben lassen.

Filterung

Punkte, Linien und andere nicht flächenhafte Geometrien werden entfernt, sodass nur Polygone weiterverarbeitet werden.

Aufteilung

Selbstüberschneidende äußere Grenzen werden in separate gültige Polygone aufgeteilt, statt einen Teil des Felds zu verwerfen.

Zusammenführung

Überlappende oder sich überschneidende Löcher werden zu einem einzigen Loch vereinigt, wie es die Spezifikation verlangt.

Pufferung

Ringe werden mit einer kleinen Toleranz gepuffert, damit Löcher nie eine Kante mit der äußeren Grenze teilen.

Rekonstruktion

Löcher werden von den äußeren Grenzen abgezogen, um ein sauberes MultiPolygon neu aufzubauen; Löcher, die über ihre Hülle hinausragen, werden dabei zugeschnitten.

Entfernen von Splitterflächen

Winzige Fragmente unterhalb einer Mindestfläche werden verworfen, es sei denn, sie sind das einzige Stück des Felds.

Normalisierung

Die Umlaufrichtung der Ringe folgt der Rechte-Hand-Regel von GeoJSON, und die Koordinaten werden auf 2D reduziert; vorhandene Höhenwerte werden entfernt.

Fallback-Reparatur

Eine allgemeine "make valid"-Reparatur behandelt Selbstüberschneidungen und andere Fehler, die die gezielten Schritte überstehen.

Was "gültig" bedeutet

Das Ergebnis der Pipeline ist immer ein gültiges MultiPolygon und folgt den Gültigkeitsregeln für Polygone und MultiPolygone der OGC Simple Features Specification:

  • Jedes Polygon hat genau einen Außenring, und dieser Ring ist ein gültiges Polygon: eine geschlossene Linie mit mindestens 3 unterschiedlichen Punkten und ohne Selbstüberschneidungen.
  • Innenringe, falls vorhanden, sind gültige Polygone, die vollständig innerhalb ihres Außenrings liegen.
  • Innenringe überschneiden sich nicht gegenseitig; Ringe, die es doch tun, werden zu einem zusammengeführt.

Außenring (Hülle)

Die äußere Grenze eines Polygons. Es gibt genau einen pro Polygon.

Innenring (Loch)

Eine innere Grenze, die aus dem Polygon ausgeschnitten wird, etwa eine Feuchtsenke oder ein Steinhaufen. Ein Polygon kann viele Löcher haben.

MultiPolygon

Eine Sammlung von Polygonen. Ein Feld mit zwei getrennten Teilflächen ist ein MultiPolygon mit zwei Polygonen.

Zusammenführung

Eine Vereinigungsoperation der Geometrie: Überlappende Formen werden zu einer einzigen Form kombiniert.

So funktioniert die Pipeline

  1. 1
    Eingabe normalisieren. Nur polygonale Geometrie wird behalten. Punkte, Linien und andere nicht flächenhafte Bestandteile von Geometriesammlungen werden verworfen, und die Außenringe werden extrahiert.
  2. 2
    Jeden Ring validieren. Jedes äußere Polygon wird der Reihe nach validiert, anschließend jeder Innenring.
  3. 3
    Selbstüberschneidungen reparieren. Selbstüberschneidende Außenringe werden in separate Polygone aufgeteilt. Sich überschneidende Innenringe werden zusammengeführt. Löst eine Zusammenführung eine Überschneidung innerhalb der Haupthülle nicht auf, fällt das Polygon auf eine allgemeine "make valid"-Reparatur zurück.
  4. 4
    Ringe puffern. Jeder Ring wird mit einer kleinen Toleranz gepuffert, damit Innenringe nie eine Kante mit einem Außenring teilen.
  5. 5
    Ergebnis neu aufbauen. Innenringe werden von den Außenringen abgezogen, um das endgültige gültige MultiPolygon zu bilden. Löcher, die außerhalb einer Hülle liegen, werden auf die Hülle zugeschnitten, die sie enthält, und ein Loch, das vollständig außerhalb jeder Hülle liegt, bleibt als eigenes Polygon erhalten, statt verworfen zu werden.

Lässt sich die Eingabe nicht retten, etwa wenn nach dem Entfernen der ungültigen Teile nichts übrig bleibt, meldet Launch Pad den Fehler, statt eine Form zu erfinden, und jeder Korrekturschritt wird protokolliert, sodass sich das Ergebnis überprüfen lässt.

Hinweis: Die Verarbeitung erfolgt in einem projizierten Koordinatensystem, sodass Entfernungen in Metern vorliegen, und das Ergebnis wird zurück nach WGS84 konvertiert. Deshalb werden Puffertoleranzen in Metern statt in Grad angegeben.

Vorher-Nachher-Beispiele

Fünf repräsentative Fälle mit fehlerhafter Eingabegeometrie (blau) und der korrigierten Ausgabe (gelb). Klappen Sie das WKT auf, um die exakten Koordinaten zu sehen.

Fall 1: Gemischte Geometrietypen

Die Eingabe ist eine GeometryCollection statt eines MultiPolygons und enthält neben dem eigentlichen Polygon einen LineString und einen Point. Linie und Punkt werden entfernt, und der Außenring wird aus dem Polygon extrahiert.

Eingabe
Eingabegeometrie mit einem Polygon sowie einer verirrten Linie und einem verirrten Punkt
Eingabe-WKT
GEOMETRYCOLLECTION (LINESTRING (131 125, 305 326),
  POINT (260 130),
  POLYGON ((130 330, 223 330, 223 245, 130 245, 130 330)))
Ergebnis
Ergebnisgeometrie: ein einzelnes sauberes Polygon, Linie und Punkt wurden entfernt
Ergebnis-WKT
MULTIPOLYGON (((130 330, 223 330, 223 245, 130 245, 130 330)))

Fall 2: Selbstüberschneidende Grenze

Der Außenring kreuzt sich selbst und bildet eine Fliegenform (Bowtie). Das ist kein gültiges Polygon, und viele Planungssysteme würden es ablehnen oder stillschweigend einen der beiden Flügel verwerfen. Die Bereinigung teilt den Ring am Kreuzungspunkt in zwei gültige Polygone auf und erhält so die gesamte gezeichnete Fläche.

Eingabe
Eingabepolygon, dessen Umriss sich selbst kreuzt und eine Fliegenform bildet, mit hervorgehobenem Schnittpunkt
Eingabe-WKT
POLYGON ((120 110, 120 360, 340 130, 310 360, 120 110))
Ergebnis
Ergebnisgeometrie: die Fliegenform, aufgeteilt in zwei gültige Polygone, die sich in einem einzigen Punkt berühren
Ergebnis-WKT
MULTIPOLYGON (((120 110, 120 360, 225.87639311043566 249.3110435663627, 120 110)),
  ((225.87639311043566 249.3110435663627, 310 360, 340 130, 225.87639311043566 249.3110435663627)))

Fall 3: Überlappende Löcher

Zwei Innenringe überschneiden sich gegenseitig, was die Spezifikation verbietet. Die Löcher werden zu einem einzigen zusammengeführt, und das Polygon wird mit dem kombinierten Loch neu erstellt.

Eingabe
Eingabegeometrie mit zwei überlappenden Löchern innerhalb der Feldgrenze
Eingabe-WKT
-- 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)))
Ergebnis
Ergebnisgeometrie: die überlappenden Löcher, zu einem einzigen Loch innerhalb der Grenze zusammengeführt
Ergebnis-WKT
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)))

Fall 4: Überlappende Außenringe

Mehrere Außenringe überlappen sich und weisen Selbstüberschneidungen auf; zusammen umschließen sie eine leere Aussparung. Die Ringe werden gepuffert und zu einem einzigen Umriss zusammengeführt, und die eingeschlossene Aussparung bleibt als echtes Loch erhalten.

Eingabe
Eingabegeometrie mit mehreren überlappenden Rechtecken, die in einer Schleife angeordnet sind
Eingabe-WKT
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)))
Ergebnis
Ergebnisgeometrie: die Rechtecke, zu einem Umriss zusammengeführt, der ein einziges Loch umschließt
Ergebnis-WKT
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)))

Fall 5: Löcher außerhalb der Hülle

Das Feld hat zwei getrennte Außenringe, und die Löcher halten sich nicht daran: Ein Loch überspannt die Lücke zwischen den beiden Hüllen, andere ragen über die Ränder hinaus. Jede Hülle wird separat neu aufgebaut, und jedes Loch wird auf die Hülle zugeschnitten, die es enthält, mit einem kleinen Puffer, damit kein Loch eine Kante mit seiner Hülle teilt.

Eingabe
Eingabegeometrie mit zwei getrennten Umrissen und Löchern, die diese kreuzen oder außerhalb liegen
Eingabe-WKT
-- 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)))
Ergebnis
Ergebnisgeometrie: zwei saubere Polygone, bei denen jedes Loch so zugeschnitten ist, dass es in seinen eigenen Umriss passt
Ergebnis-WKT
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)))

Verwandte Seiten