在循环操作中将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和sql ALTER 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')
答案 0 :(得分:0)
我也在这里处理这个问题。就我而言,我的地理数据框内有空的几何图形。为了修复它,我必须删除空的几何图形,这样做:
gdf = gdf[gdf.is_empty==False]
使用这个我可以解决这个问题。