2017-01-31 2 views
0

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

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 миль. Я слышал, что это функция, называемая геодистом, которая может позволить мне это сделать, хотя я никогда не использовал ее. Проблема в том, что для работы геодезиста мне могут понадобиться все сочетания широт и долгот, которые могут стать файлом действительно большим и сложным в использовании. Я также не знаю, как я смогу получить lat/longs для каждой комбинации, чтобы быть рядом.

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

+0

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

ответ

0

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

  • Выделяют каждый адрес в широту и долготу «сетки» округлением координаты с точностью до 0,01 градусов или что-то подобное.
  • В каждой ячейке укажите все адреса от 1 до n, чтобы каждый из них имел уникальный идентификатор.
  • Напишите datastep, берущий ваш адресный набор данных как вход через инструкцию set, а также загрузите его в хэш-объект. Ваш набор данных довольно мал, поэтому у вас не должно возникнуть проблем с установкой соответствующих бит в памяти.
  • Для каждого адреса, вычислить расстояния только на другие адреса в одной и той же клетке, или другие клетки в пределах определенного радиуса, т.е.
    1. Решите, какие ячейки, чтобы посмотреть
    2. перебрать все адреса в этой ячейке с использованием уникальный идентификатор, который вы создали ранее, просматривая координаты каждого из хеш-объекта.
    3. Используйте geodist, чтобы рассчитать расстояние для каждого из них и вывести запись, если это хранитель.

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

Смежные вопросы