我有数百万个地理点,想要找到所有“邻近点”,也就是说,在某个半径内的所有其他点,例如几百米。
对于这个问题,存在一个朴素的O(N^2)解决方案——简单地计算所有点对之间的距离。然而,因为我正在处理一个适当的距离度量(地理距离),所以应该有一种更快的方法来解决这个问题。
我想在Python中完成这个任务。一种可能的解决方案是使用一些数据库(带有GIS扩展的MySQL,PostGIS),并希望这样的数据库能够通过某些索引有效地执行上述操作。但我更喜欢一些更简单的东西,不需要我构建和学习这样的技术。
一些要点:
- 我将执行数百万次“查找邻居”操作。
- 数据将保持静态状态。
- 因为问题本质上很简单,所以我想看到解决它的Python代码。
用Python代码表示,我想要类似于以下内容:
points = [(lat1, long1), (lat2, long2) ... ] # this list contains millions lat/long tuples
points_index = magical_indexer(points)
neighbors = []
for point in points:
point_neighbors = points_index.get_points_within(point, 200) # get all points within 200 meters of point
neighbors.append(point_neighbors)