我正在寻找一种简约的解决方案,用于在Python中进行基本的地理空间搜索。
我们有大约10k个位置的数据集,需要解决从给定位置开始,找到所有距离该位置N公里范围内的位置。我不想使用显式支持地理空间的数据库,希望能够避免使用外部解决方案。是否有仅使用Python的方法来实现此功能?
我正在寻找一种简约的解决方案,用于在Python中进行基本的地理空间搜索。
我们有大约10k个位置的数据集,需要解决从给定位置开始,找到所有距离该位置N公里范围内的位置。我不想使用显式支持地理空间的数据库,希望能够避免使用外部解决方案。是否有仅使用Python的方法来实现此功能?
scipy.spatial
包含了一种kd-tree实现,在Python中非常流行。
一种没有使用任何外部模块的自制解决方案可能是这样的:
import numpy as np
points = np.array([[22.22, 33.33],
[08.00, 05.00],
[03.12, 05.00],
[09.00, 08.00],
[-02.5, 03.00],
[0.00, -01.00],
[-10.0,-10.00],
[12.00, 12.00],
[-4.00, -6.00]])
r = 10.0 # Radius withing the points should lie
xm = 3 # Center x coordinate
ym = 8 # Center y coordinate
points_i = points[((points[:,0] - xm)**2 + (points[:,1] - ym)**2)**(1/2.0) < r]
points_i 包含那些在半径内的点。这个解决方案需要数据以 numpy 数组的形式存在,据我所知,这也是一种处理大型数据集的非常快速的方式,相对于 for 循环而言。我想这个解决方案基本上是最简单的。下面的图显示了使用代码中给定的数据的结果。