我有36个位置的列表,我必须从每个位置到每个其他位置获得距离矩阵,即36x36矩阵。在本论坛上使用关于此主题的其他问题的帮助,我能够将基本代码(仅在四个位置演示)组合如下:
library(googleway)
library(plyr)
key <- "VALID KEY" #removed for security reasons
districts <- c("Attock, Pakistan",
"Bahawalnagar, Pakistan",
"Bahawalpur, Pakistan",
"Bhakkar, Pakistan")
#Calculate pairwise distance between each location
lst <- google_distance(origins=districts, destinations=districts, key=key)
res.lst <- list()
lst_elements <- for (i in 1:length(districts)) {
e.row <- rbind(cbind(districts[i], distance_destinations(lst),
distance_elements(lst)[[i]][['distance']]))
res.lst[[i]] <- e.row
}
# view results as list
res.lst
# combine each element of list into a dataframe.
res.df <- ldply(res.lst, rbind)
#give names to columns
colnames(res.df) <- c("origin", "destination", "dist.km", "dist.m")
#Display result
res.df
此代码适用于少量查询;即,如果位置很少,例如一次5个。对于任何更大的东西,我得到一个&#34; Over-Query-Limit&#34;消息错误:&#34;您已超出此API的费率限制&#34;即使我没有达到2500限制。我还注册了“按使用付费”#39;结算选项,但我继续得到相同的错误。我想知道这是否是每秒发送多少请求的问题(即费率)?如果是这样,我可以修改我的代码来解决这个问题吗?即使没有API密钥,此代码也不会要求超过2500个查询,因此我应该可以执行此操作,但即使启用了结算,我也很难解决此问题。
答案 0 :(得分:1)
免费配额为2500 元素。
发送到距离矩阵API的每个查询都受限于允许的元素的数量,其中,起始数乘以目标数量定义元素数量。
标准使用限制
标准API的用户:每天2,500个免费元素,以客户端和服务器端查询的总和计算。 每个请求最多25个来源或25个目的地。
36x36请求将是1296个元素。在2之后,你将失去配额。
答案 1 :(得分:0)
对于仍在努力解决这个问题的人;我能够通过使用while循环来解决它。由于我在2500查询限制之下,这是一个速率问题而不是查询限制问题。使用while循环,我将位置分成块(每次运行距离查询2x36)并循环遍历整个数据以获得我需要的36x36。