在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
相关产品推荐
相关产品推荐

