地理编码地址到 R 中的县

Posted

技术标签:

【中文标题】地理编码地址到 R 中的县【英文标题】:Geocode address to county in R 【发布时间】:2021-06-29 00:06:31 【问题描述】:

我有一个街道地址列表,我想将其地理编码到县。我在 R 中工作。下面是简化示例。不幸的是,由于新的 Google API 服务条款,您需要拥有自己的 API 密钥才能运行我的代码——它不应该被共享,所以请不要将它包含在您的解决方案代码中。

我怀疑这是格式问题,但我对 R 太陌生,不知道解决方案。

library(tidyverse)
library(ggmap)

register_google(key = <YOUR GOOGLE KEY>)

ltr <- letters %>% head(5)
adr <- c('110 State St, Albany, NY' , 
           '100 State Cir, Annapolis, MD' ,
           '206 Washington St SW, Atlanta, GA' ,
           '210 State St, Augusta, ME' ,
           '1100 Congress Ave, Austin, TX')

rawAdr <- data.frame(ltr , adr)

# the following only retrieves latitude and longitude
latlonAdr <- geocode(location = rawAdr$adr) %>%
  bind_cols(rawAdr , .)

# the following retrieves county (among much other information), 
# but it is formatted in a way that is 
# impossible to use. For instance, county a is in variable long_name...17, 
# but the same name is repeated for all addresses. The county for address b is given in
# long_name...64, again the same name for all addresses. 

geoAdr <- geocode(location = rawAdr$adr , output = 'all') %>%
  bind_cols(rawAdr , . )

我想要一个列出 ltr、adr 和(正确)县的文件。感谢您的任何帮助! (抱歉,我将有几个小时无法查看答案。)

【问题讨论】:

【参考方案1】:

geocode 函数的返回值是一个长的嵌套列表,您需要在列表中钻取以找到感兴趣的字段。

这是一个绕过 ggmap 包并返回 JSON 响应的解决方案,这更容易解析:

library(magrittr)

ltr <- letters %>% head(5)
adr <- c('110 State St, Albany, NY' , 
         '100 State Cir, Annapolis, MD' ,
         '206 Washington St SW, Atlanta, GA' ,
         '210 State St, Augusta, ME' ,
         '1100 Congress Ave, Austin, TX')
rawAdr <- data.frame(ltr , adr)

#replace spaces with + for a valid web address
adrs <-gsub(" ", "+", adr)
#add the key here to the http address
urls <-paste("https://maps.googleapis.com/maps/api/geocode/json?","address=",adrs,"&key=***keyGoesHere***",sep="")

#query the API, and search for the row that contains the word County and return that value
counties <- sapply(urls, function(url) 
   print(url)
   rgc <- jsonlite::fromJSON(url)
   county <-rgc$results$address_components[[1]]$long_name[grep("County", rgc$results$address_components[[1]]$long_name)]
   county
)
rawAdr$County <- counties
rawAdr

【讨论】:

这很好,你也知道如何添加状态吗? @JohnClegg,所有这些信息都应该存储在响应变量 rgc 中。 上面的“counties”变量只包含url和县名 是的,这是真的。在函数内部,这一行 jsonlite::fromJSON(url) 返回整个位置记录。需要从这里解析出所需的信息。如果您需要帮助,请提出一个新问题,而不是使用评论部分。

以上是关于地理编码地址到 R 中的县的主要内容,如果未能解决你的问题,请参考以下文章

地理编码服务器 Apple API 从何处获取其信息

使用FME进行地理编码转换

Oracle Apex 中的反向地理编码(来自可拖动标记)

python中的地理编码使用API​​密钥从地址获取纬度和经度

对许多地址进行地理编码 - CLGeocoder

地理编码,从地址到坐标