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 знает о следующих суффиксах:

< /tr>
Формат Суффикс Описание
XML .osm XML-файл данных или набора изменений, также может быть файлом истории
XML .osh XML-файл истории
XML .osc XML-файл изменений
PBF .pbf PBF
OPL .opl OPL
O5M .o5m файл данных o5m
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

Обратите внимание, что если задан формат, он всегда должен начинаться с описания формата, даже если имя файла имеет правильный суффикс.

Вот список поддерживаемых в настоящее время необязательных настроек:

< tbody> < td>PBF
Формат Опция По умолчанию Описание
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 содержат таблицу строк в каждом блоке данных. Некоторые программы сортируют эту таблицу строк для лучшего сжатия. Osmium не делает этого для ускорения записи файлов PBF.

Обычно файлы PBF содержат все метаданные для таких объектов, как идентификатор набора изменений, имя пользователя и т. д. Чтобы сэкономить место, вы можете отключить запись метаданных с помощью параметра формата add_metadata=false .

Форматы o5m и o5c были изобретены и в основном используются инструментами osmconvert, osmfilter и osmupdate. Две версии предназначены для файлов данных (.o5m) и файлов изменений (.o5c). Файлы истории не поддерживаются.

Osmium может читать эти файлы для совместимости с другими инструментами, но не может записывать формат файла.

Файлы O5M/O5C больше, чем файлы PBF (если вы не сожмете их снова, что возможно, но, конечно, замедляет их чтение и запись).

Формат DEBUG используется только для отображения данных пользователю таким образом, чтобы он был удобочитаемым для человека. Его нельзя прочитать программно.

Формат BLACKHOLE особенный. Все данные, записанные в «файл» черной дыры, выбрасываются без кодирования. Это полезно в некоторых случаях, например, когда вы проводите бенчмаркинг. В отличие от записи в /dev/null, которая кодирует данные перед их удалением, тип файла «черная дыра» не требует дополнительных затрат.

Невозможно прочитать формат файла «черная дыра». Возможны такие комбинации, как «osc.blackhole» и т. д.

Какой формат следует использовать?

Во многих случаях вы не можете выбрать, какой формат использовать, потому что вы получаете файл в определенном формате и должны с ним работать. Osmium может считывать все популярные форматы, так что вы здесь. Osmium также может создавать самые популярные форматы, поэтому, если какое-то другое программное обеспечение требует определенного формата, вы должны быть в порядке.

Сервисы, производящие автоматические извлечения данных OSM, такие как Geofabrik или Interline Extracts, ограничены предопределенными областями. Часто вам нужно скачать выдержку для страны или региона, которая больше вашей реальной области анализа, а затем сократить ее до нужного размера.

Чрезмерно большие данные OSM могут привести к значительному увеличению времени и сложности вычислений как при построении графика, так и при обработке запросов на планирование поездки. Вы можете обрезать данные OSM, если они охватывают территорию, значительно превышающую площадь вашей транзитной сети. Несколько инструментов командной строки могут выполнять эти операции обрезки: Osmosis — это многоплатформенный инструмент Java, который работает в Windows, Linux и MacOS, но работает относительно медленно, OSMConvert — быстрый инструмент, предварительно созданный для Windows и Linux и доступный в MacOS. и дистрибутивы Linux как часть пакета osmctools. Osmium-Tool — это личный фаворит, который чрезвычайно быстр, но его легко установить на платформах Linux и MacOS. Ниже приведены некоторые примеры команд кадрирования для этих различных инструментов:

Осмос: osmosis --rb input.osm.pbf --bounding-box left=4.34 справа=5,84 внизу=43,10 вверху=43,97 --wb cropped.osm.pbf

OsmConvert: osmconvert input.osm.pbf -b=-77.255859375,38.77764022307335,-76.81365966796875,39.02345139405933 --complete-ways -o=cropped.osm.pbf

Осмий: экстракт осмия --strategy complete_ways --bbox 2.25,48.81,2.42,48.91 input.osm.pbf -o cropped.osm.pbf

Последние две команды предполагают, что ограничивающие рамки должны быть указаны в формате min_lon,min_lat,max_lon,max_lat . Мы часто находим ограничивающие рамки с помощью удобного инструмента ограничивающей рамки Klokantech. Выбор формата "CSV" в левом нижнем углу даст именно тот формат, который ожидается этими инструментами.

Фильтрация данных OSM

База данных OSM содержит много других данных, помимо данных о дорогах, маршрутах и ​​платформах общественного транспорта, которые нам нужны для анализа доступности. На момент написания этой статьи, согласно TagInfo, 59% путей в OSM — это здания, и только 23% — дороги или тропинки. Здания часто имеют более сложную форму, чем дороги, а такие объекты, как водные пути или политические границы, могут быть очень большими по размеру. В шутку было сказано, что OSM следует переименовать в OpenBuildingMap, а не в OpenStreetMap.

Удаление ненужных данных уменьшит размер файлов, облегчит копирование или перемещение файлов и уменьшит размер резервных копий и архивов проекта. Это также может ускорить стадию обработки, на которой данные OSM преобразуются в маршрутизируемую уличную сеть. Существует несколько инструментов командной строки для фильтрации данных OSM. Инструменты командной строки для этой цели включают Osmosis и Osmium-Tool. Osmium-Tool работает очень быстро, но его просто установить только на платформах Linux и MacOS. Осмос часто медленнее фильтрует, но также будет работать в Windows, поскольку это многоплатформенное Java-приложение. OSMFilter не может работать с файлами формата PBF, поэтому мы редко его используем. Ниже приведены некоторые примеры команд для сохранения только данных OSM, полезных для анализа доступности. Вот несколько примеров команд:

Pyrosm — это библиотека Python для чтения OpenStreetMap из файлов двоичного формата Protocolbuffer ( * .osm.pbf) в Geopandas GeoDataFrames. Pyrosm позволяет легко извлекать различные наборы данных из pbf-дампов OpenStreetMap, включая, например. дорожные сети, здания, достопримечательности (POI), землепользование, природные элементы, административные границы и многое другое. Поддерживаются полностью настраиваемые запросы, что позволяет анализировать любые данные из OSM даже с более специфическими фильтрами.

Pyrosm прост в использовании и предоставляет пользовательский интерфейс, похожий на OSMnx. Основное различие между pyrosm и OSMnx заключается в том, что OSMnx считывает данные с помощью API OverPass, тогда как pyrosm считывает данные из локальных дампов данных OSM, которые загружаются из поставщиков данных PBF (Geofabrik, BBBike). Это позволяет быстрее анализировать данные OSM и упрощает извлечение данных, охватывающих большие регионы.

Например, анализ всех дорог в штате Нью-Йорк (США) с помощью «базового» рабочего ноутбука (память 16 ГБ, твердотельный накопитель и процессор Intel Core i5) занимает менее 3 минут, а анализ зданий из того же региона занимает менее 4 минут (подробности см. в тестах):

Текущие функции¶

легко загружать данные PBF из сотен мест по всему миру

считывать уличные сети (отдельно для вождения, езды на велосипеде, ходьбы и все вместе)

читать здания из PBF

прочитать достопримечательности (POI) из PBF

использование земли из PBF

читать «натуральный» из PBF

чтение границ из PBF (например, административных границ)

считывать любые другие данные из PBF с помощью пользовательского фильтра

фильтровать данные по ограничивающей рамке

экспортировать сети в виде ориентированного графа в igraph , networkx и pandana

Когда следует использовать Pyrosm?¶

Конечно, Pyrosm можно использовать всякий раз, когда вам нужно преобразовать данные из OSM в геопанды GeoDataFrames. Однако пиросм лучше подходит для ситуаций, когда вы хотите получить данные для всего города или более крупных регионов (даже для всей страны).

Если вы заинтересованы в получении данных OSM для небольших областей, таких как районы, или поиске данных по определенному местоположению/адресу, мы рекомендуем использовать OSMnx, который является более гибким с точки зрения указания области интереса. При этом также можно извлекать информацию об уровне соседства с помощью пиротехники и фильтровать данные на основе ограничивающей рамки (см. документацию).

Читайте также:

Сжатие PBF Опция Уровень
Без сжатия нет н/д
ZLIB zlib 0 - 9
LZ4 lz4 1 - 65537