"Не удалось проанализировать ввод" из команды 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, который вы можете использовать.