OSMNX-边的哪一部分被认为是最近的

2022-04-12 00:00:00 python osmnx openstreetmap

问题描述

我使用的是OSMNX中的NEAREST_EDGE函数。我不清楚在进行此计算时使用的是边的哪一部分。它是边缘的任何一部分吗?这是中间点吗?

对于网络中的长边来说,这会有很大的不同。


解决方案

这取决于您对函数进行参数化的方式。从nearest_edges函数documentation:

查找与某个点或多个点中每个点最近的边。

如果X和Y是单坐标值,这将返回到该点最近的边。如果X和Y是坐标值列表,这将返回到每个点的最近边。

如果Interpolate为None,则使用r-树搜索距离每个点最近的边,一次搜索一条边,并最小化从点到可能匹配的欧几里得距离。为了准确起见,请使用投影的图形和点。如果搜索相对于图表大小的几个点,此方法是精确的,也是最快的。

在搜索相对于图形大小的许多点时,要获得更快的方法,请使用Interpolate参数沿边插值点并对它们进行索引。如果图是投影的,则使用k-d树进行欧几里得最近邻搜索,这需要将Scipy安装为可选依赖项。如果未投影图形,则使用球形树进行半正弦最近邻搜索,这要求将SCRICKIT-LEARN安装为可选依赖项。

因此,如果您离开interpolate=None(为了精确起见,最好使用投影图和投影点),该函数将根据点到边几何图形任何部分的最小距离来查找距离点最近的边。这在几何上是精确的,如果只搜索大图中的几个点,则是最快的。

或者,如果您传递一个interpolate参数值,该函数将沿边内插等间距的点,然后根据该点到沿边的几何体的任何插值点的最小距离来查找与您的点最近的边。这在几何上略有不精确(此不精确度随interpolate值的不同而不同),但在搜索多个点时最快,尤其是在较小或中等大小的图表中。

相关文章