Найти все координаты внутри круга в географических данных в python

У меня миллионы географических точек. Для каждого из них я хочу найти все «соседние точки», то есть все другие точки в пределах некоторого радиуса, скажем, нескольких сотен метров.

Существует наивное решение этой проблемы за O (N ^ 2) - -просто посчитайте расстояние до всех пар точек. Однако, поскольку я имею дело с правильной метрикой расстояния (географическим расстоянием), должен быть более быстрый способ сделать это.

Я хотел бы сделать это в python. Одно из решений, которое приходит на ум, - использовать некоторую базу данных (mySQL с расширениями ГИС, PostGIS) и надеяться, что такая база данных позаботится об эффективном выполнении описанной выше операции с использованием некоторого индекса. Я бы предпочел что-то попроще, что не требует от меня разрабатывать и изучать такие технологии.

Пара пунктов

  • Я выполню операцию «найти соседей» миллионы раз
  • Данные останутся static
  • Поскольку проблема в некотором смысле проста, я хотел бы увидеть код 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) 
16
задан conradlee 16 June 2011 в 12:11
поделиться