"无法解析输入"来自Google协议的缓冲区用于``--decode_raw``的protoc命令

时间:2016-02-12 15:04:53

标签: protocol-buffers protoc

我有一个来自google protobuf fileOpenStreetMap,具体来说我有1.4MB Liechtenstein country extract from Geofabrikprotoc命令表示"将原始标记/值写入stdout"使用--decode_raw选项。但是我一直收到这个错误:

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

我已经直接从Google编译并安装了protobuf库,版本2.6.1是当前版本。

此文件有效,读取pbf文件(osm2pgsqlosmosis)的各种OpenStreetMap工具可以正常读取。

可能有什么不对?如何让--decode_raw工作?我做错了吗?

1 个答案:

答案 0 :(得分:2)

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

http://wiki.openstreetmap.org/wiki/PBF_Format

关键报价:

  

格式是重复序列:

     
      
  • int4:网络字节顺序中BlobHeader消息的长度
  •   
  • 序列化BlobHeader消息
  •   
  • 序列化的Blob消息(标题中给出了大小)
  •   

所以你需要首先读取四个字节,将它们解释为整数(big-endian),然后读取那么多字节并解析为BlobHeader,然后又会告诉你要读取多少字节并解析为Blob

protoc工具不会自动执行此操作,因为它不知道此格式。可能有一个OSM专用工具可以使用。