Osm pbf, чем открыть
Обновлено: 21.11.2024
OpenStreetMap – это открытая/совместная карта, которая считается картографической Википедией. Есть тонны информации, доступные в Интернете, и даже книги об этом… в любом случае, мы будем обсуждать здесь не историю OSM, а скорее взглянем на впечатляющий набор данных и на то, как такая большая карта может быть проанализирована с помощью современных технологий, таких как Апач Спарк.
Краткая анатомия OpenStreetMap
Одна из причин, по которой OSM добилась того, что есть сейчас, – это довольно простая модель данных. Существует только три типа объектов:
- узлы: точка на карте с географической привязкой
- пути: дороги, контуры зданий, границы (наборы узлов),…
- отношения: автомагистрали (множественные пути), школы (контуры зданий), …
Каждому объекту можно присвоить тег (например, путь, помеченный тегом шоссе=жилой, означает, что это дорога, а тип дороги – жилой).
Также сохраняется метаинформация о том, кто и когда добавил каждый объект.
Насколько велика OpenStreetMap на самом деле?
- XML ~ около 53 ГБ
- PBF ~ около 34 ГБ
Посмотрите статистику OSM, если вам интересно, как карта меняется каждый день.
Готовы ли большие данные OpenStreetMap?
Когда я впервые начал работать с OpenStreetMap (середина 2015 г.), я был немного заинтригован, увидев, как люди ждут часы или даже дни, чтобы импортировать часть OSM в PostgreSQL на огромные машины. Но я сказал ОК… это не большие данные.
Тем временем я начал работать над различными геопространственными анализами с использованием технологий из стека больших данных, где использовался OSM, и я снова был заинтригован, поскольку обычным способом обработки данных OSM было запустить осмос над огромной планетой PBF. файл и дамп некоторых файлов CSV для различных сценариев. Даже если это и работает, то неоптимально, и это заставило меня написать конвертер в Parquet.
Мы надеемся, что это сделает ценную работу многих участников OSM доступной для мира больших данных.
Насколько быстро происходит конверсия?
Меньше минуты для romania-latest.osm.pbf и ~3 часа (на приличном ноутбуке с SSD) для planet-latest.osm.pbf.
Если вам интересно, как выглядят эти файлы Parquet и как вы можете запрашивать их с помощью Spark SQL, взгляните на эту записную книжку Databricks.
OpenStreetMap использует несколько разных типов файлов, содержащих разные типы данных, и использует разные форматы для «кодирования» этих данных в биты и байты на вашем диске.
В этом руководстве дается обзор различных форматов файлов и кодировок, а также объясняется, что у них общего и в чем их различия. Он был написан для пользователей библиотеки Libosmium или любого из инструментов, созданных на основе этой библиотеки, но полезен и помимо этого.
Если вы являетесь пользователем Osmium, прочтите это в первую очередь, чтобы получить обзор файлов OSM, возможно, вместе с Руководством по концепциям Osmium. После того, как вы усвоите изложенную здесь информацию, вы сможете прочитать подробности в другой документации.
Просмотр содержимого файла OSM
Если у вас есть файл OSM и вы хотите быстро просмотреть его содержимое, инструмент командной строки osmium вам в помощь.
Используйте команду fileinfo, чтобы получить краткий обзор файла. Это будет читать только метаданные, доступные из файловой системы, и заголовок файла, поэтому это очень быстро:
Используйте параметр -e, чтобы получить дополнительную информацию о содержимом файла. Это фактически прочитает весь файл и даст вам некоторую статистику и т. д.
Если вы хотите просмотреть фактическое содержимое, используйте команду show:
Он преобразует файл в формат DEBUG и направит результат в вашу любимую программу пейджера.
OSM использует три типа файлов для своих основных данных:
Файлы данных Это наиболее распространенные файлы, содержащие данные OSM в определенный момент времени. Это может быть либо файл планеты, содержащий все данные OSM, либо какой-то экстракт. В этом файле содержится не более одной версии каждого объекта (узла, пути или отношения). Удаленных объектов нет в этом файле. Обычно используется суффикс .osm . Файлы истории Эти файлы содержат не только текущую версию объекта, но и его историю. Таким образом, для любого объекта (узла, пути или отношения) в этом файле может быть ноль или более версий. Удаленные объекты также могут находиться в этом файле. Обычно используется суффикс .osm или .osh . Из-за того, что иногда используется тот же суффикс, что и для обычных файлов данных (.osm), и из-за того, что в заголовке нет четкого индикатора, не всегда ясно, какой тип файла перед вами. Файлы изменений Иногда называемые diff-файлами или replication diffs, эти файлы содержат изменения между одним состоянием базы данных OSM и другим состоянием. Файлы изменений могут содержать несколько версий объекта. Обычно используется суффикс .osc .
Общим для всех этих файлов является то, что они содержат объекты OSM (узлы, пути и связи).Файлы истории и файлы изменений могут содержать несколько версий одного и того же объекта, а также удаленные объекты, файлы данных — нет.
Osmium одинаково обрабатывает все эти файлы. Он знает о различных способах форматирования этих файлов, но семантически все эти файлы создают одни и те же внутренние объекты. Единственное отличие состоит в том, что видимый флаг на объектах OSM всегда истинен для файлов данных, но не для файлов истории и изменений.
(Обратите внимание, что это отличается от того, как Osmosis обрабатывает эти файлы: Osmosis различает «потоки сущностей» и «потоки изменений».)
В файлах изменений XML каждый объект находится в разделе с именем , или . При чтении файлов изменений Osmium выдает вам обычные объекты OSM и устанавливает флаг видимости false для объектов в разделах. При записи объектов OSM в файлы изменений удаленные объекты помечаются так, а все остальные объекты либо помечаются так, как будто их версия равна 1, либо если их версия больше 1. (Это технически правильно, потому что в OSM все объекты создаются в версия 1 и все другие версии обязательно являются модификациями этой первой версии. Другое программное обеспечение интерпретирует детали по-разному и использует создание/изменение в несколько иных обстоятельствах.Любое программное обеспечение, использующее файлы изменений, должно в любом случае обрабатывать оба случая (создание/изменение), поэтому это не должно разницы нет.)
Вы также можете увидеть файл изменений как частичный файл истории в странном формате.
А еще есть файлы наборов изменений. Они содержат не объекты OSM, а наборы изменений. Некоторые файлы наборов изменений содержат комментарии обсуждения вместе с наборами изменений, некоторые файлы не имеют комментариев (однако атрибут num_comments всегда установлен). Файлы наборов изменений можно объединять с файлами данных или истории OSM в один. Таким образом, может быть один файл, содержащий как объекты OSM, так и наборы изменений.
Не путайте «файлы изменений» и «файлы наборов изменений», это совершенно разные понятия. «Файлы изменений» содержат новые версии объектов OSM и таким образом описывают изменения. «Файлы наборов изменений» содержат наборы изменений, содержащие метаданные изменений.
Хотя Osmium сам по себе в основном не зависит от типа файла, приложения, созданные на основе Osmium, обычно обрабатывают только определенные типы файлов для своих вариантов использования.
Существует несколько различных форматов файлов OSM. Форматы файлов описывают способ кодирования содержимого в битах и байтах на диске или в сети. Osmium может читать и записывать большинство этих форматов. Вот краткий обзор, в следующих главах будет более подробная информация.
Подробнее см. ниже.
Сжатие
Файлы в текстовых форматах (XML, OPL, Debug) можно дополнительно сжать с помощью gzip или bzip2 .
Osmium сделает это самостоятельно. Просто используйте правильный суффикс имени файла (например, .osm.gz или .opl.bz2), чтобы это работало.
Порядок объектов в файлах
Все файлы OSM могут иметь объекты, которые они содержат, в любом порядке. Это не зависит от типа или формата файла. Обычно объекты сортируются определенным образом, но то, сортируются ли объекты или нет и каким образом, не является частью самого формата файла.
Когда вы говорите Osmium прочитать файл, он всегда выдает вам сущности в том порядке, в котором они находятся в файле. И когда вы записываете в файл, вы передаете сущности Осмиуму в определенном порядке, и они окажутся в файле в этом порядке. Чтобы быть последовательным и эффективным, Osmium ничего не заказывает для вас. Если бы он навязывал какой-то порядок, ему, возможно, пришлось бы выполнять дополнительную работу, которая вам может быть не нужна или не нужна.
При всем при этом файлы OSM почти всегда упорядочены определенным образом: сначала узлы, затем пути, затем отношения. Каждая группа упорядочена по возрастанию идентификатора (и версии по возрастанию в файлах истории). Файлы наборов изменений обычно упорядочены по идентификатору набора изменений.
Если вы пишете программное обеспечение, построенное на Osmium, вы должны решить, налагаете ли вы какие-либо ограничения на внутренний порядок входных файлов и хотите ли вы гарантировать какой-либо порядок при записи файлов. В основном это связано с производительностью и простотой программирования. С упорядоченными файлами часто проще и быстрее работать, но это не всегда так. Вы всегда должны думать об этой проблеме и документировать то, что ваши программы ожидают или генерируют.
Хотя чтение и запись файлов с помощью Osmium не зависят от порядка объектов, некоторые другие части Osmium могут ожидать определенных порядков или гарантировать создание данных в определенном порядке. Ищите эти подробности в остальной части документации.
Данные заголовка
Некоторые форматы файлов (XML, PBF, O5M и Debug, но не OPL) имеют заголовок файла, который содержит метаданные о файле. Доступные данные сильно различаются в зависимости от формата, и большинство данных являются необязательными и часто недоступны или неточны.
Библиотека Osmium дает вам доступ к данным заголовков при чтении файлов, и вы можете устанавливать поля заголовков при записи файла.
Доступ к файлам
Обычно программы на основе Osmium позволяют вам сообщать им имя входного или выходного файла и, при необходимости, описание формата. Osmium определяет формат файла по суффиксу имени файла, поэтому обычно вам не нужно задавать формат явно.
Osmium знает о следующих суффиксах:
Формат | Суффикс | Описание |
---|---|---|
XML | .osm | XML-файл данных или набора изменений, также может быть файлом истории |
XML | .osh | XML-файл истории |
XML | .osc | XML-файл изменений |
PBF | .pbf | PBF |
OPL | .opl | OPL |
O5M | .o5m | файл данных o5m | < /tr>
O5C | .o5m | файл изменения o5c |
DEBUG | .debug | ОТЛАДКА |
Вы можете складывать форматы: например, .osm.pbf совпадает с .pbf , .osh.pbf — это файл истории в формате PBF.
Формат файла изменения ( .osc ) доступен только в версии XML, вместо этого используйте .osh для других форматов.
Osmium поддерживает внутреннее сжатие и распаковку файлов XML, OPL и DEBUG с использованием форматов GZIP и BZIP2. Как обычно, эти файлы имеют дополнительный суффикс .gz или .bz2 .
Поэтому типичный PBF-файл будет называться planet.pbf или planet.osm.pbf , упакованный файл истории в формате XML может называться history.osh.bz2 .
Если имя файла не заканчивается суффиксом, необходимым для автоматического определения, вы должны предоставить Osmium строку формата, описывающую формат. Просто используйте суффикс имени файла в качестве строки формата:
Имя файла: foobar , Формат: .osm.opl
Это необходимо чаще всего при ссылке на STDIN или STDOUT. Для ссылки на STDIN или STDOUT используйте пустое имя файла или одиночный дефис (-).
Имя файла: - , Формат: .osm.pbf
Параметры формата файла
Некоторые форматы файлов позволяют устанавливать различные параметры. Параметры следуют в списке, разделенном запятыми, после формата имени файла. Так, например, формат PBF допускает два разных способа записи узлов в файл, по умолчанию используется формат dense, но вы можете отключить его следующим образом:
Имя файла: foo.pbf , Формат: .pbf,pbf_dense_nodes=false
Обратите внимание, что если задан формат, он всегда должен начинаться с описания формата, даже если имя файла имеет правильный суффикс.
Вот список поддерживаемых в настоящее время необязательных настроек:
Формат | Опция | По умолчанию | Описание |
---|---|---|---|
PBF | pbf_dense_nodes | true | Использовать DenseNodes (более эффективное использование пространства) |
PBF | pbf_compression | zlib | Сжатие для блоков PBF (нет, zlib, lz4) |
pbf_compression_level | Уровень сжатия для больших двоичных объектов PBF | ||
XML | xml_change_format | false | Установить формат изменения, также можно установить с помощью osc вместо суффикса osm |
XML | force_visible_flag< /td> | false | Записать флаг visible на каждый объект, также установить, если используется суффикс osh вместо osm |
all< /em> | add_metadata | true | см. ниже |
PBF , XML, OPL | locations_on_ways | false | Добавить местоположения узлов к путевым узлам (расширение, специфичное для libosmium) |
ОТЛАДКА | нас e_color | false | Вывод с цветами ANSI |
DEBUG | add_crc32 | false | Добавить контрольную сумму CRC32 ко всем объектам |
Запись метаданных в объекты OSM ( add_metadata )
У объектов OSM есть несколько атрибутов метаданных:
Обычно все эти атрибуты записываются в файл, но вы можете решить, какие атрибуты вам нужны, а какие оставить. Атрибут id всегда будет добавляться.
Вы можете установить для параметра формата файла следующие значения:
- true , yes , all : добавить все атрибуты. Это значение по умолчанию.
- false , no , none : добавить только атрибут id
- Список из одного или нескольких атрибутов, разделенных знаком + (плюс): добавьте только эти атрибуты (и атрибут id) (пример: add_metadata=version+timestamp ).
Примечание. В версиях libosmium до 2.13.x для этого параметра можно было установить только значение true или false . Было невозможно добавить в файлы OSM только некоторые атрибуты, но не другие.
Обратите внимание, что некоторые программы, читающие файлы OSM, могут работать неправильно, если атрибуты отсутствуют или присутствуют только некоторые из них.
В проекте OSM используется несколько различных форматов XML.Основными форматами являются формат, используемый для файлов планет, извлечений и ответов API (суффикс .osm ), формат, используемый для файлов изменений (суффикс .osc ) и формат истории (суффиксы .osm или .osh ).
Также используются некоторые варианты, такие как формат JOSM, который похож на обычный формат OSM, но имеет некоторые дополнения. Поддержка функций этих форматов различается.
При чтении формат изменения OSM ( .osc ) определяется автоматически. При записи вы должны установить его с помощью спецификатора формата osc или параметра формата xml_change_format=true .
Формат файла PBF основан на буферах протокола Google. Файлы PBF занимают меньше места и быстрее в использовании, чем файлы XML. Файлы PBF могут содержать обычные данные OSM или данные истории OSM, но нет эквивалента формату XML .osc.
Osmium поддерживает чтение и запись узлов в форматах DenseNodes и не-DenseNodes. По умолчанию используется DenseNodes, так как это гораздо более эффективно. Добавьте параметр формата pbf_dense_nodes=false, чтобы отключить DenseNodes.
Osmium обычно сжимает блоки PBF с помощью zlib. Чтобы отключить это, используйте параметр формата pbf_compression=none. Это ускоряет чтение и запись, но результирующие файлы становятся больше.
Начиная с Libosmium 2.16 также поддерживается тип сжатия LZ4 ( pbf_compression=lz4 ). Сжатие и распаковка с LZ4 намного быстрее, чем с zlib, но степень сжатия не так хороша. Обратите внимание, что сжатие LZ4 является необязательным и доступно только в том случае, если оно было скомпилировано. Большинство других программ, читающих файлы PBF, не смогут его прочитать.
Также, начиная с Libosmium версии 2.16, вы можете установить уровень сжатия с помощью параметра формата файла pbf_compression_level. Допустимые значения зависят от используемого сжатия PBF.
Сжатие PBF | Опция | Уровень |
---|---|---|
Без сжатия | нет | н/д |
ZLIB | zlib | 0 - 9 |
LZ4 | lz4 | 1 - 65537 |