Shapefile中MultiPolygon转Polygon提示无OGR_GEOMETRY列的问题排查
解决Shapefile中MultiPolygon转Polygon时“无OGR_GEOMETRY几何列”的问题
问题根源
- 几何列名称匹配错误:你执行
ogrinfo查询时明确显示了Geometry Column = _ogr_geometry_(注意字段名前后的下划线),但你在ALTER TABLE命令里写的是OGR_GEOMETRY——大小写和下划线的差异直接导致OGR找不到对应的字段。OGR在显示图层信息时可能会用OGR_GEOMETRY作为别名,但Shapefile底层的几何列真实标识是_ogr_geometry_。 - Shapefile格式的局限性:Shapefile是一种老旧的空间数据格式,对ALTER TABLE这类表结构修改操作的支持并不完善,即使修正了字段名,部分GDAL版本也可能出现执行失败的情况。
解决办法
办法一:修正字段名执行ALTER TABLE
把命令里的OGR_GEOMETRY替换为真实的几何列名_ogr_geometry_,执行以下命令:
ogrinfo tmpem122.shp -sql "alter table tmpem122 alter column _ogr_geometry_ type geometry(polygon, 4326) using st_geometryn(_ogr_geometry_,1)"
如果你的GDAL版本支持Shapefile的ALTER TABLE操作,这个命令应该能生效。
办法二:用ogr2ogr导出转换(更稳妥)
考虑到Shapefile的局限性,推荐用ogr2ogr直接导出一个新的Shapefile,同时完成MultiPolygon到Polygon的转换,这个方法兼容性更好:
ogr2ogr -f "ESRI Shapefile" converted_tmpem122.shp tmpem122.shp -sql "select st_geometryn(_ogr_geometry_,1) as geometry, * from tmpem122" -nlt POLYGON -a_srs EPSG:4326
命令说明:
-f "ESRI Shapefile":指定输出文件格式为Shapefileconverted_tmpem122.shp:转换后的输出文件名-sql子句:提取每个MultiPolygon的第一个子Polygon,并重命名为geometry(Shapefile默认的几何列名)-nlt POLYGON:强制输出的几何类型为Polygon-a_srs EPSG:4326:指定输出的空间参考系为WGS84(EPSG:4326)
内容的提问来源于stack exchange,提问作者Gery
相关产品推荐
相关产品推荐

