我正在使用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:输入geom 1无效:自相交点或附近点130.94262695312494 -19.395507812500028 at 130.94262695312494 -19.395507812500028 pandas._libs.lib.SeriesGrouper.get_result()中的pandas / _libs / src \ reduce.pyx
答案 0 :(得分:0)
这可能不是一个完美的答案,但它适用于我这个问题。此外,当我测试时,它比溶解功能执行得更快。
所以我所做的就是选择基于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