Geopandas 0.9与0.10版本overlay的difference操作是否存在行为差异?
GeoPandas 0.10版本overlay difference异常行为解答
结论
你观测到的行为不属于预期设计,是GeoPandas 0.10版本的已知bug,由空间索引过滤逻辑的错误实现导致。
原因说明
集合差运算A - B的标准定义是:保留所有属于A但不属于B的几何要素,当A和B完全无相交时,运算结果应当等于完整的A,这和你在0.9版本观测到的行为一致。
0.10版本重构overlay底层实现时,新增的空间索引预过滤步骤在difference分支存在逻辑缺陷:错误地把所有和第二个输入数据集没有空间相交的第一个数据集要素直接筛除,导致无相交场景下返回空结果。
修复与规避方案
- 该bug已在GeoPandas 0.10.1及之后的正式版本中修复,升级到更高版本即可回归符合标准定义的difference运算行为
- 若暂时无法升级版本,可临时用以下逻辑替代原生difference操作:
# 先求交集 intersect = df1.overlay(df2, how='intersection') # 再从df1中移除相交部分,得到正确的差集结果 res_difference = geopandas.overlay(df1, intersect, how='difference')
内容的提问来源于stack exchange,提问作者banchan
相关产品推荐
相关产品推荐

