У меня миллионы географических точек. Для каждого из них я хочу найти все «соседние точки», то есть все другие точки в пределах некоторого радиуса, скажем, нескольких сотен метров.
Существует наивное решение этой проблемы за O (N ^ 2) - -просто посчитайте расстояние до всех пар точек. Однако, поскольку я имею дело с правильной метрикой расстояния (географическим расстоянием), должен быть более быстрый способ сделать это.
Я хотел бы сделать это в python. Одно из решений, которое приходит на ум, - использовать некоторую базу данных (mySQL с расширениями ГИС, PostGIS) и надеяться, что такая база данных позаботится об эффективном выполнении описанной выше операции с использованием некоторого индекса. Я бы предпочел что-то попроще, что не требует от меня разрабатывать и изучать такие технологии.
Пара пунктов
С точки зрения кода 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)