overlay how='difference' 应该与 geopandas 0.9 和 0.10 的操作方式不同吗?

Is overlay how='difference' supposed to operate differently from geopandas 0.9 vs 0.10?

我正在使用差异集操作来解决不同的问题,但是当用我的地理数据框中的差异替换多边形时,我会得到一个空的地理数据框或 None 类型。我发现它是具有非相交多边形并进行差异集操作的结果。我想知道这是正常行为还是应该保留 df1 的几何形状?此行为在版本 0.10 和版本 0.9 之间有所不同。

例如:

import geopandas

polys1 = geopandas.GeoSeries([Polygon([(0,0), (2,0), (2,2), (0,2)])])

polys2 = geopandas.GeoSeries([Polygon([(3,3), (5,3), (5,5), (3,5)])])


df1 = geopandas.GeoDataFrame({'geometry': polys1, 'df1':[1]})

df2 = geopandas.GeoDataFrame({'geometry': polys2, 'df2':[1]})

ax = df1.plot(color='red');

df2.plot(ax=ax, color='green', alpha=0.5);

显示两个不相交的多边形

如您所见,这些多边形没有相交。所以当我做差集操作时,

res_difference = df1.overlay(df2, how='difference')

print(res_difference)


ax = res_difference.plot(cmap='tab10')

df1.plot(ax=ax, facecolor='none', edgecolor='k');

df2.plot(ax=ax, facecolor='none', edgecolor='k');

输出结果是这样的,

空地理数据框

我希望在 res_difference 变量中看到 df1 几何体。这就是差异应该发挥作用的方式吗?

我希望 df1 几何体出现在 res_difference 中的原因是基于 geopandas 0.9 中的行为。当我 运行 以下代码使用 geopandas 0.9 而不是 geopandas 0.10

# I use the function vs method since it seems the method isn't
# implemented in geopandas 0.9

res_difference = geopandas.overlay(df1, df2, how='difference')
print(res_difference)


ax = res_difference.plot(cmap='tab10')

df1.plot(ax=ax, facecolor='none', edgecolor='k');

df2.plot(ax=ax, facecolor='none', edgecolor='k');

你得到这个输出

这是我希望在 geopandas 0.10 中看到的行为,但是如果多边形不相交,那么您会得到一个空的地理数据框。这是应该发生的还是实施空间索引的结果?

这是 0.10 版本中的回归。对于那个很抱歉!我们会尽快修复它。同时,我建议坚持使用 0.9。