Python 如何有效地检查GPS坐标是否接近数千个其他坐标?

Python 如何有效地检查GPS坐标是否接近数千个其他坐标?,python,gps,Python,Gps,我要分析1100万个GPS坐标,效率是我的主要问题。问题如下: 我想在它周围每50米半径只保留1个GPS坐标(称为节点)。代码非常简单,我有一个集合G,对于G中的每个节点,我检查我要添加的节点是否与其他节点太接近。如果距离太近(),使用面向对象的方法通常对这样的计算速度较慢(尽管可读性更强) 您可以将纬度、经度转换为笛卡尔x、y、z,从节点创建numpy数组,并使用scipy的极快速度。它提供了几种类似操作的方法,在您的情况下可能是正确的方法。您必须使用Python吗?如果不需要精确的距离,则可

我要分析1100万个GPS坐标,效率是我的主要问题。问题如下:
我想在它周围每50米半径只保留1个GPS坐标(称为节点)。代码非常简单,我有一个集合G,对于G中的每个节点,我检查我要添加的节点是否与其他节点太接近。如果距离太近(),使用面向对象的方法通常对这样的计算速度较慢(尽管可读性更强)


您可以将纬度、经度转换为笛卡尔x、y、z,从节点创建numpy数组,并使用scipy的极快速度。它提供了几种类似操作的方法,在您的情况下可能是正确的方法。

您必须使用Python吗?如果不需要精确的距离,则可以计算纬度和经度的差异des,然后使用平方和作为度量<代码>Δ纬度²+Δ经度²,使用
k
将米转换为度。为了获得更高的精度,您可以根据纬度对经度进行校正。是的,我需要使用python。问题不在于精度@YiminRong,我认为我的度量很好。问题在于效率。我需要更快地在集中添加节点,而无需检查数百万个节点节点已在集合中。此外,如果输入区域相对较小,即可以用平面近似,则可以定义一个5°的区域⨉ 5°分成更小的区域,然后把你的位置放到它们中。然后你只需要考虑最近的9个邻居作为候选。如果你的输入面积很大,那么它甚至可以工作。基本上你会把它们添加到近似位置作为一阶近似。听起来不错,但我不知道这个区域的大小。席席。不管怎么说,它很小,我需要在阅读新节点时缩放存储箱的数量。我会用字典试试。谢谢!很好,谢谢你。我不知道“高维最近邻查询仍然是计算机科学中一个实质性的开放问题。”。
from geopy import distance

class Node: #a point on the map
    def __init__(self, lat, long): #lat and long in degree
        self.lat = lat
        self.long = long

    def distanceTo(self, otherNode):
        return distance.distance((self.lat, self.long), (otherNode.lat, otherNode.long)).km

    def equivalent(self, otherNode):
        return self.distanceTo(otherNode) < 0.05 #50 meters away
currentNode = Node(lat, long)

alreadyIn = False
for n in graph:
    if n.equivalent(currentNode):
        alreadyIn = True
        break

#set of Nodes
if alreadyIn == False:
    G.add(currentNode)