Nicht benötigte Spalten aus der Geodatendatei entfernen?

10

Ich habe einige GML-Daten, die einige nicht benötigte Spalten enthalten. Ich möchte diese Spalten entfernen, um die Dateigröße zu reduzieren. (Zur Verdeutlichung: Ich meine, die Datei enthält viele Punkte, und an jeden dieser Punkte sind einige Metadaten angehängt, und ich benötige nicht alle Metadaten.)

Ich möchte dies auch über die Befehlszeile tun, da ich viele Dateien habe.

Ich kann die GML-Dateien mithilfe von in verschiedene Formate konvertieren. ogr2ogrMeine Frage lautet also: Was ist der einfachste Weg, eine Spalte aus einer geografischen Datendatei über die Befehlszeile zu entfernen?

Ich bin ein Python-Programmierer, daher würde ich die Datei in GeoJSON konvertieren und dann die JSON-Parsing-Methoden von Python verwenden, um die JSON-Datei zu lesen und neu zu schreiben.

Aber vielleicht gibt es einen direkteren Weg, ein GDAL-Tool oder ähnliches zu verwenden.

Richard
quelle

Antworten:

10

Shapefile als temporäres Dateiformat ist nicht erforderlich und kann auch die GML-Daten ändern (Attributnamen kürzen, Zeichenfolgen auf maximal 255 Zeichen kürzen, DATETIME in DATE ändern usw.)

Ich würde ogr2ogr nicht verwenden, indem ich unerwünschte Attribute lösche, sondern indem ich diejenigen auswähle, die gewünscht werden. Der SQLite SQL-Dialekt ist mehr Standard als der standardmäßige OGR-Dialekt. Deshalb verwende ich ihn, auch wenn er für diese Abfrage nicht erforderlich ist.

ogr2ogr -f GML -dialect SQLite -sql "SELECT attr1, attr2, attr3,... FROM layer" output.gml input.gml
user30184
quelle
9

Sie können ein Feld mit OGR SQL löschen und ein OGR-Format auswählen, das das Löschen von Feldern unterstützt. Leider unterstützt GML dies nicht, sodass Sie ein anderes Format durchlaufen müssen, z. B. SHP:

ogr2ogr temp.shp input.gml
ogrinfo temp.shp -sql "ALTER TABLE temp DROP COLUMN field_to_drop"
ogr2ogr -f GML output.gml temp.shp
Antonio Falciano
quelle
Mit dem GeoJSON-Treiber konnte ich eine einfachere, ähnliche Sache machen. ogrinfo input.geojson -sql "ALTER TABLE input DROP COLUMN field_to_drop" Beachten Sie die Verwendung des Dateinamens als Tabelle für ALTER.
vpipkt