R5r包能否在多模式网络中纳入缆车?求解实现方法
解决R5r未纳入波哥大缆车线路的问题
1. 确认GTFS中缆车的route_type标识
先检查GTFS的routes表,确认缆车线路的route_type值。GTFS规范中缆车(Gondola Lift)对应类型为11,但部分本地数据集可能使用自定义值。用R验证:
library(data.table) routes <- fread("your_gtfs_directory/routes.txt") # 筛选含缆车关键词的线路(适配波哥大本地术语) gondola_routes <- routes[grepl("gondola|cable|teleférico", route_long_name, ignore.case = TRUE)] print(gondola_routes[, .(route_id, route_type, route_long_name)])
2. 显式指定Transit模式包含缆车
R5r默认的WALK+TRANSIT模式可能未自动包含缆车,需在计算时显式声明transit_modes参数:
library(r5r) # 初始化R5核心 r5_core <- setup_r5(data_path = "your_gtfs_directory", verbose = FALSE) # 计算出行时间矩阵时指定包含缆车 travel_times <- travel_time_matrix( r5_core = r5_core, origins = your_origins_df, destinations = your_destinations_df, mode = c("WALK", "TRANSIT"), transit_modes = c("BUS", "RAIL", "GONDOLA"), # 加入GONDOLA类型 departure_datetime = as.POSIXct("2024-05-20 07:00:00", tz = "America/Bogota"), max_trip_duration = 120 )
transit_modes支持的取值包括BUS、RAIL、SUBWAY、TRAM、FERRY、GONDOLA,需匹配线路的实际类型映射。
3. 修复非标准route_type(若需)
如果你的GTFS中缆车的route_type不是标准的11,R5无法自动识别为缆车模式,需修改routes.txt:
# 将目标线路的route_type改为标准值11 routes[route_id %in% gondola_routes$route_id, route_type := 11] # 保存修改后的文件 fwrite(routes, "your_modified_gtfs/routes.txt")
之后用修改后的GTFS重新初始化R5网络。
4. 验证缆车是否成功纳入
构建网络后,可通过以下代码确认缆车线路已被加载:
# 提取网络中的公交模式线路 transit_routes <- r5_core$transit_routes # 筛选缆车线路 gondola_in_network <- transit_routes[mode == "GONDOLA"] print(gondola_in_network)
若输出包含目标缆车线路,说明已成功纳入多模式网络。
内容的提问来源于stack exchange,提问作者Santiago Cardona Urrea
相关产品推荐
相关产品推荐

