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

在R环境中调用OSRM API执行curl命令出现语法错误求助

问题排查与解决方案

错误原因

你直接在R中写curl 'xxx'是终端(如bash)的命令语法,不是R的合法代码:

  • R会把curl识别为未定义的函数,后续的字符串写法也不符合R的语法规则,因此抛出unexpected string constant错误。
  • 另外,osmdata包用于获取OpenStreetMap的地图数据(如POI、道路图层),和你要调用的OSRM路由API无关,无需加载。

正确实现方式

方式1:使用RCurl包(你已加载的包)

用RCurl提供的HTTP请求函数替代终端curl命令:

library(RCurl)
library(jsonlite) # 用于解析JSON响应

# 构造请求URL
request_url <- "http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407?exclude=motorway"
# 发送GET请求
response <- getURL(request_url)
# 解析JSON格式的响应结果
result <- fromJSON(response)
# 查看结果
print(result)

方式2:使用httr包(更现代、推荐)

httr包是R中处理HTTP请求的主流工具,语法更直观:

library(httr)
library(jsonlite)

# 定义基础URL和查询参数
base_url <- "http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407"
# 发送带查询参数的GET请求
response <- GET(base_url, query = list(exclude = "motorway"))
# 检查请求是否成功(失败则抛出错误)
stop_for_status(response)
# 解析响应结果
result <- content(response, "parsed")
# 查看结果
print(result)

补充:如果一定要调用终端curl命令

若想直接执行终端的curl命令,可使用R的system()函数:

# 注意R中字符串用双引号,内部的引号用转义符
system("curl 'http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407?exclude=motorway'")

但这种方式需要你的系统已安装curl,且返回的是原始文本,解析不如R原生HTTP包方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:54:04