Python的极简地理空间搜索解决方案

3

我正在寻找一种简约的解决方案,用于在Python中进行基本的地理空间搜索。

我们有大约10k个位置的数据集,需要解决从给定位置开始,找到所有距离该位置N公里范围内的位置。我不想使用显式支持地理空间的数据库,希望能够避免使用外部解决方案。是否有仅使用Python的方法来实现此功能?

3个回答

2

scipy.spatial 包含了一种kd-tree实现,在Python中非常流行。


2
Shapely”似乎是一个很好的解决方案。它的描述似乎符合您所寻找的内容:
“[Shapely]它让你在使用Python时,可以在数据库的上下文之外进行PostGIS-ish操作。”
它基于广泛使用的C++库GEOS
这里是文档链接:Here

0

一种没有使用任何外部模块的自制解决方案可能是这样的:

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 循环而言。我想这个解决方案基本上是最简单的。下面的图显示了使用代码中给定的数据的结果。

enter image description here


这个线性算法对于OP的10k数据集可能还可以,但比起该领域通常应用的技术来说效率要低得多。 - Mike Graham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接