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

如何用R的tidytransit基于GTFS生成单条可视化公交线路?

解决GTFS路线双向路径可视化问题

针对你遇到的同一条路线显示双向路径、视觉冗余的问题,可通过以下几种方法生成单条可视化线路,同时保留完整路径(包括环路):

方法一:生成双向路径的中线(推荐)

利用lwgeom包的st_centerline()函数,将同路线的双向路径合并后生成中线,完美解决双向车道视觉重复的问题,同时保留环路完整结构。

步骤代码:

# 加载所需包(若未安装lwgeom,先运行install.packages("lwgeom"))
library(tidytransit)
library(tidyverse)
library(sf)
library(tmap)
library(lwgeom)

# 加载并处理GTFS数据
gtfs <- read_gtfs("https://www.riderta.com/sites/default/files/gtfs/latest/google_transit.zip")
gtfs_sf <- gtfs_as_sf(gtfs)
routes <- get_route_geometry(gtfs_sf)

# 按路线分组,合并双向路径并生成中线
routes_single_line <- routes %>%
  # 按唯一路线标识分组,保留路线名称信息
  group_by(route_id, route_short_name, route_long_name) %>%
  # 合并同路线的所有几何路径
  summarise(geometry = st_union(geometry), .groups = "drop") %>%
  # 生成双向路径的中线
  mutate(geometry = st_centerline(geometry))

# 可视化单条线路
tmap_mode("view")
qtm(routes_single_line)

方法二:投影后简化路径(适合无需精确中线的场景)

若不想依赖lwgeom,可先将地理坐标系(WGS84)转换为投影坐标系(如UTM,以米为单位),合并路径后简化,再转回原坐标系,减少视觉冗余。

步骤代码:

# 加载所需包
library(tidytransit)
library(tidyverse)
library(sf)
library(tmap)

# 加载并处理GTFS数据
gtfs <- read_gtfs("https://www.riderta.com/sites/default/files/gtfs/latest/google_transit.zip")
gtfs_sf <- gtfs_as_sf(gtfs)
routes <- get_route_geometry(gtfs_sf)

# 转换为UTM投影(根据数据所在区域选择对应EPSG,示例为美国德州区域的EPSG:32614)
routes_single_line <- routes %>%
  st_transform(32614) %>%
  group_by(route_id, route_short_name, route_long_name) %>%
  summarise(geometry = st_union(geometry), .groups = "drop") %>%
  # 简化路径,dTolerance为简化阈值(单位:米,数值越大简化程度越高)
  mutate(geometry = st_simplify(geometry, dTolerance = 10)) %>%
  # 转回WGS84坐标系
  st_transform(4326)

# 可视化
tmap_mode("view")
qtm(routes_single_line)

注意事项:

  • 选择UTM投影时,需根据数据所在地理位置匹配正确的EPSG代码(可通过sf::st_crs()查看原数据坐标系,再查找对应区域的UTM EPSG)。
  • dTolerance参数可根据需求调整,平衡路径简化程度与精度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:43:00