Usunąć niepotrzebne kolumny z pliku danych geograficznych?

10

Mam trochę danych GML, które zawierają niepotrzebne kolumny. Chciałbym usunąć te kolumny, aby zmniejszyć rozmiar pliku. (Aby wyjaśnić: Mam na myśli, że plik ma wiele punktów, a do każdego z tych punktów dołączone są pewne metadane i nie potrzebuję wszystkich metadanych).

Chciałbym to również zrobić z wiersza poleceń, ponieważ mam wiele plików.

Mogę przekonwertować pliki GML do różnych formatów ogr2ogr, więc moje pytanie brzmi: jaki jest najłatwiejszy sposób usunięcia kolumny z pliku danych geograficznych z wiersza poleceń?

Jestem programistą Python, więc moim instynktem byłoby przekonwertowanie pliku na GeoJSON, a następnie użycie metod parsowania JSON w Pythonie do odczytu i przepisania pliku JSON.

Ale może istnieje bardziej bezpośredni sposób, używając narzędzia GDAL lub podobnego.

Richard
źródło

Odpowiedzi:

10

Shapefile jako tymczasowy format pliku nie jest konieczny i może również zmieniać dane GML (skracać nazwy atrybutów, przycinać ciągi znaków do maks. 255 znaków, zmieniać DATETIME na DATE itp.)

Używałbym ogr2ogr nie porzucając niepożądanych atrybutów, ale wybierając te, które są pożądane. Dialekt SQLite SQL jest bardziej standardowy niż domyślny dialekt OGR, dlatego używam tego, że nawet to nie jest konieczne do tego zapytania.

ogr2ogr -f GML -dialect SQLite -sql "SELECT attr1, attr2, attr3,... FROM layer" output.gml input.gml
użytkownik30184
źródło
9

Możesz usunąć pole, używając OGR SQL i wybierając format OGR, który obsługuje usuwanie pola. Niestety GML go nie obsługuje, więc musisz przejść przez inny format, np. 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
źródło
Byłem w stanie zrobić prostszą, podobną rzecz ze sterownikiem GeoJSON; ogrinfo input.geojson -sql "ALTER TABLE input DROP COLUMN field_to_drop" Zwróć uwagę na użycie nazwy pliku jako tabeli do zmiany.
vpipkt