2013-06-28 67 views
9

我想计算两个邮政编码之间的距离。 100,000个不同的邮政编码。我知道在ggmap确定两个邮政编码之间的距离(替代mapdist)

mapdistmapdist功能完美的作品:

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依赖于谷歌地理编码API这是受2500地理位置的查询限制每天请求

您是否知道有任何替代r代码可以使用具有较高请求限制的其他服务(如Nokia Maps或Bing)来计算两点之间的距离?

+0

作为替代方案,您可以使用'Imap'包中的'gdist'来计算[大圆距离](http://en.wikipedia.org/wiki/Great-circle_distance),但我认为您需要获取lat /长坐标... – agstudy

+0

@agstudy好点。我相信'rdist'包中还有一个Haversine公式。这样做的好处是你只需要一个地理编码查找每个点,而不是每对点的一个地理编码查找。这无关紧要(如果你只想从不同的对点观察)或者可能很重要(如果你的所有路线都从同一点开始) –

回答

12

taRifx.geo::georoute(直到我推出另一个更新,此时它将通过install.packages提供)才能使用Bing地图(支持我相信每天25k)并返回距离。

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

你必须得到Bing地图API密钥,并将其设置在v全局选项(理想位置是在.Rprofile),但关键是免费的:

options(BingMapsKey="whateverBingGivesYouForYourKey") 
+0

+1!好东西。每天25k对Bing来说真是一个好点。 – agstudy

+1

您也可以使用'taRifx.geo :: geocode'来使用Bing进行地理编码。 –

+0

地理编码是寻找(纬度/经度)的过程吗?对不起,我不知道地理条款... – agstudy

0

如果你开始一个新的R会话并在新会话中运行library(ggmap),则可以再次创建2500个查询。

功能distQueryCheck()显示剩余多少查询。