从地理数据文件中删除不需要的列?


10

我有一些GML数据,其中包含一些不需要的列。我想删除这些列以减小文件大小。(为澄清起见:我的意思是该文件中包含许多点,并且这些点中的每一个都附加了一些元数据,并且我不需要所有元数据。)

我也想从命令行执行此操作,因为我有很多文件。

我可以使用将GML文件转换成不同的格式ogr2ogr,所以我的问题是:从命令行从地理数据文件中删除列的最简单方法是什么?

我是一名Python程序员,所以我的直觉是将文件转换为GeoJSON,然后使用Python的JSON解析方法读取和重写JSON文件。

但是,也许有更直接的方法,使用GDAL工具或类似工具。

Answers:


10

Shapefile不需要作为临时文件格式,它也可以更改GML数据(缩短属性名称,将字符串最多剪切255个字符,将DATETIME更改为DATE等)。

我不会通过删除不需要的属性来使用ogr2​​ogr,而是选择所需的属性。SQLite SQL方言比过时的OGR方言更标准,这就是为什么我使用它甚至不需要此查询的原因。

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

9

您可以使用OGR SQL删除字段,然后选择支持该字段删除的OGR格式。不幸的是,GML不支持它,因此您必须通过另一种格式,例如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

我可以使用GeoJSON驱动程序做一个更简单,相似的事情。 ogrinfo input.geojson -sql "ALTER TABLE input DROP COLUMN field_to_drop" 请注意,将文件名用作ALTER表。
vpipkt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.