我正在尝试从一组GTFS文件中获取传输服务的路径。 trips.txt文件实际上显示了时间表相乘的路径,因此每条路径都有许多行 GTFS documentation。 我怎样才能获得独特的路径之旅,尤其是停靠点的独特链接?
答案 0 :(得分:1)
通过“路径”,我假设您指的是GTFS中的用语是形状:现实世界中运输工具所遵循的物理路径。
对于形状的唯一行程列表(假设您在关系数据库中加载了GTFS数据),您只需要这样的查询:
SELECT * FROM trips WHERE shape_id = <shape_id>;
请注意,您可能需要另外按service_id
进行过滤,以生成工作日仅限旅行的列表。
生成形状的停靠列表更难,因为GTFS中的形状和停止之间没有直接关系。相反,止损与个别旅行相关联,stop_times
表提供关联(参见my answer to "How can I list all the stops associated with a route using GTFS?")。一旦您选择了感兴趣的旅行,您可以按顺序获取其访问的停靠点列表,并使用以下查询:
SELECT DISTINCT stop_id, code, name
FROM stop_times
INNER JOIN stops ON stops.id = stop_times.stop_id
WHERE trip_id = <trip_id>
ORDER BY stop_sequence;
但我怀疑这不是你想要的。我怀疑你在想(根据你作为过境骑手的经验),每条过境路线应该只有少数不同的“路径”,你应该能够获得这么少的路径,比方说,为每个人自动生成一张地图,并清楚地显示停靠点。不幸的是,这与运输系统在实践中的工作方式或它们由GTFS建模的方式不一致。
要做我认为你想做的事,你必须
获取相关路线的行程列表(来自trips.txt
)。
从此列表中,应用启发式方法来确定哪些行程在转接用户心目中是等效的 - 跟随相同“路径”(形状)的行程,沿同一方向行进,访问相同或相似的一组止损以相同的顺序运行,并在同一天(从calendar.txt
)运行,例如 - 和组等同的行程一起进入水桶。
对于每批等效行程,根据需要生成一系列停靠点以及地图,时间表或说明。
请注意,一般你可以使用旅程的标题来确定它所遵循的路线的哪个分支,以及它将采取的路径以及它将访问的停靠点。但我不认为这是完全可靠的;你必须检查你的数据,看看你是否可以用这种方式可靠地分组旅行。
答案 1 :(得分:0)
鉴于形状不可用,我最终通过使用相同的公共汽车和目的地去除任何第二次旅行,将旅行分配到公共汽车和目的地。当我加载stop_times时,我会在插入之前检查该行是否存在。我希望网上还有一些东西......