使用 R 和 OpenStreetMap (OSM) 计算两个坐标之间的步行旅行时间

Calculate the travel time on foot between two coordinates with R and OpenStreetMap (OSM)

提问人:Amc 提问时间:11/3/2023 最后编辑:Dave2eAmc 更新时间:11/4/2023 访问量:43

问:

我正在尝试使用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.
R OpenStreetMap 距离 OSRM

评论


答:

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()