Festlegen von Geometrietypen, die mit OGR in PostGIS importiert werden


8

Ich verwende ogr2ogrzum Importieren von Daten in eine PostGIS-Datenbank. Jeder Datensatz, den ich importieren muss, hat (theoretisch) dieselbe exakte Datenstruktur, aber es scheint, dass es sich nicht um dieselben Geometrietypen handelt. Beispiel: Ich habe bereits die erste Ebene importiert und es gibt eine Ebene namens "Straßen". Wenn ich diesen Befehl ausführe, importiere ich die erste Feature-Class aus der ersten Datenbank (ich habe GDAL zum Lesen konfiguriert .mdb):

ogr2ogr -f PostgreSQL PG:"host=localhost user=postgres dbname=database port=5432" city1.mdb streets -nln streets -nlt MULTILINESTRING -lco GEOMETRY_NAME=geometry

Wenn ich -appenddieselbe Straßenebene anhänge (mit der Flagge) anhänge, wird der folgende city2.mdbFehler angezeigt (vermutlich aufgrund widersprüchlicher Geometrietypen für die beiden "Straßen" -Ebenen:

Warning 1: Geometry to be inserted is of type 3D Line String, whereas the layer geometry type is 3D Multi Line String.
Insertion is likely to fail
ERROR 1: INSERT command for new feature failed.
ERROR:  Geometry type (LineString) does not match column type (MultiLineString)

Gibt es eine einfache Möglichkeit, beim ogr2ogrImportieren Geometrien auf den gleichen Typ zu übertragen? Oder eine Möglichkeit, dies zu handhaben, indem Sie das Schema und die Geometrien für jede Tabelle im Voraus vordefinieren?

Antworten:


16

Verwenden Sie die -nltOption. In diesem Fall möchten Sie:

-nlt MULTILINESTRING

Es gibt auch PROMOTE_TO_MULTI(GDAL 1.10 und höher), das entweder MULTILINESTRINGoder MULTIPOLYGONabhängig von der Eingabeebene wählt . Der Anwendungsfall hierfür ist "eine Massenkonvertierung von Shapefiles, die verschiedene Arten von Geometrien [mischen]".

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.