2013-06-28 38 views
9

Chcę obliczyć odległość między ok. 100 000 różnych kodów pocztowych. Wiem o funkcji w pakiecieOkreślanie odległości między dwoma kodami pocztowymi (alternatywy dla mapy)

mapdistggmapmapdist działa perfekcyjnie:

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 

Jednak mapdist opiera się na API Google Geokodowanie która podlega ograniczeniu zapytań 2.500 geolokalizacji żąda dziennie.

Czy znasz alternatywny kod r, aby obliczyć odległość między dwoma punktami za pomocą innej usługi, która ma wyższy limit żądań (np. Nokia Maps lub Bing)?

+0

Jako alternatywę możesz użyć 'gdist' z pakietu' Imap', który oblicza [odległość wielkiej kole] (http://en.wikipedia.org/wiki/Great-circle_distance), ale myślę, że musisz dostać lat/długie współrzędne ... – agstudy

+0

@agstudy Dobry punkt. Istnieje również formuła Haversine'a w pakiecie 'rdist', w którą wierzę. Zaletą zrobienia tego w ten sposób jest tylko jedno wyszukiwanie geokodowania na punkt, zamiast jednego wyszukiwania geokodowania na parę punktów. To nie ma znaczenia (jeśli chcesz tylko obserwacji z różnych par punktów) lub może mieć duże znaczenie (jeśli wszystkie twoje trasy zaczynają się od tego samego punktu) –

Odpowiedz

12

taRifx.geo::georoute (dostępny tylko here aż wypchnąć kolejną aktualizację, w którym momencie będzie on dostępny poprzez install.packages) można użyć Bing Maps (który obsługuje wierzę 25K dziennie) i może powrócić odległość.

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

Musisz dostać klucz API Bing Maps i ustawić go w opcjach globalnych R (idealne miejsce docelowe jest w .Rprofile), ale klucz jest wolny:

options(BingMapsKey="whateverBingGivesYouForYourKey") 
+0

+1! dobry towar. a 25k dziennie to naprawdę dobry punkt dla Binga. – agstudy

+1

Możesz użyć 'taRifx.geo :: geocode', aby użyć Bing również do geokodowania. –

+0

Geokodowanie jest procesem znajdowania (lat/lon)? Przepraszam, nie znam terminów geograficznych ... – agstudy

0

Jeśli zaczniesz nowa sesja R i uruchom library(ggmap) w nowej sesji, możesz utworzyć kolejne 2500 zapytań.

Funkcja distQueryCheck() pokazuje liczbę pozostałych zapytań.