Определение расстояния между двумя почтовыми индексами (альтернативы mapdist)

Я хочу рассчитать расстояние между ок. 100 000 различных почтовых индексов. Я знаю о функции mapdist в пакете ggmap

mapdist работает отлично:

library(ggmap)
mapdist('Washington', 'New York', mode = 'driving')

#         from       to      m      km    miles seconds  minutes    hours
# 1 Washington New York 366284 366.284 227.6089   13997 233.2833 3.888056


mapdist('20001', '10001', mode = 'driving')

#    from    to      m      km    miles seconds minutes    hours
# 1 20001 10001 363119 363.119 225.6421   13713  228.55 3.809167

Однако mapdist использует Google Geocoding API, для которого действует ограничение в 2500 запросов геолокации в день.

Знаете ли вы какой-либо альтернативный код r для расчета расстояния между двумя точками с использованием другого сервиса с более высоким лимитом запросов (например, Nokia Maps или Bing)?


person majom    schedule 28.06.2013    source источник
comment
В качестве альтернативы вы можете использовать пакет gdist из Imap, который вычисляет расстояние по большому кругу, но я думаю, вам нужно получить координаты lat/long...   -  person agstudy    schedule 28.06.2013
comment
@agstudy Хороший вопрос. Насколько я знаю, в пакете rdist также есть формула Хаверсина. Преимущество этого способа заключается в том, что вам нужен только один поиск геокодирования для каждой точки вместо одного поиска геокодирования для пары точек. Это может не иметь значения (если вам нужны наблюдения только из разных пар точек) или может иметь большое значение (если все ваши маршруты начинаются с одной и той же точки).   -  person Ari B. Friedman    schedule 28.06.2013


Ответы (3)


taRifx.geo::georoute (доступно только здесь, пока я не выпущу другое обновление , после чего он будет доступен через install.packages) может использовать карты Bing Maps (которые поддерживают, я думаю, 25 000 в день) и может возвращать расстояние.

georoute( c("3817 Spruce St, Philadelphia, PA 19104", 
            "9000 Rockville Pike, Bethesda, Maryland 20892"), 
             verbose=TRUE, returntype="time", 
             service="bing" )

Вам нужно будет получить ключ API Bing Maps и установить его в глобальных параметрах R (идеальное место — .Rprofile), но ключ бесплатный:

options(BingMapsKey="whateverBingGivesYouForYourKey")
person Ari B. Friedman    schedule 28.06.2013
comment
+1! хорошая вещь. и 25 тысяч в день — это действительно хороший показатель для Bing. - person agstudy; 28.06.2013
comment
Вы также можете использовать taRifx.geo::geocode для использования Bing для геокодирования. - person Ari B. Friedman; 28.06.2013
comment
Геокодирование - это процесс поиска (широта/долгота)? Извините, я не знаю геотерминов... - person agstudy; 28.06.2013
comment
Ага. Превращает адреса в пары широта/долгота. ggmaps имеет более полную функцию, но только для Google Maps. - person Ari B. Friedman; 28.06.2013

Это может показаться тривиальным, но есть совершенно бесплатный вариант — использовать географию Census ZCTA. data, чтобы получить координаты для каждого почтового индекса, а затем вычислить Расстояния по гаверсинусу (или аналогичная метрика расстояния) между координатами.

person shreyasgm    schedule 21.04.2018

Если вы начнете новый сеанс R и запустите library(ggmap) в новом сеансе, вы сможете сделать еще 2500 запросов.

Функция distQueryCheck() показывает, сколько запросов осталось.

person Hao    schedule 25.06.2014