gpt4 book ai didi

python - GTFS - 如何结合 Protocol Buffer 和 GTFS 文件?

转载 作者:行者123 更新时间:2023-11-28 17:38:39 25 4
gpt4 key购买 nike

我正在尝试查看 New York City Subway Realtime GTFS Feeds .经过大量阅读,我了解了 Protocol Buffers并安装了 protoc编译器。

纽约市交通局有文件 nyct-subway.proto.txt 第一行是 GTFS 实时协议(protocol)的 NYCT 地铁扩展。这应该与 gtfs-realtime-proto 结合使用吗? ?我分别编译了两个 Protocol Buffer 并得到了警告:

[libprotobuf WARNING google/protobuf/compiler/parser.cc:471] 
No syntax specified for the proto file.
Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)

在 Python 中写了一行来调用任何库 protoc已创建:

import gtfs_realtime_pb2, nyct_subway_pb2

尽管我之前进行了安装工作,但 Python 对 import google.protobuf 一无所知就是这样sudo pip install protobuf .

此时我仍然没有读取任何数据——我可以用 http://datamine.mta.info/mta_esi.php?key=<key>&feed_id=1 得到一个 gtfs 文件这是不可读的。

我如何结合它来从 GTFS 文件中读取数据?

最佳答案

为了进一步澄清 Jamie 的评论,您应该可以这样做:

import urllib2
import gtfs_realtime_pb2, nyct_subway_pb2

...

// initialize the feed parser
feed = gtfs_realtime_pb2.FeedMessage()

// fetch the raw gtfs-realtime feed
gtfs_raw = urllib2.urlopen("http://datamine.mta.info/mta_esi.php?key=<key>&feed_id=1").read()

// parse the raw feed
feed.ParseFromString(gtfs_raw)

// access the data structure as needed
print feed.header.timestamp
print feed.header.gtfs_realtime_version

for entity in feed.entity:
// etc.

替代方法(命令行 + JSON)

就我个人而言,我认为 Protocol Buffer 和 gtfs-realtime 可能会很麻烦。为了跳过这项工作,我编写了一个独立的工具来将 GTFS-realtime 转换为 JSON:
https://github.com/harrytruong/gtfs_realtime_json

只需下载(无需安装),然后运行:gtfs_realtime_json <feed_url>

这是一个示例 JSON output .

关于python - GTFS - 如何结合 Protocol Buffer 和 GTFS 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27531172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com