2016-02-12 2 views
0

У меня есть google protobuf file от OpenStreetMap, в частности у меня есть 1.4MB Liechtenstein country extract from Geofabrik. Команда protoc говорит, что она «записывает исходный тег/значения в stdout» с опцией --decode_raw. Однако я получаю эту ошибку:«Не удалось разобрать вход» из буфера протоколов протокола протокола protok для `` --decode_raw``

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

Я скомпилированные и установили библиотеку Protobuf прямо из Google, версия 2.6.1, которая является текущей.

Этот файл действителен, различные инструменты OpenStreetMap, которые читают файлы pbf (osm2pgsql, osmosis), могут читать его в порядке.

Что может быть неправильным? Как я могу получить --decode_raw? Я делаю что-то неправильно?

ответ

2

Формат 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)

Таким образом, вы должны прочитать четыре байта первых, интерпретировать их как целое (обратным порядком байтов), то прочитал, что много байтов и проанализируйте как BlobHeader, и это, в свою очередь, скажет вам, сколько байтов читать и анализировать как Blob.

Инструмент protoc не будет делать это автоматически, так как он не знает этот формат. Вероятно, есть специальный инструмент OSM, который вы можете использовать.

Смежные вопросы