У меня есть миллионы географических точек. Для каждого из них я хочу найти все "соседние точки", т.е. Все остальные точки в пределах радиуса, скажем, несколько сотен метров.
Существует наивное решение O (N ^ 2) этой задачи - просто вычислите расстояние всех пар точек. Однако, поскольку я имею дело с надлежащей метрикой расстояния (географическое расстояние), должен быть более быстрый способ сделать это.
Я хотел бы сделать это в python. Одно из решений, которое приходит на ум, - использовать некоторую базу данных (mySQL с расширениями GIS, PostGIS) и надеяться, что такая база данных позаботится об эффективном выполнении описанной выше операции с использованием некоторого индекса. Я бы предпочел что-то более простое, но это не требует от меня создания и изучения таких технологий.
Несколько точек
- Я буду выполнять операцию "найти соседей" миллионы раз
- Данные будут оставаться статическими
- Поскольку проблема в каком-то смысле проста, я бы хотел увидеть, что это код python, который ее решает.
Положим в терминах кода python, я хочу что-то вроде строк:
points = [(lat1, long1), (lat2, long2) ... ] # this list contains millions lat/long tuples
points_index = magical_indexer(points)
neighbors = []
for point in points:
point_neighbors = points_index.get_points_within(point, 200) # get all points within 200 meters of point
neighbors.append(point_neighbors)