使用Google GTFS获取独特的路线

时间:2015-08-18 09:58:37

标签: gtfs

我正在尝试从一组GTFS文件中获取传输服务的路径。 trips.txt文件实际上显示了时间表相乘的路径,因此每条路径都有许多行 GTFS documentation。 我怎样才能获得独特的路径之旅,尤其是停靠点的独特链接?

2 个答案:

答案 0 :(得分:1)

通过“路径”,我假设您指的是GTFS中的用语是形状:现实世界中运输工具所遵循的物理路径。

对于形状的唯一行程列表(假设您在关系数据库中加载了GT​​FS数据),您只需要这样的查询:

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时,我会在插入之前检查该行是否存在。我希望网上还有一些东西......