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。
我正在使用差异集操作来解决不同的问题,但是当用我的地理数据框中的差异替换多边形时,我会得到一个空的地理数据框或 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。