我有一个 google protobuf file来自 OpenStreetMap ,特别是我有 1.4MB Liechtenstein country extract from Geofabrik . protoc
命令表示它使用 --decode_raw
选项“将原始标记/值写入标准输出”。但是我不断收到此错误:
$ cat liechtenstein-latest.osm.pbf | protoc --decode_raw
Failed to parse input.
我已经直接从 Google 编译并安装了 protobuf 库,当前版本为 2.6.1。
这个文件是有效的,各种读取 pbf 文件的 OpenStreetMap 工具( osm2pgsql , osmosis )都可以很好地读取它。
有什么问题吗?我怎样才能让 --decode_raw
工作?我做错了什么吗?
最佳答案
OpenStreetMap .osm.pbf
格式不是原始 Protocol Buffer 。格式记录在此处:
http://wiki.openstreetmap.org/wiki/PBF_Format
关键引述:
The format is a repeating sequence of:
- int4: length of the BlobHeader message in network byte order
- serialized BlobHeader message
- serialized Blob message (size is given in the header)
所以你需要先读取四个字节,将它们解释为整数(大端),然后读取那么多字节并解析为 BlobHeader
,然后它会告诉你有多少作为 Blob
读取和解析的字节。
protoc
工具不会自动执行此操作,因为它不知道这种格式。可能有一个特定于 OSM 的工具可供您使用。
关于protocol-buffers - "Failed to parse input"来自 Google protocol buffers `` 的 protoc 命令 --decode_raw ``,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365794/