【问题标题】:How to filter WKT strings with invalid geometries in pandas or GeoPandas如何在 pandas 或 GeoPandas 中过滤具有无效几何形状的 WKT 字符串
【发布时间】:2020-11-04 21:32:19
【问题描述】:

我正在尝试将 Excel 文件转换为 GeoPandas 数据框。我正在尝试使用 Shapely 和 WKT 来做到这一点。

将文件读入熊猫后,我有一个几何列。我正在尝试执行以下操作以将几何列转换为“对象”数据类型:

from shapely import wkt

my_df['geometry'] = my_df['geometry'].apply(wkt.loads)

我收到以下错误:

WKTReadingError: Could not create geometry because of errors while reading input.

为了尝试诊断问题所在,我还尝试使用以下代码将此 Excel 文件转换为地理数据框:

import geopandas

my_df = gpd.GeoDataFrame(my_df, geometry='geometry')

我收到以下错误:

TypeError: Input must be valid geometry objects: MULTIPOLYGON (((1314112.145833299 1027703.927083313, 1314091.947916642 1027761.937499985, 1314232.583333299 1027811.447916642, 1314240.99999997 1027814.395833313, 1314246.739583299 1027794.468749985, 1314292.71874997 1027692.947916642, 1314282.18749997 1027689.010416642, 1314136.364583299 1027634.374999985, 1314112.145833299 1027703.927083313)))

看来我只有一个不好的几何形状? (或者它可能只是第一个坏几何)。

我可以在wkt.loads 步骤中跳过这个坏的吗?我找不到有关如何执行此操作的文档或其他示例。

【问题讨论】:

    标签: python geopandas shapely wkt


    【解决方案1】:

    您可以执行循环而不是使用 try/except 应用来捕获错误的几何图形。

    from shapely import wkt
    
    geom = []
    
    for g in my_df['geometry']:
        try:
            geom.append(wkt.loads(g))
        except:
            geom.append(None)
    
    my_df['geometry'] = geom
    

    【讨论】:

    • 前两行与问题中的相同。根据问题,第二行会导致错误。
    • @swatchai 谢谢,复制后忘记删除了。
    【解决方案2】:

    试试这个简单的代码来只绘制有效的几何图形:

    my_df[ my_df.geometry.is_valid ].plot(ec='black', alpha=0.3)
    

    要在新的地理数据框中仅获取有效的几何图形:

    valid_gdf = my_df[ my_df.geometry.is_valid ]
    

    【讨论】:

    • 这不能回答上面的问题。
    猜你喜欢
    • 2021-12-28
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2019-10-19
    • 2022-11-11
    • 2023-03-19
    相关资源
    最近更新 更多