覆盖层class='difference'的操作与geopandas 0.9和0.10的操作有什么不同?

2024-04-26 00:14:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我对另一个问题使用了差集操作,但在用geodataframe中的差替换多边形时,我会得到一个空的geodataframe或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);

显示两个不相交的多边形

displaying two non intersecting polygons

如您所见,这些多边形不相交。所以当我做差集运算时

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');

那么输出就是这个,

空地理数据框 empty geodataframe

我希望看到df1几何体显示在res_difference变量中。这就是差异应该起的作用吗

我希望df1几何体显示在res_差异中的原因是基于geopandas 0.9中的行为。当我使用geopandas0.9而不是geopandas0.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');

你得到这个输出

plotting res_difference in geopandas 0.9

这是我希望在geopandas 0.10中看到的行为,但如果多边形不相交,则会得到一个空的GeopataFrame。这是应该发生的还是实施空间索引的结果


Tags: 版本noneplotresax多边形df1geopandas