我有一个来自google protobuf file的OpenStreetMap,具体来说我有1.4MB Liechtenstein country extract from Geofabrik。 protoc
命令表示"将原始标记/值写入stdout"使用--decode_raw
选项。但是我一直收到这个错误:
$ cat liechtenstein-latest.osm.pbf | protoc --decode_raw
Failed to parse input.
我已经直接从Google编译并安装了protobuf库,版本2.6.1是当前版本。
此文件有效,读取pbf文件(osm2pgsql,osmosis)的各种OpenStreetMap工具可以正常读取。
可能有什么不对?如何让--decode_raw
工作?我做错了吗?
答案 0 :(得分:2)
OpenStreetMap .osm.pbf
格式不是原始协议缓冲区。格式记录在这里:
http://wiki.openstreetmap.org/wiki/PBF_Format
关键报价:
格式是重复序列:
- int4:网络字节顺序中BlobHeader消息的长度
- 序列化BlobHeader消息
- 序列化的Blob消息(标题中给出了大小)
所以你需要首先读取四个字节,将它们解释为整数(big-endian),然后读取那么多字节并解析为BlobHeader
,然后又会告诉你要读取多少字节并解析为Blob
。
protoc
工具不会自动执行此操作,因为它不知道此格式。可能有一个OSM专用工具可以使用。