Ami*_*hak 10 r reverse-geocoding ggmap
我试图反转地理编码一个大型数据集(大约100k).我使用revgeocode
了包中的功能ggmap
.我得到了一个条目的结果
48 Grand View Terrace, San Francisco,
CA 94114, USA
48 Grand View Terrace Eureka Valley San Francisco
San Francisco County California United States
postal_code postal_code_suffix
Run Code Online (Sandbox Code Playgroud)
,但我需要自动化该过程并将其用于整个数据集.
我试过了
r <- lapply(revgeocode(location = (c(z$lon),c(z$lat)),
output = "more",
messaging = FALSE, sensor = FALSE, override_limit = FALSE,
client = "", signature = ""))
Run Code Online (Sandbox Code Playgroud)
并在每一步中得到意外','的错误.
我也尝试编写以下循环
r <- for(i in 1:10){
revgeocode(location = ("z$lon", "z$lat"),output = "more", messaging = FALSE, sensor = FALSE, override_limit = FALSE,client = "", signature = "")}
Run Code Online (Sandbox Code Playgroud)
并得到类似的错误
请提供一些材料或有用的链接,帮助我编写反向地理编码循环.如何验证数据的真实性?
根据此答案,您可以在data.frame中创建新变量
我们mapply()
用来处理您的坐标并将结果返回到列表中res
.
res <- mapply(FUN = function(lon, lat) {
revgeocode(c(lon, lat), output = "more")
},
df$lon, df$lat
)
Run Code Online (Sandbox Code Playgroud)
然后,我们使用rbindlist()
from data.table
将列表转换为a data.frame
(fill = TRUE
因为并非所有元素都res
具有相同的长度,即某些结果不返回a street_number
和a postal_code
)并将cbind()
其转换为原始数据
cbind(df, data.table::rbindlist(res, fill = TRUE))
Run Code Online (Sandbox Code Playgroud)
更新
跟进您的评论,如果您要处理超过2500个查询,您可以订阅Google Maps API Premium Plan来解锁更高的配额.然后,您可以将凭据传递给revgeocode()
使用signature
和client
参数.
正如文档中提到的那样:
购买Google Maps API Premium Plan许可后,您将收到Google发来的欢迎电子邮件,其中包含您的客户ID和私人加密密钥.
您的客户ID用于访问Google Maps API Premium Plan的特殊功能.所有客户端ID都以gme-前缀开头.将您的客户端ID作为客户端参数的值传递.使用您的私人加密密钥生成唯一的数字签名.将此签名作为签名参数的值传递.
通过检查revgeocode()
源代码并查看URL的构造方式,您可以了解它的工作原理:
sensor4url <- paste("&sensor=", sensor, sep = "")
client4url <- paste("&client=", client, sep = "")
signature4url <- paste("&signature=", signature, sep = "")
url_string <- paste("http://maps.googleapis.com/maps/api/geocode/json?latlng=",
loc4url, sensor4url, sep = "")
if (userType == "business") {
url_string <- paste(url_string, client4url, signature4url,
sep = "")
}
Run Code Online (Sandbox Code Playgroud)
数据
df <- structure(list(lat = c(32.31, 32.19, 34.75, 35.09, 35.35, 34.74 ), lon =
c(119.827, 119.637, 119.381, 119.364, 119.534, 119.421 )), .Names =
c("lat", "lon"), row.names = c(21L, 32L, 37L, 48L, 50L, 89L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5496 次 |
最近记录: |