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

r5r生成的Travel Time Matrix未纳入公共交通耗时问题排查

问题描述

尝试使用r5r R包开展克利夫兰市超市的等时线可达性研究,步骤为:获取城市边界并生成网格质心;通过OSM获取道路网络与超市位置;导入本地GTFS公交数据后,使用travel_time_matrix生成出行时间矩阵。但输出仅得到532条结果,最大出行耗时仅29分钟,推测未纳入公共交通耗时,仅计算了步行时间。

使用代码如下:

# load required packages
library(tidycensus)
library(tidytransit)
library(tmap)
library(osmdata)
library(tidyverse)
library(osmextract)
library(tigris)
library(r5r)
library(sf)

cleveland_boundary = places("Ohio") %>% filter(NAME == "Cleveland") %>% st_transform(4326)
cleveland_grid = st_make_grid(cleveland_boundary, square = FALSE, n=c(100,100), 
                 what = "polygons") %>% st_as_sf() %>% st_filter(cleveland_boundary) %>% 
                 mutate(id = seq(1, length(cleveland_grid$geometry), by=1)) %>% st_transform(4326)
cleveland_centroids = st_centroid(cleveland_grid)

cle_file = oe_match("Cleveland, Ohio")

cle_grocery = oe_read(cle_file$url, layer = "points", quiet = TRUE) %>% 
              st_transform(crs = st_crs(cleveland_boundary)) %>% st_filter(cleveland_boundary) %>%
              rename(id = osm_id) %>% st_transform(4326)

dir.create("cle_network")
cleveland_streets = oe_read(cle_file$url, layer = "lines", quiet = TRUE, download_directory = "cle_network") %>% 
                    filter(!is.na(highway)) %>% 
                    st_transform(crs = st_crs(cleveland_boundary)) %>% st_filter(cleveland_boundary) 

options(java.parameters = "-Xmx2G") # set up r5r core
r5r_core <- setup_r5("cle_network", verbose = FALSE, overwrite = TRUE)

ttm_wkday = travel_time_matrix(r5r_core = r5r_core,
                         origins = cle_grocery,
                         destinations = cleveland_centroids,
                         mode = c("WALK", "TRANSIT"),
                         departure_datetime = as.POSIXct("08-12-2022 14:00:00", format = "%d-%m-%Y %H:%M:%S"),
                         max_walk_dist = 1000,
                         max_trip_duration = 480,
                         verbose = FALSE)

注:已将GTFS数据保存为CLEgtfs.zip,但存放目录为cle_networks(与代码中cle_network目录不一致)。

原因分析与解决方法

核心原因

  1. GTFS文件未被r5r加载:代码中setup_r5指向的目录是cle_network,但GTFS文件存放在cle_networks,路径不匹配,导致r5r未读取到公交数据,仅基于步行网络计算时间。
  2. OSM数据格式错误:r5r需要完整的OSM PBF文件,而非手动提取的lines层数据,当前代码仅提取了道路线要素,无法被r5r用于构建完整的交通网络。
  3. 内存分配不足:处理公交网络需要更大的Java内存,当前-Xmx2G可能不足以加载完整的GTFS和OSM数据。

解决步骤

  • 统一文件存放路径:将CLEgtfs.zip移动到cle_network目录下,确保setup_r5指向的目录同时包含OSM PBF文件和GTFS压缩包。
  • 重新获取完整OSM PBF文件:删除手动提取道路的代码,直接下载完整的OSM PBF文件到cle_network目录:
    # 下载完整OSM PBF文件到cle_network目录
    oe_download(cle_file$url, download_directory = "cle_network", quiet = TRUE)
    
  • 调整Java内存分配:增大内存配额,建议设置为-Xmx4G或更高:
    options(java.parameters = "-Xmx4G")
    
  • 开启调试模式验证加载状态:将setup_r5和travel_time_matrix的verbose参数设为TRUE,查看日志确认GTFS和OSM是否被成功加载:
    r5r_core <- setup_r5("cle_network", verbose = TRUE, overwrite = TRUE)
    
    ttm_wkday = travel_time_matrix(r5r_core = r5r_core,
                             origins = cle_grocery,
                             destinations = cleveland_centroids,
                             mode = c("WALK", "TRANSIT"),
                             departure_datetime = as.POSIXct("08-12-2022 14:00:00", format = "%d-%m-%Y %H:%M:%S"),
                             max_walk_dist = 1000,
                             max_trip_duration = 480,
                             verbose = TRUE)
    
  • 验证GTFS文件有效性:使用tidytransit检查GTFS文件是否可正常读取,确认时刻表数据完整:
    gtfs <- read_gtfs("cle_network/CLEgtfs.zip")
    # 查看线路数量
    nrow(gtfs$routes)
    # 查看指定时间的公交班次
    gtfs_sched <- tidytransit::filter_feed_by_date(gtfs, as.Date("2022-12-08"))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:05:23