在道路网络坐标列表上找到最接近给定点的点

时间:2018-08-21 12:20:26

标签: python closest-points

使用Python,所以我的实际问题是从一个数组(数千个点)中计算出最接近的2D点,该数组代表了到给定点(汽车位置)的路网坐标。此计算需要每个0.2秒的时间戳(在线)。在检查closest pair of point problem algorithm时,它会找到某个数组中的最接近点,而不是像我愿意找到的那样相对于给定点。 是否有人熟悉python实现或合适的算法?欢迎任何帮助。

2 个答案:

答案 0 :(得分:0)

  1. 如果您的数据是无序的,那么您将没有其他选择,只能检查数组的每个点。

  2. 如果您的数据按升序/降序排列(例如通过坐标),则可以以此为基础进行搜索。例如,注释中建议的二进制搜索。

  3. 如果您的数据代表道路网络,并且数据结构类似于该网络的真实2D拓扑,则可以利用它并保持“指针”到您的当前位置,然后仅探索该道路的周围环境该位置,然后在当前位置附近找到您的位置。

编辑:还有一点:如果您需要比较距离以确定最接近的距离(可能使用毕达哥拉斯来计算欧氏距离),则不必计算根,也可以比较二次距离,而这将节省一些操作(如果您经常进行操作,则可以快速总结出来)

答案 1 :(得分:0)

感谢大家-以下是我的解决方法(语法之一):

import numpy as np
from sklearn.neighbors import KDTree

np.random.seed(0)
samples = np.random.uniform(low=0, high=500, size=(1000000, 2))
samples.sort(kind='quicksort')
tree = KDTree(samples)
car_location = np.array([[200, 300]])
closest_dist, closest_id = tree.query(car_location, k=1)  # closest point with respect to the car location
print(samples)
print("The car location is: ", car_location)
print("The closest distance is: ", closest_dist)
print("The closest point is: ", samples[closest_id])

输出:

[[ 274.40675196  357.59468319]
 [ 272.4415915   301.38168804]
 [ 211.82739967  322.94705653]
 ..., 
 [ 276.40594173  372.59594432]
 [ 464.17928848  469.82174863]
 [ 245.93513736  445.84696018]]
The car location is:  [[200 300]]
The closest distance is:  [[ 0.31470178]]
The closest point is:  [[[ 199.72906435  299.8399029 ]]]

ChrisN-以上是您的第二个建议的解决方案。您的第3个声音绝对是更好的计算解决方案。但是,我认为我的解决方案将满足所需的问题。如果没有,我将尝试发布第三种解决方案。 tnx!