PostGIS-Multipolygon stimmt bei der Konvertierung in ein Shapefile nicht mit der Quellgeometrie überein

8

Ich versuche, einen MULTIPOLYGON-Datensatz von PostGIS (v2.2.2) über QGIS (v2.18.9) in das Shapefile zu konvertieren, aber die Quellgeometrie und das resultierende Shapefile stimmen nicht mit den in den folgenden Bildern gezeigten überein (die rote Ebene ist die Quelle) und die grüne Schicht ist das resultierende Shapefile). Ich erhalte das gleiche Ergebnis, wenn ich die Konvertierung über ogr2ogr von GDAL v2.0.0 durchführe. Diese Konvertierung dauert ca. 40 Minuten.

Wenn ich die Quellgeometrie in POLYGON speichere und die Konvertierung durchführe, ist das resultierende Shapefile korrekt und die Konvertierung ist viel schneller (7 Sekunden + 17 Sekunden für Dump). Aber statt 5 Funktionen habe ich jetzt 305188.

Die Quell-MULTIPOLYGON-Datensätze werden von ST_Union in den benachbarten Zellen erstellt, wenn dies wichtig ist.

Vermisse ich etwas Gibt es eine Möglichkeit, die richtige Konvertierung durchzuführen? Kann jemand erklären, warum das passiert?

Quellgeometrie Quelle aus PostGIS

Exportiertes Shapefile mit gefüllten Löchern, die durch Pfeile markiert sind Exportiertes Shapefile


Ich habe mehr Details:

pgsql2shp erzeugt das gleiche resultierende Shapefile wie QGIS oder ogr2ogr.

@dbaston - Ich habe die meisten Daten ausgeschnitten und den Teil um den Bereich herum belassen, der auf den obigen Bildern dargestellt ist (ungefähr ('POINT (-89.45 29.99)', 4326)). Ich habe diese kleine Stichprobe konvertiert und das gleiche Ergebnis erzielt. Wenn Sie oder jemand die Konvertierung für dasselbe Beispiel versuchen möchte, können Sie den Speicherauszug hier herunterladen:

Beispieldatensicherung von PostgreSQL v9.5

Nach 31 Stunden gab ST_IsValid für alle Geometrien aus dem gesamten Datensatz true zurück. Ich habe das gleiche Ergebnis für die kleinere Stichprobe erhalten, die über den obigen Link verfügbar ist. Überprüfen Sie jedoch die Gültigkeit in QGIS für denselben kleineren zurückgegebenen Datensatz:

ring 1 of polygon 712 not in exterior ring  
ring 2 of polygon 712 not in exterior ring  
ring 3 of polygon 712 not in exterior...

Wie kommt es, dass sich die Gültigkeitsprüfung in PostGIS und QGIS unterscheidet?

Um dies weiter zu überprüfen, habe ich alle Polygonteile mit Ausnahme des im obigen Bild blau markierten entfernt. Ich habe das WKT-Format überprüft und es sieht gut aus. Und jetzt war die Konvertierung in Shapefile mit nur dieser Funktion korrekt.

Ist das sinnvoll? Ich habe mehr von ST_Union erstellte Datensätze in den benachbarten Zellen überprüft und festgestellt, dass das gleiche Problem auch dort beim Konvertieren in Shapefile besteht. Dieselben in GeoJSON konvertierten Daten liefern das richtige Ergebnis.

MULTIPOLYGON wurde aus der POLYGON-Geometrie mit dem folgenden Ausdruck erstellt:

st_multi(st_union(st_buffer(geom,0)))
Dejan Stojanovic
quelle
1
Die Quelldaten enthalten möglicherweise Topologiefehler. Da sich die Daten in PostGIS befinden, können Sie die Geometrien mit ST_IsValid und ST_IsValidReason überprüfen oder mit ST_MakeValid korrigieren.
user30184
Es tut mir leid, dass ich hier nicht kommentiert habe, aber ich habe noch kein Privileg. Ich habe mich gefragt, wie Sie es gemacht haben: "Ich erhalte das gleiche Ergebnis, wenn ich die Konvertierung über ogr2ogr von GDAL v2.0.0 durchführe." Könnten Sie genauer sein .. Code? Haben Sie pgsql2shp ausprobiert?
Martinyt
Vielen Dank. Ich führe das jetzt aus, aber es dauert sehr lange, um die Gültigkeit der Geometrie zu überprüfen. Ich werde antworten, wenn die Prüfung abgeschlossen ist.
Dejan Stojanovic
2
Ich habe dieses Verhalten bereits in (gültigen) komplexen Geometrien mit verschachtelten Ringen innerhalb von Löchern gesehen. Diese können von beiden ogr2ogrund pgsql2shpunterschiedlich gehandhabt werden , aber ich habe Fälle gesehen, die jeden von ihnen stumpf machen. Wenn Sie das Problem auf eine kleinere Eingabe reduzieren können, ist dies als Fehlerbericht hilfreich.
Dbaston
Ich habe Ihr Beispiel in GeoPackage konvertiert und das Ergebnis ist das gleiche wie beim Postgis. Müssen Sie wirklich das Shapefile-Format verwenden? Screenshot . GeoPackage ist viel besser :-)
jgrocha

Antworten:

1

Es scheint ein Fehler in QGIS (einschließlich 2.18.16) beim Rendern der Multipolygone aus einem SHP zu sein. Wenn Sie Ihr SHP in ArcMap öffnen, tritt dieses Problem nicht auf. Wenn Sie Ihre Multipolygone nach SQLite exportieren, tritt dieses Problem auch nicht auf. Hoffentlich sieht jemand aus dem QGIS-Team diese Frage.

SHP mit ArcMap 10 SQLite mit QGIS 2.18.16

Ralph Tee
quelle