Ungültiger Geometriezoo


9

Viele Male und oft habe ich Stunden damit verbracht, mit bizarren Fehlern zu kämpfen, die aus ungültigen Geometrien resultieren . Die Symptome variieren stark, einschließlich:

  • Datenbankverlangsamungen
  • Falsche \ Null-Abfrageergebnisse
  • Mit Fehlern und Warnungen überladene Protokolldateien
  • Inkonsistentes Ergebnis mit geometrischen Operatoren (z. B. Schnittpunkt)

Ich möchte die Arten ungültiger Geometrien kategorisieren, um allen hier zu helfen, ihre Daten zu bereinigen.

Bitte antworten Sie mit Ihrem bevorzugten Typ ungültiger Geometrie (ein Typ pro Antwort). Screenshots, Beschreibungen und Lösungen sind willkommen - aber versuchen Sie, Ihre Antwort kurz zu halten.

Antworten:



3

Segmente mit null Länge

Beispiel:

SELECT geomFromEWKT('LINESTRING(1 1, 1 1)');

                                    geomfromewkt                                    
------------------------------------------------------------------------------------
 0102000000020000000000000000000840000000000000104000000000000008400000000000001040

Probleme: Das Speichern von Nulllängensegmenten kann zu Fehlern bei der Berechnung von Längenverhältnissen (Division durch Null) oder beim Versuch, Azimute und trigonometrische Funktionen zu berechnen, führen.

Erkennung: In PostGIS können Segmente mit einer Länge von Null mithilfe von erkannt werden isValid().

Lösungen: Versuchen Sie, Segmente mit der Länge Null als Punkte beizubehalten.


3

Selbstüberschneidende Polygone

Geben Sie hier die Bildbeschreibung ein

Beispiel:

SELECT isValid(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
NOTICE:  Self-intersection at or near point 0.5 0.5
 isvalid 
---------
 f
(1 row)

Probleme: Falsche Berechnungen, zum Beispiel area():

SELECT area(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
 area 
------
    0
(1 row)

Dies kann zu Nullteilungsfehlern bei aufrufenden Funktionen führen.

Erkennung: In PostGIS können sich selbst schneidende Segmente mithilfe von erkannt werden isValid().

Lösung: Umstellung auf MULTIPOLYGON(siehe Kommentar).


Dieselbe Form entspricht der gültigen:MULTIPOLYGON(((0 0, 0 1, 0.5 0.5, 0 0)),((1 1, 1 0, 0.5 0.5, 1 1)))
Mike T

@ Mike Toews: Richtig, die Konvertierung in MULTIPOLYGON ist eine gute Lösung.
Adam Matan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.