Was ist das beabsichtigte Verhalten von -sprungfehlern in ogr2ogr?

9

Ich versuche, ogr2ogr auszuführen, um etwas Geojson in Shapefile zu konvertieren. Alles ist gut, bis eines der Geojson-Features eine ungültige Geometrie aufweist (z. B. ist das Koordinatenarray der Punktgeometrie leer).

Ich habe das Flag -skipfailures eingefügt, aber ogr2ogr wird beendet, sobald es die erste ungültige Funktion erreicht. Mache ich hier nichts falsch?

Beispiel ogr2ogr Aufruf:

ogr2ogr -skipfailures -f "ESRI Shapefile" myshape.shp mygeojson.geojson
user890
quelle

Antworten:

4

Versuchen Sie -nlt geometry, Ihrem Ogr-Skript Folgendes hinzuzufügen:

ogr2ogr -skipfailures -f "ESRI Shapefile" myshape.shp mygeojson.geojson -nlt geometry

Ich habe das Problem festgestellt, das Sie mit ogr2ogr beschreiben, um Datensätze zu übersetzen, die sowohl einteilige als auch mehrteilige Funktionen in derselben Ebene enthalten. Zum Beispiel POINT und MULTIPOINT, LINE AND MULTILINE sowie POLYGON und MULTIPOLYGON.

Standardmäßig möchte OGR, dass Sie die Konvention einhalten und nur einen Feature-Typ pro Dataset verwenden. Wenn Sie gegen die Regel verstoßen, gibt OGR einen generischen Fehler aus und empfiehlt das -skipfailuresFlag. Dies kann irreführend sein, wenn das eigentliche Problem gemischte / angepasste Geometrien in derselben Ebene sind.

Da das ESRI-Shapefile ein- / mehrteilige Features in derselben Ebene zulässt, müssen Sie erkennen, dass OGR diesen Fehler möglicherweise auslöst, selbst wenn Sie gültige Geometrien haben. In diesem Szenario haben Sie zwei Möglichkeiten: 1) Konvertieren Sie mehrteilige Features in Singlepart (was ogr über das -explodecollectionsFlag tun kann ) oder 2) Verwenden Sie das -nltFlag und geben Sie es GEOMETRYals Option an. Mit dieser -nlt GEOMETRYOption können Sie eine Mischung von Feature-Typen in derselben Ebene kombinieren. Infolgedessen wird OGR die Best Practices natürlich nicht schützen.

Wenn Ihre GeoJSON-Datei als ESRI-Shapefile "ins Leben gerufen" wurde, sind möglicherweise sowohl POINT- als auch MULTIPOINT-Funktionen in diesem Dataset enthalten. In diesem Fall kann dieses Problem auch bei gültigen Punkten auftreten.

Elrobis
quelle
2
 -skipfailures: Continue after a failure, skipping the failed feature.

Eine Erklärung für das aufgetretene Verhalten könnte sein, dass alle Funktionen in Ihrer geoJSON-Datei fehlerhaft sind. Haben Sie ihre Gültigkeit getestet, z. B. mit QGIS "Geometriegültigkeit prüfen"?

Unterdunkel
quelle
Alle anderen Funktionen sind gültig. Wenn ich die in meinem ursprünglichen Beitrag beschriebene Einpunktgeometrie korrigiere, werden alle anderen Geojson-Punkte zum Ausgabe-Shapefile hinzugefügt.
user890
1

Nach meinem Verständnis ist das beabsichtigte Verhalten, dass ein ungültiges Feature übersprungen wird und die Konvertierung mit dem nächsten gültigen Feature fortgesetzt wird, anstatt anzuhalten.

Es scheint, dass Sie alles richtig machen, also weiß ich nicht, was los ist! Haben Sie versucht, in ein anderes Format zu wechseln, um zu sehen, ob dies funktioniert?

Darren Cope
quelle