Obtenez les points de latitude et de longitude à proximité avec la bibliothèque Geoindex de Python

De cette manière, supposons que vous souhaitiez déterminer le point le plus proche à une latitude / longitude spécifiée à partir d'une liste contenant un tuple de nombres représentant la latitude / longitude.

geo_pts = [
    (35.60, 139.71),
    (35.58, 139.82),
    #Ce qui suit est omis
]

Implémentation naïve

Une implémentation naïve qui calcule tout dans la liste.

import math

def find(geo_pts, target):
    return max(geo_pts, key=lambda p: dist(p, target))

def dist(p1, p2):
    return math.sqrt(sum((x1 - x2) ** 2 for x1, x2 in zip(p1, p2)))

Tel est le comportement. Il a fallu environ 20 ms pour trouver environ 15 000 points sur l'instance EC2 t2.medium d'AWS.

print(find(geo_pts, (35.6, 139.7)))
# => (35.60, 139.71)

Au fait, si vous voulez obtenir n morceaux, vous pouvez utiliser heapq.nlargest.

Implémentation dans la bibliothèque Geoindex

https://pypi.org/project/geoindex/

def main():
    geo_pts = [
      #Lire comme un tableau
    ]
    index = GeoGridIndex(precision=4)
    for x in geo_pts:
        index.add_point(GeoPoint(x[0], x[1]))

    prev = time.time()
    print(find(index, (35.6, 139.7)))
    # => (Point(35.687659999999994, 139.71178), 9.80482739300054)
    print(time.time() - prev)



def find(index, target):
    return next(index.get_nearest_points(GeoPoint(*target), 10, 'km'))

Dans l'instance EC2 t2.medium d'AWS, la valeur a été renvoyée dans environ 4 ms dans cette implémentation.

À propos, l'unité de taille de cellule de l'argument de GeoGridIndex est km, et si precision = 4 est spécifié, il peut être recherché dans la plage de rayon 40/2 = 20 km. Je n'ai pas fait de vérification supplémentaire car mes exigences étaient justes avec un rayon de 20 km.

Precision Cell size
1 5000
2 1260
3 156
4 40
5 4.8
6 1.22
7 0.152
8 0.038

Recommended Posts

Obtenez les points de latitude et de longitude à proximité avec la bibliothèque Geoindex de Python
Obtenez les distances de latitude et de longitude en mètres avec QGIS
Obtenez l'adresse à partir de la latitude et de la longitude
Coordonnées de latitude et de longitude ↔ Conversion de coordonnées UTM avec python
Collectez les informations de latitude / longitude du magasin avec scrapy + splash ②
Collectez les informations de latitude / longitude du magasin avec scrapy + splash ①