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

使用R与OpenStreetMap计算两点步行时间时遇参数类型错误求助

解决osrm计算步行时间的"loc"参数错误

错误原因

你的代码存在两个核心问题:

  1. 坐标格式不符合要求:origen和destino被构造为一维向量,合并后的c(origen, destino)也是一维结构,但osrmTable的loc参数要求是每行包含经度、纬度(注意顺序)的二维结构(数据框/矩阵),或者sf点对象。
  2. osrmTable调用方式错误:无需提前创建osrm_conn对象,直接传入参数即可。

修正后的代码

# 加载所需包
library(readr)
library(osrm)

# 读取数据集
NYC_Bike_Share_Data <- read_csv("NYC Bike Share Data.csv")

# 构造符合要求的起点/终点坐标(osrm要求经度在前,纬度在后)
origins <- data.frame(
  lon = NYC_Bike_Share_Data$sslong,
  lat = NYC_Bike_Share_Data$ss_lat
)

destinations <- data.frame(
  lon = NYC_Bike_Share_Data$es_long,
  lat = NYC_Bike_Share_Data$es_lat
)

# 合并所有坐标点,指定起点和终点索引计算对应步行时间
all_locs <- rbind(origins, destinations)
n <- nrow(NYC_Bike_Share_Data)

duration_result <- osrmTable(
  loc = all_locs,
  profile = "foot-walking",
  src = 1:n,  # 前n行是起点
  dst = (n+1):(2*n)  # 后n行是对应终点
)

# 提取每行数据的起点到对应终点的步行时间
duracion <- diag(duration_result$durations)

关键说明

  • 坐标顺序:osrm遵循GIS标准,必须按**经度(lon)→纬度(lat)**的顺序存储坐标,颠倒顺序会导致定位错误或计算失败。
  • loc参数规范:必须用数据框、矩阵或sf点对象存储坐标,每行代表一个地理位置点。
  • 高效计算:通过src和dst参数指定要计算的起点/终点索引,避免生成全量时间矩阵,节省计算资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:42:56