如何在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
相关产品推荐
相关产品推荐

