【问题标题】:Fixing z column error when geometry has no z geometry修复几何没有 z 几何时的 z 列错误
【发布时间】:2021-01-28 21:48:01
【问题描述】:

在循环操作中将 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')

【问题讨论】:

  • 当前的解决方法是返回到 arcgis,使用复制工具并取消选中 z 值框。上面的代码在它自己的环境中,所以无法访问 arcpy。
  • 它是什么几何形状?使用地理数据框,每一行都有一个形状良好的对象作为其几何形状
  • 基本上,您需要删除此示例中处理数据库的所有代码。从具有代表性的地理数据框开始,可能有 5 行和简化的几何图形
  • @PaulH 在这种情况下它是折线数据,但它也可以是点或多边形。本质上,我有一个 gdf,比如“roads”,它有一个几何列,在 gdf ​​geom = MULTILINESTRING Z ((477195.399 215965.386 76.2... 中。如您所见,它具有 z 几何形状,所以我不确定如何解决这个问题。
  • 构建一个最小的、可重现的示例(手动使用大约 5 个非常简单的几何图形),然后我们会带您上路。但是数据库连接与您的问题无关。在这里阅读更多:stackoverflow.com/help/minimal-reproducible-example

标签: python-3.x sqlalchemy postgis psycopg2 geopandas


【解决方案1】:

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

gdf = gdf[gdf.is_empty==False]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2019-04-22
    • 2017-07-02
    相关资源
    最近更新 更多