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

如何在GTFS中过滤含Belbus标识的公交线路?

精准过滤De Lijn GTFS数据中的Belbus线路方法

你的核心问题是只删除routes.txt中的Belbus条目无效——因为ArcGIS计算站点频率时会读取trips.txt、stop_times.txt等关联文件里的班次数据,必须全链路过滤所有关联的Belbus记录才行。以下是两种可行的精准过滤方案:


方案一:用gtfstools(R语言)实现全链路过滤

直接基于route_long_name/route_desc的关键词筛选,同时自动关联过滤所有依赖文件:

library(gtfstools)

# 读取原始GTFS压缩包
gtfs_raw <- read_gtfs("your_de_lijn_gtfs.zip")

# 筛选出不含"Belbus"的线路(忽略大小写匹配)
valid_routes <- gtfs_raw$routes %>%
  filter(
    !grepl("Belbus", route_long_name, ignore.case = TRUE),
    !grepl("Belbus", route_desc, ignore.case = TRUE)
  )

# 用有效线路ID过滤整个GTFS对象(自动处理trips、stop_times等关联文件)
gtfs_filtered <- filter_gtfs(gtfs_raw, routes = valid_routes$route_id)

# 保存过滤后的GTFS文件
write_gtfs(gtfs_filtered, "filtered_de_lijn_gtfs.zip")

方案二:用Python Pandas手动处理(适合非R用户)

解压GTFS后逐文件筛选,确保所有关联数据都被清理:

import pandas as pd
import zipfile
import os
from tempfile import TemporaryDirectory

# 临时目录处理GTFS文件
with TemporaryDirectory() as tmp_dir:
    # 解压原始GTFS
    with zipfile.ZipFile("your_de_lijn_gtfs.zip", "r") as zip_ref:
        zip_ref.extractall(tmp_dir)
    
    # 1. 筛选有效线路ID(排除含Belbus的条目)
    routes = pd.read_csv(os.path.join(tmp_dir, "routes.txt"), dtype=str)
    valid_route_ids = routes[
        ~(routes["route_long_name"].str.contains("Belbus", case=False, na=False) |
          routes["route_desc"].str.contains("Belbus", case=False, na=False))
    ]["route_id"].tolist()
    
    # 2. 过滤trips.txt:只保留有效线路的班次
    trips = pd.read_csv(os.path.join(tmp_dir, "trips.txt"), dtype=str)
    trips_filtered = trips[trips["route_id"].isin(valid_route_ids)]
    trips_filtered.to_csv(os.path.join(tmp_dir, "trips.txt"), index=False)
    
    # 3. 过滤stop_times.txt:只保留有效班次的站点记录
    stop_times = pd.read_csv(os.path.join(tmp_dir, "stop_times.txt"), dtype=str)
    valid_trip_ids = trips_filtered["trip_id"].tolist()
    stop_times_filtered = stop_times[stop_times["trip_id"].isin(valid_trip_ids)]
    stop_times_filtered.to_csv(os.path.join(tmp_dir, "stop_times.txt"), index=False)
    
    # 4. 重新打包过滤后的GTFS
    with zipfile.ZipFile("filtered_de_lijn_gtfs.zip", "w", zipfile.ZIP_DEFLATED) as zip_out:
        for file in os.listdir(tmp_dir):
            if file.endswith(".txt"):
                zip_out.write(os.path.join(tmp_dir, file), file)

关键注意事项

  • 必须开启忽略大小写匹配,避免遗漏小写的belbus条目
  • 如果你的GTFS包含frequencies.txt文件,需要参照stop_times.txt的逻辑,用有效trip_id过滤后再保存
  • 过滤后可打开routes.txt和trips.txt验证:确认无Belbus相关条目,且trips.txt的route_id全部属于有效线路

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:05:10