使用空间索引来提升点到多边形的距离查询。

问题描述 投票:1回答:1

介绍了如何利用R树提升空间交叉查询。这里 @JHuw 提供了使用R-Tree分别计算点到点和线的最近距离的方法。不过,我还没有找到用R-Tree提升点到多边形距离查询的方案。我按照上面提到的那些例子,仍然没有弄明白如何在点到多边形的最近距离查询中实现R-Tree。谁能帮我搞清楚这个问题?非常感谢。下面我以南美洲和GeoPandas中的一个城市子集为例。

# Import libraries
import geopandas as gpd
import matplotlib.pyplot as plt

# Load data from GeoPandas
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
cities = gpd.read_file(gpd.datasets.get_path('naturalearth_cities'))

south_america = world[world.continent == 'South America']
city_sub = cities[cities.index < 20]

# Plot
ax= south_america.boundary.plot()
city_sub.plot(ax=ax)

# Nearest distance from point (city_sub) to polygon (south_america) using R-Tree
# "To be finished..."
distance geopandas r-tree
1个回答
0
投票

这里有一个更详细的使用geopandas中的空间索引(RTree)将点扣到线上的演练,可能对这种情况有帮助。https:/medium.com@brendan_ward如何利用geopandas--更快的将点捕捉到线上--6113c94e59aa。

它使用基于容差的方法,所以它只选择那些在容差内最接近的特征。 在这种方法中,你可以使用更大的容差,但会大大增加处理时间。它使用基于该容差的边界框来查询RTree中的特征,边界框越大,对查询树的效果越差。

对于多边形,你要考虑更多的情况:一个点如果在多边形内,其距离为0。

你可以分2次处理:先用geopandas中的空间连接找到所有点在多边形内的情况。 然后把所有不在多边形内的情况,尝试为每个点找到最近的多边形。 使用基于公差的边界框来查询RTree,可以得到一个候选多边形的列表,然后计算点与其候选多边形之间的距离,取距离最小的那个。

当一个给定的点落在多个多边形内时,你还需要决定如何处理:在这种情况下,哪一个是 "最近的"? 一种方法是选择中心点离你的点最近的重叠多边形,但这实际上取决于你的目标。

© www.soinside.com 2019 - 2024. All rights reserved.