使用R中的Google地图计算步行距离

时间:2017-01-05 14:50:02

标签: r google-maps google-maps-api-3

我一直在努力争取家庭邮政编码列表与大约2,000名学生的学校邮政编码列表之间的距离。我正在使用R中的gmapsdistance包来从Google Maps Distance Matrix API获取此功能。为了安全起见,我已经输入了一个有效的API密钥并在下面的代码中替换了它。

library(gmapsdistance)
set.api.key("valid API key")

results <- gmapsdistance(origin = school$HomePostcode, 
                         destination = school$SchoolPostcode, 
                         mode = "walking", 
                         shape = "long")

但是,这会产生以下错误代码。

  

函数错误(type,msg,asError = TRUE):     与maps.googleapis.com:443

相关的未知SSL协议错误

在Google API网站上看,它似乎没有运行所有数据的查询,它说只有219个请求。我知道我在一天内可以完成的请求数量有限,但限制是2,500,甚至不能让我接近这一点。

我尝试在一组邮政编码上运行代码,如下所示;

test <- gmapsdistance(origin = "EC4V+5EX",
                      destination = "EC4V+3AL",
                      mode = "walking",
                      shape = "long")

正如我所料,它给出了以下内容。

$Time
[1] 384

$Distance
[1] 497

$Status
[1] "OK"

我的数据看起来像这样,我已经匿名化了数据并删除了所有不需要的变量。有1,777套邮政编码。

head(school)
  HomePostcode   SchoolPostcode
1     EC4V+5EX         EC4V+3AL
2     EC2V+7AD         EC4V+3AL
3     EC2A+1WD         EC4V+3AL
4     EC1V+3QG         EC4V+3AL
5     EC2N+2PT         EC4V+3AL
6     EC1M+5QA         EC4V+3AL

1 个答案:

答案 0 :(得分:4)

我没有足够的声誉来评论,但您是否尝试将参数combinations设置为"pairwise"。如果设置为"all",则它将计算一个原点和所有目的地之间的所有组合。

library(gmapsdistance)

from <- c("EC4V+5EX", "EC2V+7AD", "EC2A+1WD", "EC1V+3QG", "EC2N+2PT", "EC1M+5QA")
to <- c("EC4V+3AL", "EC4V+3AL", "EC4V+3AL", "EC4V+3AL", "EC4V+3AL", "EC4V+3AL")

test <- gmapsdistance(origin=from, 
                        destination=to,
                        combinations="pairwise",
                        key="YOURAPIKEYHERE",
                        mode="walking")

test$Distance

        or       de Distance
1 EC4V+5EX EC4V+3AL      497
2 EC2V+7AD EC4V+3AL      995
3 EC2A+1WD EC4V+3AL     2079
4 EC1V+3QG EC4V+3AL     2492
5 EC2N+2PT EC4V+3AL     1431
6 EC1M+5QA EC4V+3AL     1892

有了这个小的6个目的地,它有一个API密钥,如果你发给我一个更大的设置,我可以试试。

另一种选择是使用包googleway,它允许设置API密钥。例如:

library(googleway)

test <- google_distance(origins = from,
                      destinations = to,
                      mode = "walking",
                      key="YOURAPIKEYHERE")