R,googleway,通过删除单词来匹配地址

时间:2018-04-02 07:01:31

标签: r api google-maps geolocation googleway

如果我直接运行以下代码,它会给我一个错误,因为地址太明确,但是如果我删除-272,它可以正常工作。

那么如何在函数运行之前自动删除单词并给我地址

library(googleway)    
 google_geocode(address = "경북 경주시 외동읍 문산공단길 84-272", language = "kr", key = api_key,

1 个答案:

答案 0 :(得分:1)

如果我在您的问题中使用地址,则API适用于我。但是,使用your other question中的地址可以获得ZERO_RESULTS次回复。

我们可以在gsub()命令中使用简单的正则表达式删除最终空格后的地址的最后部分。

library(googleway)
set_key("your_api_key")

## invalid query
add <- "대한민국 경기도 안산시 단원구 성곡동 강촌로 140"
res <- google_geocode(address = add, language = "kr")
res
# $results
# list()
# 
# $status
# [1] "ZERO_RESULTS"

## remove the last part after the final space and it works
new_add <- gsub(' \\S*$', '', add)

res <- google_geocode(address = new_add, language = "kr")
geocode_coordinates(res)
#        lat      lng
# 1 37.31737 126.7672

您可以将其转换为迭代循环,该循环将继续删除最终“空格”字符后的所有内容,并尝试对新地址进行地理编码。

## the curl_proxy argument is optional / specific for this scenario 
geocode_iterate <- function(address, curl_proxy) {

    continue <- TRUE
    iterator <- 1

    while (continue) {
        print(paste0("attempt ", iterator))
        print(address)
        iterator <- iterator + 1

        res <- google_geocode(address = address, language = "kr", curl_proxy = curl_proxy)
        address <- gsub(' \\S*$', '', address)

        if (res[['status']] == "OK" | length(add) == 0 | grepl(" ", add) == FALSE ){
            continue <- FALSE
        }
    }
    return(res)
}

add <- "대한민국 경기도 안산시 단원구 성곡동 강촌로 140"
res <- geocode_iterate(address = add, curl_proxy = curl_proxy)
# [1] "attempt 1"
# [1] "대한민국 경기도 안산시 단원구 성곡동 강촌로 140"
# [1] "attempt 2"
# [1] "대한민국 경기도 안산시 단원구 성곡동 강촌로"

小心确保while循环CAN实际退出。您不想进入无限循环。

请记住,即使返回ZERO_RESULTS,查询仍会计入您的每日API配额。