首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Geopandas空间连接-x米半径内的所有点

Geopandas空间连接-x米半径内的所有点
EN

Stack Overflow用户
提问于 2020-09-05 01:01:26
回答 1查看 525关注 0票数 0

我有一个点的集合(lat,渴望一个建筑物的集合),我想根据它们之间是否在x米内对它们进行分组。我知道我可以成对使用Geopandas buffer()函数(半径为x/2米),然后使用sjoin()。然而,我不想只是成对地做这件事。我想对缓冲区(最长为中心,缓冲区为半径x/2米的圆)与任何其他缓冲区重叠的所有建筑物进行分组。

例如,如果我有三个建筑物(表示为A、B和C),每个建筑物与其邻居相距25米,并且我使用25米的缓冲区,则可以使用sjoin()对A和B进行分组,B和C可以进行分组,但我希望将这三个建筑物都分组在一起。

这与A和B相距25米,C与B相距50米的情况形成对比。在这种情况下,我希望能够将A和B分组在一起,而C在自己的组中。

实际上,我可能有100个或更多的建筑,所以不可能成对地运行所有的排列。我需要一个函数,当建筑物的缓冲区圆与任何其他缓冲区圆相交时,可以将多个建筑物组合在一起。

有没有一种简单的方法可以用Geopandas做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2020-09-06 06:26:55

感谢您的回复。我最终做了以下几件事:

  • 将每个建筑物的经度/经度点缓冲了一段设定的距离(以米为单位) (**参见下面的注释**)
  • 确定了所有缓冲区的geopandas.unary_union以获得一个多多边形(list of polygons)
  • wrote )一个自定义函数,用于识别列表中的哪个多边形与特定建筑物点相交(使用geopandas的.intersection)。并调用该列表索引“位置组”
  • 使用熊猫的应用与上述函数来获得每个建筑物所属的“位置组”
  • 使用熊猫的groupby对基于“位置组”的值进行求和

对于上述情况,我必须小心处理交集不是多多边形而是多边形的边缘情况(在缓冲区为零的情况下,甚至是Point )。

我遇到的一个更大的问题是让geopanda的缓冲功能正常工作时遇到了巨大的麻烦。我知道这与crs/projections有关,并尝试了各种变体,但始终无法使buffer函数与以米为单位的缓冲区距离一起正常工作。我在这里找到了一个很好的自定义函数(Is there an easy way to create square buffers around point and if they intersect, merge them?),它确实有效,但后来意识到我的Postgres设置具有PostGIS函数,并使用ST_Buffer来获取缓冲区多边形,同时我在数据库中查询建筑经纬度数据。

希望以上内容能对其他人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63745296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档