Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python上找到纬度和经度点的最近邻居?_Python_Geolocation_Scipy_Nearest Neighbor_Kdtree - Fatal编程技术网

如何在python上找到纬度和经度点的最近邻居?

如何在python上找到纬度和经度点的最近邻居?,python,geolocation,scipy,nearest-neighbor,kdtree,Python,Geolocation,Scipy,Nearest Neighbor,Kdtree,输入: point = (lat, long) places = [(lat1, long1), (lat2, long2), ..., (latN, longN)] count = L 输出: 邻居=位置的子集靠近点。(len(邻居)=L) 问题: 我可以使用kd树快速查找具有纬度和经度的点的最近邻s吗?(例如,在scipy中实现) 是否需要将点的地理坐标(纬度和经度)转换为坐标x,y 这是解决这一问题的最佳方法吗?我真的不知道使用kd树是否能正确工作,但我的直觉认为这是不准确的 我认为你需

输入:

point = (lat, long)
places = [(lat1, long1), (lat2, long2), ..., (latN, longN)]
count = L
输出:
邻居
=
位置的子集
靠近
。(
len(邻居)=L

问题: 我可以使用kd树快速查找具有纬度和经度的点的最近邻s吗?(例如,在scipy中实现)

是否需要将点的地理坐标(纬度和经度)转换为坐标x,y


这是解决这一问题的最佳方法吗?

我真的不知道使用kd树是否能正确工作,但我的直觉认为这是不准确的

我认为你需要使用更大的圆距离来获得精确的距离


从数学输入弧度、cos、sin、asin、sqrt、度、atan2
def验证点(p):
lat,lon=p
assert-90我认为你在试图解决这个问题

由于您的数据集位于2D中,那么a将很好地工作,一般来说,我不知道Spicle


但是,如果您的点开始生活在更高的维度中,那么。

scikit learn
提供了一个支持Haversine度量的类。另请参见。

在何处找到此代码中使用的功能
验证点
?我假设它检查纬度和经度是否在-90和90之间?这个答案有点不完整,不能回答OP的问题。函数
distance\u haversine()
计算以lat/lon为单位的两点之间的距离(以km为单位),但它没有回答如何使用此度量来查找最近邻的问题。@lumbric从技术上讲,您是正确的。我提供了如何计算距离的方法,因为问题的一部分是询问是否需要转换地理点。最终的答案是,如果使用距离哈弗森,你不需要转换它们。你只需找到到每一组点的距离,然后选择最小的。@MarcelWilson啊,是的,你是对的,你的答案可以很容易地用来计算所有成对距离,然后取最小值。这是可能的,但不是最佳的。对于较大的值(比如>10000个点),这将占用大量内存并花费大量时间。它需要O(n^2)时间和内存,而最佳解决方案应该是O(n*log(n)),例如使用某种索引,如k-树。因为OP问到了k-树,我猜想他对最优解感兴趣。@MarcelWilson啊,是的,当然。如果距离很大,相信欧几里德度量是有风险的。我认为应该可以找到使用哈弗森度量来解决O(n*log(n))中问题的算法。我不确定KDTree,但在sklearn中支持Haversine度量(我不确定是否存在任何陷阱)。数据不是以2D给出的,点是以lat/lon表示的,无法准确转换为2D坐标。人们可以用哈弗森公式计算点之间的距离,但它与2D中的点不同(我不知道kd树是否适用)。这是最好的答案。