"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 Geofabrik。 protoc
命令用 --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 的工具可供您使用。
我有一个google protobuf file from OpenStreetMap, specifically I have the 1.4MB Liechtenstein country extract from Geofabrik。 protoc
命令用 --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 的工具可供您使用。