GeoDjango中MultiPolygonZMField未实现的相关问题咨询
GeoDjango中MultiPolygonZMField未实现的相关问题咨询
我完全懂你现在的困惑——用ogrinspect自动生成GeoDjango模型时,居然吐出了一个在django.contrib.gis.db.models里找不到的MultiPolygonZMField,这确实挺让人懵的,我来给你理清楚前因后果和解决办法:
为什么ogrinspect会生成这个不存在的字段?
从你贴的ogrinfo输出能看到,你的Shapefile几何类型是3D Measured Polygon,也就是同时包含Z值(三维空间高度)和M值(测量值,比如距离、时间这类附加属性)的多面几何体。ogrinspect是直接基于GDAL对几何类型的识别来生成字段名称的,它会严格对应GDAL的几何类型命名规则(ZM就是Z+M的缩写),但GeoDjango的默认字段类里并没有直接用这个命名的实现。
GeoDjango里的兼容替代方案
其实GeoDjango已经提供了支持这类4维几何的方式,不需要自定义字段,只需要修改生成的模型代码即可:
把自动生成的这一行:
geom = models.MultiPolygonZMField(srid=4326)
替换成:
geom = models.MultiPolygonField(srid=4326, dim=4)
这里的dim=4参数就是告诉GeoDjango,这个字段要支持4维几何(X,Y,Z,M),对应的数据库空间列也会被创建为支持4维的类型(比如PostGIS里的MULTIPOLYGONZM)。
额外的可选处理方式
如果你的业务逻辑里其实用不到M值,也可以提前用GDAL工具把Shapefile的M维度去掉,这样就能用更常规的字段:
- 要是想保留Z值(三维),可以用
ogr2ogr转换:
之后生成模型时就会用ogr2ogr -f "ESRI Shapefile" AnalysisV1_3D.shp AnalysisV1.shp -nlt MULTIPOLYGONZMultiPolygonZField(这个GeoDjango是有实现的)。 - 要是完全不需要Z和M值,转成普通2D几何:
对应的模型字段就是普通的ogr2ogr -f "ESRI Shapefile" AnalysisV1_2D.shp AnalysisV1.shp -nlt MULTIPOLYGONMultiPolygonField。
内容来源于stack exchange
相关产品推荐
相关产品推荐

