"Failed to parse input" 来自 Google protocol buffers ``--decode_raw`` 协议命令

"Failed to parse input" from Google protocol buffers protoc command for ``--decode_raw``

我有一个google protobuf file from OpenStreetMap, specifically I have the 1.4MB Liechtenstein country extract from Geofabrikprotoc 命令用 --decode_raw 选项表示 "write the raw tag/values to stdout"。但是我不断收到此错误:

$ cat liechtenstein-latest.osm.pbf | protoc --decode_raw
Failed to parse input.

我直接从 Google 版本 2.6.1 编译并安装了 protobuf 库。

这个文件是有效的,各种读取pbf文件的OpenStreetMap工具(osm2pgsql, osmosis)都可以很好地读取它。

有什么问题吗?我怎样才能让 --decode_raw 工作?我做错了什么吗?

OpenStreetMap .osm.pbf 格式不是 原始协议缓冲区。格式记录在此处:

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)

所以你需要先读取四个字节,将它们解释为一个整数(big-endian),然后读取那么多字节并解析为 BlobHeader,这反过来会告诉你有多少字节读取和解析为 Blob.

protoc 工具不会自动执行此操作,因为它不知道这种格式。可能有一个特定于 OSM 的工具可供您使用。