找到最近的gps指向python中的poi位置

问题描述 投票:0回答:1

我有数据集,其中包含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
python-3.x gps latitude-longitude knn
1个回答
0
投票

为了加快速度,对数据做一些准备可能是个好主意。请注意,有几种方法可以解决这个问题。我假设你想要一个简单的解决方案而不使用第三方库(PostGIS和地理空间索引在这里可以提供很大的帮助)。

  1. 如果点数相对较小,您可以考虑预先计算所有距离,将其存储在表中,将两个点作为主键和距离。速度快,但需要占用大量空间,如果您的数据集非常动态,它就不方便了。
  2. 您可以采取的另一种方法是将点分组为切片。如果您将这些信息与您的积分一起存储,则只允许您考虑附近的磁贴。因此,您计算的点数要少得多。
  3. 您可以自己加快计算速度。在您的特定代码中,我看到您始终将坐标转换为弧度。因此,您可以考虑将它们存储为弧度,这样您就不需要一次又一次地进行相同的计算。
© www.soinside.com 2019 - 2024. All rights reserved.