【问题标题】:Cannot convert multipolygon to polygon in shape file: no geometry column OGR_GEOMETRY?无法在形状文件中将多面体转换为多边形:没有几何列 OGR_GEOMETRY?
【发布时间】:2021-10-06 00:35:12
【问题描述】:

尝试使用以下方法从多面体变为多边形(shapefile):

ogrinfo tmpem122.shp -sql "alter table tmpem122 alter column OGR_GEOMETRY type geometry(polygon, 4326) using st_geometryn(geometry,1)"

我收到此错误消息:

错误 1:更改表 tmpem122 更改列 OGR_GEOMETRY 类型 几何(多边形,4326)使用st_geometryn(几何,1)失败,没有这样 字段为“OGR_GEOMETRY”。

但根据ogrinfo -sql "select * from tmpem122" tmpem122.shp,几何列是OGR_GEOMETRY(或_ogr_geometry_):

Layer name: tmpem122
Geometry: Polygon
Feature Count: 17
Extent: ...
...
...
Geometry Column = _ogr_geometry_
gid: String (10.0)
...

会有什么问题?请在此处查找文件示例以进行测试:https://file.io/U4XnvYSb69lp

【问题讨论】:

标签: sql postgis shapefile ogr geom


【解决方案1】:

PostgreSQL / PostGIS

在 PostgreSQL 中,这是更改几何列的数据类型并使用 ST_GeometryN 用集合的第一个几何填充它的正确语法:

ALTER TABLE tmpem122 ALTER COLUMN _ogr_geometry_ 
TYPE geometry(polygon, 4326) USING ST_GeometryN(_ogr_geometry_,1);

演示:db<>fiddle

ogrinfo

由于您只对修改现有几何图形感兴趣,因此您只需要修改几何图形而不是列数据类型:

$ ogrinfo -dialect sqlite -sql "UPDATE tmpem122 SET geometry = ST_GeometryN(geometry,1)" tmpem122.shp
  • 使用-dialect sqlite,几何列被命名为geometry

【讨论】:

  • 感谢您的回答,但它会抛出相同的错误消息,奇怪的是它在 PostgreSQL 中工作。我要上传文件示例。
  • @Gery "你请求的文件已被删除"文件不见了
  • @Gery 看到我的最后编辑,我添加了一个命令,可能会做你想做的事
  • 最后一个电话成功了,非常感谢 Jim!
  • @Gery 我很高兴它有帮助。我重新制定了答案,以使其他用户更容易。欢呼,快乐的编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 2012-01-14
  • 2018-06-13
相关资源
最近更新 更多