我有数据集,其中包含gps(lon,lat)和poi(lon,lat)位置,我希望(python代码)找到所有gps点的最近点,以便到区域500,1000,2000米内的所有poi位置。
我尝试了以下内容:
在python中编织但是很耗时(将点转换为utm)
geopy.distance(但我不能在gps点和poi位置的集合中执行)
我在sql中找到了这个解决方案:但我想在python中解决我的问题是如何获得gps点集和Poi集合之间的最近距离
SELECT z.zip,
z.primary_city,
z.latitude, z.longitude,
p.distance_unit
* DEGREES(ACOS(COS(RADIANS(p.latpoint))
* COS(RADIANS(z.latitude))
* COS(RADIANS(p.longpoint) - RADIANS(z.longitude))
+ SIN(RADIANS(p.latpoint))
* SIN(RADIANS(z.latitude)))) AS distance_in_km
FROM zip AS z
JOIN ( /* these are the query parameters */
SELECT 42.81 AS latpoint, -70.81 AS longpoint,
50.0 AS radius, 111.045 AS distance_unit
) AS p ON 1=1
WHERE z.latitude
BETWEEN p.latpoint - (p.radius / p.distance_unit)
AND p.latpoint + (p.radius / p.distance_unit)
AND z.longitude
BETWEEN p.longpoint - (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
AND p.longpoint + (p.radius / (p.distance_unit * COS(RADIANS(p.latpoint))))
ORDER BY distance_in_km
LIMIT 15
为了加快速度,对数据做一些准备可能是个好主意。请注意,有几种方法可以解决这个问题。我假设你想要一个简单的解决方案而不使用第三方库(PostGIS和地理空间索引在这里可以提供很大的帮助)。