首页 > 解决方案 > 修复几何没有 z 几何时的 z 列错误

问题描述

在循环操作中将 geopandas 数据框写入 PostGIS 时出现以下错误(完整代码包含在末尾)

psycopg2.errors.InvalidParameterValue: Column has Z dimension but geometry does not

相关代码: gdf.to_postgis(name=tbl, con=engine, schema=gdb_name, if_exists='replace')

如何从列中删除 z 维度?一些逻辑如:

if geom has no z dimension and column has z dimension:
  alter column remove z dimension

我宁愿留在 sqlalchemy 而不是使用 psycopg2 和 sqlALTER COLUMN语法。

当 gdf ​​为空时,我已经可以退出了。

完整代码:

from sqlalchemy import *
from sqlalchemy.schema import CreateSchema

if not engine.dialect.has_schema(engine, gdb_name):
    engine.execute(CreateSchema(gdb_name))

# loop through each layer in the layerlist
for layer in layerlist:
    # reads all layers into a dictionary
    layers[layer] = gpd.read_file(COPA_gdb, driver="FileGDB", layer=layer)
    gdf = layers[layer]
    if gdf.empty:
        print(layer + ' dataFrame is empty! Not imported')
    else:
        tbl = layer.lower()
        print(tbl)
        gdf.to_postgis(name=tbl, con=engine, schema=gdb_name, if_exists='replace')

标签: python-3.xsqlalchemypostgispsycopg2geopandas

解决方案


我也在这里处理这个问题。就我而言,我的地理数据框中有空的几何图形。为了解决这个问题,我必须删除空的几何图形,这样做:

gdf = gdf[gdf.is_empty==False]

使用它我可以解决这个问题。


推荐阅读