R osmdata包查询英国OSM数据返回旧查询残留数据如何修复
问题原因
- osmdata本地缓存冲突:osmdata包默认会将历史查询结果缓存到本地临时目录,你此前查询中非共和国的admin_level=4数据未被清理,本次查询因缓存键匹配规则,直接读取了旧的中非数据,未向OSM服务器发起新的查询请求。
- getbb搜索匹配错误:
getbb('uk', format_out = 'polygon')返回的警告表明,模糊搜索uk得到了多个匹配结果,默认选取的第一个多边形并非英国本土边界,其坐标范围恰好与中非共和国区域重合,进一步导致查询范围错误。 - OSM标签巧合冲突:返回的中非数据中
ref、state_code字段被标注为UK,是OSM贡献者对中非共和国Ouaka省的标签填写错误,加剧了数据混淆的情况。
修复方案
- 先清空本地缓存的所有OSM查询数据,彻底避免旧数据干扰:
osmdata::clear_osm_cache()
- 修正边界框获取逻辑,避免模糊搜索匹配错误,优先使用完整地名+类型限定获取英国边界:
bb <- getbb( place_name = "United Kingdom", featuretype = "country", format_out = "polygon" )
如果仍返回多多边形警告,可直接手动指定英国本土的固定边界框:
# 边界框格式为c(xmin, ymin, xmax, ymax),对应英国本土经纬度范围 bb <- c(-13.6913, 49.9096, 1.7898, 60.8479)
- 发起查询时可选择禁用缓存,强制拉取最新数据:
ukbasemap <- opq(bbox = bb, timeout = 0) %>% add_osm_feature(key = 'admin_level', value = '4') %>% osmdata_sf() %>% trim_osmdata(bb)
- 查询完成后先校验数据范围,确认符合英国经纬度后再绘图:
# 打印返回数据的边界框 print(sf::st_bbox(ukbasemap$osm_multipolygons)) # 确认坐标范围为西经13°~东经2°、北纬49°~北纬61°区间后再执行绘图操作 sf::plot_sf(ukbasemap$osm_multipolygons)
内容的提问来源于stack exchange,提问作者Amy M
相关产品推荐
相关产品推荐

