【问题标题】:Strip Z dimension on GeoDjango (Force 2D geometry)在 GeoDjango 上剥离 Z 尺寸(强制 2D 几何)
【发布时间】:2016-06-21 11:10:51
【问题描述】:

在我的项目中,我需要从 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()

【问题讨论】:

    标签: django gis postgis geodjango geos


    【解决方案1】:

    感谢您的回复,Mike T。

    问题是我需要使用GeoDjango framework,而不是直接访问Postgis 数据库

    其实,经过努力,我找到了解决办法。我需要使用来自OGRGeometry 对象的.clone() 方法。现在,我可以更改 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()
    

    【讨论】:

      【解决方案2】:

      如果您有 SQL 访问权限,则可以通过 ST_Force2D (or ST_Force_2D for older versions) 获得此权限。

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

      ALTER TABLE my_table
        ALTER COLUMN geom TYPE geometry(MultiPolygon,4326) USING ST_Force2D(geom);
      

      【讨论】:

        猜你喜欢
        • 2011-01-20
        • 1970-01-01
        • 2016-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-22
        相关资源
        最近更新 更多