首页 > 解决方案 > 计算单个数据框中具有相同几何形状的多边形数量

问题描述

我有一个数据框,其中包含许多多边形的形状坐标。这些多边形重叠,我想计算所有重叠多边形的数量,这样我就可以绘制分布的热图。我已经在 FME 中为此开发了一个解决方案,但我现在需要将它作为 python 中更大工作流程的一部分来自动化。到目前为止我尝试过的是:

  1. 使用联合覆盖来获取所有可能的几何图形。我假设对于重叠的区域,将有多个相同的多边形链接回原始多边形。

df_union = gpd.overlay(df_in, df_in, how='union')

我发现的所有使用联合覆盖的示例都有两个输入数据帧,但我只有一个,所以我不确定上面是否正确。

如果我的假设是正确的,那么我现在想不出的是如何计算单个数据框中相同的多边形,以便得到如下结果:

Count geometry

5 POLYGON ((xxxxxx... 1 POLYGON ((xxxxxx...

我试图df_union.groupby('geometry')查看是否有相同的几何图形可以计算,但这会产生我无法查看的结果。

对此的任何指示将不胜感激。

标签: python-3.xpandaspolygongeopandasshapely

解决方案


围绕这种情况的一个技巧是将几何图形转换为字符串,然后对其进行分组。

例如对于类型的数据框

df.head()

id  geometry
0   6795584 MULTIPOLYGON (((652670.3 6862958.2, 652675.6 6...
1   6794255 MULTIPOLYGON (((652935.2 6862338.2, 652935 686...
2   6794256 MULTIPOLYGON (((652988.8 6862328.5, 652991.9 6...
3   6794289 MULTIPOLYGON (((653006.6 6862311.6, 653015.2 6...
4   6794290 MULTIPOLYGON (((652998 6862280.3, 652999.8 686..

我们将几何图形转换为字符串

df.geometry= df.geometry.astype(str)

然后我们可以对它进行分组

df.groupby('geometry')['id'].count()

推荐阅读