"Не удалось проанализировать ввод" из команды protoc буферов протокола Google для ``--decode_raw``

У меня есть файл google protobuf из OpenStreetMap, в частности, у меня есть выдержка из страны Лихтенштейн объемом 1,4 МБ из Geofabrik. protoc Команда говорит, что "записать необработанный тег / значения в стандартный вывод" с --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 работать? Я делаю что-то неправильно?

1 ответ

Решение

OpenStreetMap .osm.pbf Формат не является необработанным буфером протокола. Формат задокументирован здесь:

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

Ключевая цитата:

Формат представляет собой повторяющуюся последовательность:

  • int4: длина сообщения BlobHeader в сетевом порядке байтов
  • сериализованное сообщение BlobHeader
  • сериализованное сообщение Blob (размер указан в заголовке)

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

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

Другие вопросы по тегам