5

在我的项目中,我需要从shapefiles导入一些几何图形。

其中一些是MULTIPOLYGON Z类型,但所有 Z 坐标都是 0 值。

当我尝试保存几何图形时,出现错误:

“几何有 Z 维度,但列没有”

剥离 Z 维度的最佳方法是什么?

我的代码:

ds = DataSource(file_path, encoding='ISO-8859-1')
layers = ds[0]

#need something HERE to coerce geometry to 2D

obj=MyModel(geometry=GEOSGeometry(layers[0].geom.hex))
obj.save()
4

2 回答 2

6

感谢您的回复,迈克 T。

问题是我需要使用GeoDjango 框架来制作它,而无需直接访问Postgis 数据库

实际上,经过努力,我找到了解决方案。我需要使用对象的.clone()方法OGRGeometry。现在,我可以改变coord_dim财产。如果我更改coord_dim原始对象,则不会发生任何事情。

这是我的代码:

ds = DataSource(file_path, encoding='ISO-8859-1')
layers = ds[0]

#HERE IS THE TRICK
new_layer = layers[0].geom.clone() 
new_layer.coord_dim = 2

obj=MyModel(geometry=GEOSGeometry(layers[0].geom.hex))
obj.save()
于 2016-03-08T21:36:12.107 回答
0

如果您有 SQL 访问权限,则可以使用ST_Force2D(或ST_Force_2D旧版本)获得此功能。

您还可以通过修改类型来更正源表,例如:

ALTER TABLE my_table
  ALTER COLUMN geom TYPE geometry(MultiPolygon,4326) USING ST_Force2D(geom);
于 2016-03-07T20:34:08.190 回答