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

使用R的osmar包下载OSM数据时出现XML解析错误求助

解决osmar包下载OSM数据时的XML解析错误

我之前也碰到过一模一样的错误,这些XML标签不匹配的报错说明你的请求没有拿到预期的OSM地理数据,反而收到了网页错误内容,大概率和OSM API的访问规则或者网络连接有关,给你几个可行的排查和解决步骤:

1. 给请求添加合法的User-Agent标识

OSM公共API要求请求必须附带明确的User-Agent,用来识别请求来源,没有这个标识很容易被服务器拦截或返回错误页面。你可以在get_osm里加上这个参数:

library(osmar)
src <- osmsource_api()
bb <- center_bbox(174.76778, -36.85056, 700, 700)
# 替换成你的名称和邮箱,方便OSM团队联系(如果需要)
ua <- get_osm(bb, source = src, user_agent = "YourName/1.0 (your.email@example.com)")

2. 检查OSM API的访问限制

OSM公共API有请求频率限制(默认每分钟最多60次请求),如果短时间内重复请求,可能会被临时封禁。可以先暂停10-15分钟再尝试,或者改用OSM的官方API端点,明确指定完整URL:

src <- osmsource_api(url = "https://api.openstreetmap.org/api/0.6/map")

3. 排查网络连接问题

  • 先手动验证你的bbox对应的API链接是否能正常访问:把center_bbox生成的范围转换成OSM API支持的bbox格式(比如计算后大概是174.762, -36.855, 174.773, -36.846),在浏览器打开对应链接,若能看到XML内容,说明网络本身没问题;若无法访问,可能需要检查代理或防火墙设置,在R中配置代理的代码示例:
# 替换为你的代理地址和端口
Sys.setenv(http_proxy = "http://your.proxy.address:port", 
           https_proxy = "http://your.proxy.address:port")

4. 考虑换用更现代的osmdata包

osmar包已经很久没有更新,社区现在更推荐使用osmdata包,它对OSM API的支持更稳定、功能更灵活,实现相同需求的代码示例:

library(osmdata)
# 生成范围相同的bbox
bb <- getbb(center = c(174.76778, -36.85056), dist = 700)
# 下载该范围内的所有OSM要素(可通过add_osm_feature筛选特定类型)
osm_data <- opq(bbox = bb) %>% 
  add_osm_feature() %>% 
  osmdata_sf()
# 查看结果
osm_data

内容的提问来源于stack exchange,提问作者La Cordillera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:01