You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R osmdata包查询英国OSM数据返回旧查询残留数据如何修复

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

内容的提问来源于stack exchange,提问作者Amy M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:15:05