提问人:Amc 提问时间:11/3/2023 最后编辑:Dave2eAmc 更新时间:11/4/2023 访问量:43
使用 R 和 OpenStreetMap (OSM) 计算两个坐标之间的步行旅行时间
Calculate the travel time on foot between two coordinates with R and OpenStreetMap (OSM)
问:
我正在尝试使用OpenStreetMap通过两个坐标计算步行时间。
我正在使用这个数据集:https://github.com/JayScribes/Geocode-Distance/blob/main/NYC%20Bike%20Share%20Data.csv
这是我的代码:
library(readr)
NYC_Bike_Share_Data <- read_csv("NYC Bike Share Data.csv")
View(NYC_Bike_Share_Data)
library(osrm)
osrm_conn <- osrm::osrmTable(profile = "foot-walking")
origen<-c(NYC_Bike_Share_Data$ss_lat,NYC_Bike_Share_Data$sslong)
destino<-c(NYC_Bike_Share_Data$es_lat,NYC_Bike_Share_Data$es_long)
duracion <- osrmTable(osrm_conn, loc = c(origen, destino))$durations[1]
输出:
Error: "loc" should be a data.frame or a matrix of coordinates, an sfc POINT object or an sf POINT object.
答:
0赞
Dave2e
11/3/2023
#1
您的定义不正确,您正在使用该函数制作向量而不是数据帧/矩阵。
此外,按照惯例,将经度列为第一列,后跟纬度。c()
注意:orsm 将调用限制为小于 1000 个点,因此您需要细分数据集。
以下应该适合您:
NYC_Bike_Share_Data <- read.csv("NYC Bike Share Data.csv")
library(osrm)
origen<-NYC_Bike_Share_Data[ ,c("ss_long", "ss_lat")]
destino<-NYC_Bike_Share_Data[ ,c("es_long", "es_lat")]
duracion <- osrmTable(src = origen, dst =destino, osrm_profile = "foot", measure = "duration")
这会产生一个矩阵,而不是每行的单个输出值。此外,矩阵是不对称的,因此从 A 到 B 与从 B 到 A 不同。我不确定这是否是意料之中的。您需要从该矩阵中提取对角线以获得最终答案。
diag(duracion$durations)
评论
0赞
Amc
11/3/2023
我对这一行“osrm_conn <- osrm::osrmTable(profile = ”foot-walking“)”有疑问。具体来说:“osrm::osrmTable(profile = ”foot-walking“) 中的错误:未使用的参数 (profile = ”foot-walking“)”
0赞
Dave2e
11/3/2023
@Amc,我不确定这是从哪里来的,但它在您的代码中.我现在删除了它,并修复了最后一行的错别字。 行为不符合预期。osrm::osrmTable(profile = "foot-walking")
orsmTable()
评论