【问题标题】:GTFS Real Time Data: How to Convert Feed Message Print to Terminal to GTFSGTFS 实时数据:如何将 Feed 消息打印到终端转换为 GTFS
【发布时间】:2017-04-10 00:57:16
【问题描述】:

我已按照此链接中的示例进行操作

Parsing NYC Transit/MTA historical GTFS data (not realtime)

它抓取历史 GTFS 实时数据馈送,然后使用 python 语言绑定将 gtfs_rt.FeedMessage 输出到终端。

在我将它打印到终端后,我完全不知道下一步该做什么。 我一直在尝试找到一种方法来读取终端输出,然后希望将提要消息转换为 JSON 格式?理想情况下,我希望它能够与静态数据的 GTFS 数据格式相媲美,以便我可以计算延迟时间等。

谢谢!

【问题讨论】:

    标签: python gtfs


    【解决方案1】:

    具体答案取决于您要对 Feed 执行的操作。但总的来说,您有两种选择。

    第一个选项是直接解析 FeedMessage 对象。通用的 Python protobuf 参考 here 会对你有用,GTFS-rt 的具体协议是here。例如,解析消息后,您可以像这样获取 Feed 中所有行程的车辆 ID 和行程 ID:

    for feed_entity in msg.entity:
        if feed_entity.hasField('trip_update'):
            tu = feed_entity.trip_update
            vid = tu.vehicle.vehicle.id
            tid = tu.trip.trip_id
            print "vehicle {} is covering trip {}".format(vid, tid)
    

    但这完全取决于您想从提要中获得什么。如果您对延迟感兴趣,您可能会解析 StopTimeUpdate 对象(但请注意,如果车辆已经到达/离开停靠点,这些对象可能包含过去/当前的实际延迟,或者未来预计的延迟以供以后停止路线)。

    如果您更喜欢使用 dicts 而不是直接使用 protobuf 消息,我已经成功使用项目 protobuf-to-dict(请参阅here),它可以通过 pip 安装。我通常发现在 Python 中使用 dicts 比使用 protobuf 对象更自然。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      相关资源
      最近更新 更多