使用R与OpenStreetMap计算两点步行时间时遇参数类型错误求助
解决osrm计算步行时间的"loc"参数错误
错误原因
你的代码存在两个核心问题:
- 坐标格式不符合要求:
origen和destino被构造为一维向量,合并后的c(origen, destino)也是一维结构,但osrmTable的loc参数要求是每行包含经度、纬度(注意顺序)的二维结构(数据框/矩阵),或者sf点对象。 - 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
相关产品推荐
相关产品推荐

