“no such field as `OGR_GEOMETRY'” when changing Multipolygon to Polygon with altering geometry in shapefile

bashgeometryogrogr2ogrshapefile

The attempt is to change from multipolygon to polygon (shapefile) using:

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

I get this error message:

ERROR 1: alter table tmpem122 alter column OGR_GEOMETRY type
geometry(polygon, 4326) using st_geometryn(geometry,1) failed, no such
field as `OGR_GEOMETRY'.

but according to ogrinfo -sql "select * from tmpem122" tmpem122.shp, the geometry column is OGR_GEOMETRY (or _ogr_geometry_):

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

What would it be wrong? Please find the file sample here for your testing: https://file.io/U4XnvYSb69lp

Best Answer

There may be a solution to the no such field as OGR_GEOMETRY problem but that is irrelevant because it is not possible to do what you are trying. Shapefile specification does not make difference between polygons and multipolygons. ALTER TABLE will not work because it tries to change the field definitions of the table. What you seem to want to do is to update the geometries.

Try this instead

ogrinfo -sql "update polygonz set geometry=st_geometryn(geometry,1)" polygonz.shp -dialect sqlite

Notice that you must use the SQLite dialect because only that has the ST_GeometryN function and for SQLite dialect the name of the geometry field is usually geometry.