【问题标题】:Using spatial index to boost distance query from point to polygon使用空间索引提升点到多边形的距离查询
【发布时间】:2020-09-15 05:50:29
【问题描述】:

Here 介绍了如何使用 R-Tree 提升空间交叉点查询。 Here @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】:

    以下是使用 geopandas 中的空间索引 (RTree) 将点捕捉到一条线的更详细演练,可能对这种情况有所帮助:https://medium.com/@brendan_ward/how-to-leverage-geopandas-for-faster-snapping-of-points-to-lines-6113c94e59aa

    它使用基于容差的方法,因此它只选择那些在该容差内最接近的特征。您可以在此方法中使用更大的容差,但它会显着增加处理时间。它使用基于该容差的边界框来查询 RTree 中的特征;边界框越大,查询树的效率就越低。

    对于多边形,您需要考虑更多情况:多边形内的点的距离为 0。

    您可以分两遍处理此问题:首先在 geopandas 中使用空间连接来查找点位于多边形内的所有情况。然后取出所有不在多边形内的多边形,并尝试为每个点找到最近的多边形。使用基于容差的边界框查询 RTree 会给您一个候选多边形列表,然后计算该点与其候选多边形之间的距离,并取距离最小的那个。

    您还需要决定当给定点落在多个多边形内时该怎么做:在这种情况下,哪一个是“最近的”?一种方法是选择质心最接近您的点的重叠多边形,但这实际上取决于您的目标。

    【讨论】:

    • 谢谢。您提到的 RTree 案例很有用。正如你所说,从点到多边形的空间查询比到点或线要复杂一些。 Geopandas 正在努力为最近的空间查询添加一些功能,我将等待 Geopandas 提供的功能。
    猜你喜欢
    • 2012-06-14
    • 2010-10-28
    • 1970-01-01
    • 2017-01-08
    • 2021-12-06
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    相关资源
    最近更新 更多