Поиск перекрывающихся местоположений в радиусе 5 миль и 10 миль для списка данных о местоположении с широтой и долготой

У меня есть набор данных из 10 000 наблюдений со списком информации о местоположении, который выглядит следующим образом:

 ADDRESS                 |    CITY        |  STATE | ZIP   |LATITUDE   |LONGITUDE

1189 Beall Ave           |  Wooster       | OH  | 44691 | 40.8110501   |-81.93361870000001

580 West 113th Street    |  New York City | NY  | 10025 | 40.8059768   | -73.96506139999997

268 West Putnam Avenue   |  Greenwich     | CT  | 06830 | 40.81776801  |-73.96324589997

1 University Drive       |   Orange       | CA  | 92866 | 40.843766801 |-73.9447589997

200 South Pointe Drive   |  Miami Beach   | FL  | 33139 | 40.1234801   |-73.966427997

Мне нужно найти перекрывающиеся места в радиусе 5 и 10 миль. Я слышал, что у них есть функция под названием geodist, которая может позволить мне это сделать, хотя я никогда ею не пользовался. Проблема в том, что для работы geodist мне может понадобиться, чтобы все комбинации широт и долгот были рядом, что может сделать файл очень большим и сложным в использовании. Я также не знаю, как я смогу получить широту / долготу для каждой комбинации, чтобы они были рядом.

Кто-нибудь знает, как я могу получить окончательный результат, который я ищу?


person V_N    schedule 31.01.2017    source источник
comment
Чтобы получить лучшие ответы, сначала попробуйте простой способ и покажите свою работу. Перефразируя афоризм, 100 миллионов записей — это уже не то, что было раньше, и SAS должен легко масштабироваться до этого диапазона. Если по какой-то причине у вас ограниченная среда (например, вы взаимодействуете с Excel), то есть много разумных способов предварительной обработки данных. Люди будут рады вознаградить ваши усилия большой коллекцией подходов.   -  person Leo    schedule 31.01.2017


Ответы (1)


Вот общий план одного из возможных подходов к этой проблеме:

  • Выделите каждый адрес в «сетке» широты и долготы, округлив координаты до ближайшего 0,01 градуса или что-то в этом роде.
  • В каждой ячейке пронумеруйте все адреса от 1 до n, чтобы у каждого был уникальный идентификатор.
  • Напишите шаг данных, используя набор адресных данных в качестве входных данных с помощью оператора set, а также загрузите его в хэш-объект. Ваш набор данных довольно мал, поэтому у вас не должно возникнуть проблем с размещением соответствующих битов в памяти.
  • For each address, calculate distances only to other addresses in the same cell, or other cells within a certain radius, i.e.
    1. Decide which cell to look up
    2. Переберите все адреса в этой ячейке, используя уникальный идентификатор, который вы создали ранее, ища координаты каждого из хеш-объекта.
    3. Используйте geodist, чтобы рассчитать расстояние для каждого и вывести запись, если это хранитель.

Это немного больше работы для программирования, но это намного эффективнее, чем поиск грубой силы O (n ^ 2). Однажды я использовал аналогичный алгоритм с набором данных из 1,8 млн почтовых индексов Великобритании и около 60 млн точек координатных данных.

person user667489    schedule 31.01.2017