【问题标题】:Python dissolve causes TopologyException errorPython溶解导致TopologyException错误
【发布时间】:2018-07-04 21:50:39
【问题描述】:

我正在使用dissolve 函数将我的 geopandas 数据框压缩到一个行数更少的较小表中。我已经在线阅读了修复无效多边形的一种方法是为其几何对象创建一个 0 缓冲区。所以我做到了。我已经修复了一些多边形,但它仍然对其他多边形给出相同的错误。任何人都可以就我还能做些什么来解决这个错误提供一些建议吗?

burn_grass['geometry'] = burn_grass.geometry.buffer(0)
burn_grass.is_valid.unique()
output:array([ True], dtype=bool)

burn_grass = burn_grass.dissolve(by=['UUID'], as_index=False)

输出:

TopologyException:输入几何 1 无效:在点 130.94262695312494 -19.395507812500028 处或附近自相交在 130.94262695312494 -19.395507812500028 pandas/_libs/src\reduce.pyx 在 pandas._libs.lib.SeriesGrouper.get_result()

【问题讨论】:

    标签: python geopandas


    【解决方案1】:

    这可能不是完美的答案,但它对我来说解决了这个问题。此外,当我测试它时,它的执行速度比溶解功能快。

    所以我所做的是根据 UUID 选择多面体并使用多面体列表重新创建 gpd。

    burn_grass.index=burn_grass.UUID
    fix = []
    UUID_list = burn_grass.UUID.unique()
    for i, id in enumerate(UUID_list):
        tmp = burn_grass[burn_grass['UUID']==id].geometry
        sh = MultiPolygon([x.buffer(0) for x in tmp.geometry])
        fix.append({'UUID': id, 'geometry':sh})
    burn_grass = gpd.GeoDataFrame(fix, columns=['UUID', 'geometry'])
    burn_grass = burn_grass.set_geometry('geometry')
    burn_grass['geometry']=burn_grass.geometry.buffer(0)
    burn_grass.crs = grid.crs    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2019-06-06
      • 1970-01-01
      相关资源
      最近更新 更多