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

自行部署OSRM服务器调用osrmTable时返回res对象未找到错误如何解决

OSRM调用报错排查与解决步骤

第一步:校验入参格式合法性

  • osrmTable的第一个输入参数loc要求必须是至少包含*lon(经度)、lat(纬度)*两列的data.frame,或者是WGS84(EPSG:4326)投影的sf POINT类型空间对象,首先检查你的route对象是否符合要求:
    • 普通数据框的经纬度列名必须准确匹配lon、lat,大小写不能出错
    • 所有点位的经纬度必须在你部署OSRM时加载的地图数据覆盖范围内
  • 点位数量不要超过OSRM服务的最大查询限制,默认OSRM的table接口最多支持100个点位同时查询,超过会返回400错误,R包的异常处理逻辑未提前初始化res对象就会触发你遇到的报错。

第二步:校验OSRM服务可用性

  • 直接调用OSRM原生接口测试服务是否正常响应,替换示例坐标为你自己的点位,在浏览器或终端执行curl请求:
    http://0.0.0.0:5000/table/v1/car/116.39,39.9;116.4,39.91?annotations=duration,distance
    • 若返回404,检查OSRM启动时是否正确加载了地图数据、路径配置是否匹配car profile
    • 若返回403,检查服务是否配置了访问限制
  • 若需要查询大量点位,启动OSRM时需手动调大最大查询阈值,启动命令示例:
    osrm-routed --max-table-size 1000 your_map_file.osrm

第三步:修正R代码写法

你当前的代码参数有冗余括号,先调整为标准写法:

# 先打印str(route)确认输入格式正确
get_OSRMTable <- osrmTable(
  loc = route,
  osrm.server = "http://0.0.0.0:5000/",
  osrm.profile = "car", 
  measure = c("distance","duration")
)

如果调整后还是报错,可降级osrm包到3.5.0版本,3.6.0及之后的版本存在异常处理逻辑bug,会偶发res对象未定义问题:

remotes::install_version("osrm", version = "3.5.0")

内容的提问来源于stack exchange,提问作者Mohammadreza Mirzaei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:36:05