首页 > 解决方案 > OSMNX - 边缘的哪个“部分”被认为是最近的

问题描述

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

对于网络中的长边,它会产生很大的不同。

标签: pythonopenstreetmaposmnx

解决方案


这取决于您如何参数化函数。从nearest_edges功能文档

找到离一个点或几个点中的每一个最近的边。

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

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

如果要搜索相对于图形大小的许多点,则要使用更快的方法,请使用 interpolate 参数沿边插入点并对其进行索引。如果图是投影的,这将使用 kd 树进行欧几里得最近邻搜索,这需要将 scipy 作为可选依赖项安装。如果图未投影,则使用球树进行半正弦最近邻搜索,这需要将 scikit-learn 作为可选依赖项安装。

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

或者,如果您传递一个interpolate参数值,该函数将沿边缘插值均匀间隔的点,然后根据该点到沿边缘几何形状的任何插值点的最小距离找到离您的点最近的边缘。这在几何上有点不精确(这种不精确性随您的interpolate值而变化),但在搜索许多点时速度最快,尤其是在较小或中等大小的图形中。


推荐阅读