Mehr

Punkte von LinearRing bilden keine geschlossene Linienfolge - ein Punktschnitt


Ich versuche, Geojson-Daten mit Elasticsearch zu indizieren.

Es gibt eine Art von Polygonen, die einen Fehler verursachen: "Punkte von LinearRing bilden keinen geschlossenen Linienzug".

Es sieht so aus, als ob es passiert, weil diese Polygone Schnittpunkte in einem Punkt haben:

Gibt es eine Möglichkeit, solche Polygone zu indizieren oder programmgesteuert zu beheben?


Hier ist ein einfaches Polygon, das an einem Punkt seinen eigenen Ring berührt:

WKT des Polygons ist

POLYGON ((76 224, 84 224, 84 216, 78 216, 78 221, 79 219, 79 223, 78 221, 76 224))

PostGIS meldet, dass dieses Polygon ungültig ist:

select ST_IsValid(ST_GeomFromText(' POLYGON ((76 224, 84 224, 84 216, 78 216, 78 221, 79 219, 79 223, 78 221, 76 224)) ')) === f

Die Funktion ST_MakeValid korrigiert das Polygon, indem sie die "Inversion" in ein Loch umwandelt, das den Außenring berührt:

select ST_AsText(ST_MakeValid(ST_GeomFromText(' POLYGON ((76 224, 84 224, 84 216, 78 216, 78 221, 79 219, 79 223, 78 221, 76 224))'))) "POLYGON((76 224, 84 224,84 216,78 216,78 221,76 224),(78 221,79 219,79 223,78 221))"

Wenn Sie PostGIS verwenden, lautet die Antwort auf Ihre Frage ST_MakeValid. Das Korrigieren von Shapefiles sollte mit ogr2ogr und sqlite-Dialekt möglich sein, aber nur, wenn GDAL mit dem neuesten Spatialite kompiliert wurde, das ST_MakeValid aus der LWGEOM-Bibliothek https://www.gaia-gis.it/gaia-sins/spialite-sql-latest.html unterstützt . Nutzung wäre dann

ogr2ogr -f "ESRI shapefile" corrected.shp input.shp -dialect sqlite -sql "SELECT ST_MakeValid(geometry), attribute1, attribute2,… FROM input"


Schau das Video: Linienfolger im Gelände (Oktober 2021).