2

我有一个来自OpenStreetMap的google protobuf 文件,特别是我有来自 Geofabrik 的 1.4MB Liechtenstein country extract。该命令说它使用选项“将原始标签/值写入标准输出”。但是我不断收到此错误:protoc--decode_raw

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

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

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

有什么问题?我怎么--decode_raw去上班?难道我做错了什么?

4

1 回答 1

3

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

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

关键报价:

格式是一个重复序列:

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

因此,您需要先读取四个字节,将它们解释为整数(大端序),然后读取那么多字节并解析为 a BlobHeader,然后依次告诉您要读取多少字节并将其解析为 a Blob

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

于 2016-02-13T19:15:49.530 回答