2017-01-05 184 views
1

我一直在綁定以獲得大約2000名學生的家庭郵編列表和學校郵編列表之間的距離。我正在使用R內的gmapsdistance包來從Google Maps Distance Matrix API中獲取此信息。我已經輸入了一個有效的API密鑰,並出於安全原因在下面的代碼中將其替換。使用R中的Google地圖計算步行距離

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

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

但是,這給出了以下錯誤代碼。

錯誤的功能(類型,味精,asError = TRUE):在連接 未知的SSL協議錯誤maps.googleapis.com:443

展望谷歌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 

回答

3

我沒有足夠的信譽發表評論,但你試過在參數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")