在R中用谷歌地图API,以建筑名称替代地址地理编码新西兰建筑
解决tidygeocoder调用Google API时的国家限定(组件过滤)问题
你的问题核心是地理编码时未限定搜索范围,导致同名地点被错误匹配。用tidygeocoder的components参数就能实现Google API的组件过滤,强制将搜索范围锁定在新西兰,无需修改原有的建筑名称字段。
修改后的代码
library(tidygeocoder) library(tidyverse) library(mapview) library(sf) library(leaflet) id <- c(1, 2, 3) name <- c("Winchester School (P North) New Zealand", "Whangarei Hospital New Zealand", "Auckland Prison, Paremoremo Road, Paremoremo, Auckland 0632") type <- c("School","Hospital","Prison") df <- data.frame(id, name, type) example_geo <- df %>% geocode( address = name, method = "google", # 添加组件过滤,强制限定国家为新西兰 components = "country:nz", # 读取环境变量中的Google API密钥,也可直接传入字符串 api_key = Sys.getenv("GOOGLEGEOCODE_API_KEY") ) %>% arrange(desc(lat)) %>% st_as_sf(coords = c("long", "lat"), crs = 4326)
关键说明
- 组件过滤参数:
components = "country:nz"会强制Google API仅在新西兰境内搜索匹配地点,彻底避免跨国家的错误匹配(比如将新西兰的Winchester School定位到英国)。 - 批量处理注意事项:针对1200+条记录的数据集,需注意Google地理编码API的配额与速率限制。可设置
rate_limit = TRUE让tidygeocoder自动处理速率限制,或手动分批处理数据避免触发限制。 - API密钥配置:确保已通过
Sys.setenv(GOOGLEGEOCODE_API_KEY = "你的密钥")在R会话中配置密钥,或直接在geocode函数的api_key参数中传入密钥字符串。
修改后,ID为1的Winchester School会被正确定位到新西兰的对应地点,所有建筑的地理编码结果都将限定在新西兰境内。
内容的提问来源于stack exchange,提问作者Negarev
相关产品推荐
相关产品推荐

