RU:Osmconvert

From OpenStreetMap Wiki
Jump to navigation Jump to search

osmconvert используется для преобразования и обработки файлов данных OpenStreetMap. Приложение предоставляет значительно меньше различных возможностей, чем часто используемое Osmosis: к примеру, из osmconvert невозможно обратиться к базе данных. Но osmconvert работает быстрее и обладает специализированными функциями(--all-to-nodes, --complex-ways and --out-statistics).

Загрузка

Доступны для загрузки:

С тем, что получилось, как обычно: Никаких гарантий, в рамках разрешённого законом.

Запуск двойным щелчком кнопки мыши

osmconvert можно запускать двойным щелчком кнопкой мыши. Как в Linux, так и в Windows. Приложение покажет меню с основными функциями. Такой интерфейс предназначен для тех, кто не умеет или не хочет работать из командной строки. Хотя, чтобы полностью воспользоваться возможностями приложения, нужно запускать его из командной строки (в Windows, к примеру, можно нажать Windows-Key+R и набрать cmd).

Замечание для пользователей Windows: примеры на этой станице обычно начинаются с ./osmconvert. Первые 2 символа "./", точка и слэш, обязательны для Linux, в частности, из-за соображений безопасности. Windows "не понимает" эти символы, и вообще, в этом отношении у неё менее строгая политика безопасности. Короче говоря, только имени приложения osmconvert будет достаточно.

Описание приложения

Для получения детального описания, пожалуйста используйте встроенную подсказку:

./osmconvert --help

А такая команда выведет краткие описания параметров:

./osmconvert -h

Последующие разделы проиллюстрируют наиболее важные возможности приложения.

Преобразование файлов

Преобразование возможно между следующими форматами данных:

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

--out-osm (по-умолчанию), --out-osc, --out-osh, --out-o5m, --out-o5c, or --out-pbf.

Если задано имя выходного файла опцией -o=, osmconvert определит выходной формат, проанализировав расширение имени файла. Примеры с заданием как входного, так и выходного форматов:

./osmconvert norway.pbf >norway.osm
./osmconvert region.pbf -o=region.o5m
./osmconvert region.o5m -o=region.pbf
./osmconvert 20110510_20110511.osc --out-o5c >20110510_20110511.o5c

Сжатые входные файлы можно обрабатывать через использование потока стандартного входа. Примеры:

bzcat europe.osm.bz2 | ./osmconvert - -o=europe.o5m
./osmconvert norway.pbf | gzip -1 >norway.osm.gz

Опция "-" указывает приложению ожидать данные из потока стандартного входа.

osmconvert поддерживает распаковку .gz. Формат сжатия gzip распознаётся автоматически, и можно не заботиться о том, запакован ли входной файл в gzip или нет. Встроенный код распаковки ограничен в сравнении со специализированными приложениями для распаковки, но эта возможность очень полезна для обновления OSM файла последовательностью загруженных сжатых файлов в .osc формате. Примеры:

./osmconvert old.o5m daily_updates/2011*.osc.gz -o=new.o5m
./osmconvert daily_updates/2011*.osc.gz --merge-versions --out-osc | gzip >cumulative.osc.gz

Ограничения по географическим границам

"Обрезка" по долготе и широте

Задание географических координат - самый простой способ указать область, для которой нужно извлечь данные. Некоторые онлайн-карты умеют показывать широту и долготу точки под курсором. Например: Osmarenderer map, public transport map.

Чтобы задать ограничивающий псевдопрямоуголник, задаются координаты юго-западного и северо-восточного углов. Примеры:

./osmconvert germany.pbf -b=10.5,49,11.5,50 -o=nuernberg.o5m
./osmconvert ontario.osm -b=-75.80,45.19,-75.7,45.23 >ott.osm

"Обрезка" по полигону

Вместо ограничивающего прямоугольника можно использовать файл с полигоном границы. Так можно задать более точное приближение к административной границе, например:

./osmconvert germany.pbf -B=hamburg.poly -o=hamburg.pbf

Формат файла полигона границ описан в OSM Wiki: здесь. Не обязательно точно выполнять все предписания формата, достаточно, чтобы каждая строка с координатами начиналась с пробелов.

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

Можно ли обрезать файлы формата OSM Change?

Не рекомендуется обрезка по географической области файлов изменений, change files. Поскольку географические координаты задаются только в точках (nodes), то неясно что делать с теми линиями (ways) и отношениями (relations), у которых точек в этом файле не задано. Такие линии и отношения отбрасываются. А это обычно не то, что требуется и ожидается.

Полное сохранение линий, пересекающих границы

Некоторые приложения требуют, чтобы линии (ways) были определены полностью, даже если они частично находятся вне требуемой географической области. Этого можно обеспечить опцией --complete-ways. Примеры:

./osmconvert germany.o5m -b=10.5,49,11.5,50 --complete-ways -o=nuernberg.o5m
./osmconvert germany.o5m -B=hamburg.poly --complete-ways -o=hamburg.pbf

Эта опция, и опция, описанная в следующем разделе, в 32-битной Windows приводит к ограничению размера входного файла в 2 ГБ. Поскольку приложению потребуется читать файл 2 или 3 раза, необходимо "перемещаться" по файлу. К сожалению, используемая в настоящее время библиотека не позволяет большие "перемещения" в 32-битной Windows. В Linux такой проблемы нет (ни в 32-битной, ни в 64-битной версиях).

Для этого и следующего разделов рекомендуется использовать входные файлы в .o5m формате. Дело в том, что файлы в формате .pbf обычно сжатые "внутри" и обрабатываются гораздо медленнее, чем .o5m.

Опция --complete-ways недоступна в Osmupdate.

Полное сохранение мультиполигонов, пересекающих границы

Всё больше рек, лесов и озёр задаются не одной замкнутой линией, а несколькими последовательными линиями. Так называемые multipolygons (мультиполигоны) используются, чтобы логически связать эти физически соединённые линии. У каждой линии есть role (роль, предназначение) определяемое положением: "outer" (внешняя) для внешней границы и "inner" (внутренняя) для исключаемых областей (как остров в озере).

При обрезании по географической области, osmconvert умеет работать с такими мультиполигонами и сохранять их полностью, даже если только маленькая часть мультиполигона попадает в требуемую область. Для включения этого режима необходимо указать опцию --complete-multipolygons и/или --complete-boundaries. Примеры:

./osmconvert germany.o5m -b=10.5,49,11.5,50 --complete-multipolygons -o=nuernberg.o5m
./osmconvert germany.o5m -B=hamburg.poly --complete-multipolygons -o=hamburg.pbf

Пожалуйста обратите внимание на рекомендации и замечания в конце предыдущего раздела. До 2016 данная опция называлась --complex-ways.

Исключение ссылок на объекты вне заданной области

Для удаления ссылок на точки (nodes), которые были отброшены, потому что лежат за пределами требуемой области, используется опция --drop-broken-refs (может быть полезна для импорта данных в OSM Map Composer или JOSM).

Объединение двух и более географических областей

Иногда требуется объединять данные OSM файлов. Если в них есть объекты (точки, линии, отношения) с одинаковыми id, они должны иметь одинаковое содержимое. Например, если линия пересекает границу между двумя файлам регионов, то описание линии должно содержать ссылки на все точки, даже на те, которые лежат за пределами области отдельного файла. Таким образом, такие файлы не должны получаться с использованием опции --drop-brokenrefs. Примеры объединения географических областей:

./osmconvert austria.o5m germany.o5m switzerland.o5m -o=dach.o5m
./osmconvert north_america.osm south_america.osm -o=americas.osm

Специальный случай: обрезка контурных линий

Подробности на странице Howto render Garmin countour layers with no artefacts

Удаление информации или данных из выходного файла

Исключение информации об авторстве

Большинству приложений не требуются тэги, определяющие авторство. Если нужно удалить текстовое имя автора, id автора, данные о пакете правок (changeset) и времени обновления объекта (timestamp), добавляйте опцию командной строки --drop-author. Например:

./osmconvert --drop-author a.pbf -o=a.osm

Обычно не бывает проблем из-за удаления, если информация об авторстве удаляется из .osm или .o5m файлов. Но с .pbf файлами этого делать не рекомендуется, потому что большинство программ "не понимают" такого изменения формата.

Иногда нужно добавить отсутствующую информацию об авторе, скажем, потому что то этого завит работа какой-то программы в цепочке. --fake-author добавит такие данные. Но конечно, там будут какие-то значения, которые просто соответствуют спецификации, ничего более.

Исключение объектов некоторых OSM типов.

Если требуется можно исключить целые секции OSM файла:

--drop-nodes
--drop-ways
--drop-relations

Приложение osmfilter обеспечивает более тонкие настройки фильтрации.

Удалить линии и отношения и превратить их в точки

Иногда для облегчения последующей обработки требуется получить файл состоящий только из точек, nodes. С osmconvert есть возможность удалить все линии и отношения и создать вместо них точку с широтой и долготой центра удаляемого объекта. id новой точки получается увеличением id линии на 1015 или id отношения на 2*1015. Например:

./osmconvert hamburg.pbf --all-to-nodes -o=hamburg_nodes.osm

OpenLinkMap, к примеру, использует такое преобразование, чтобы упростить последующую обработку данных. Опция --object-type-offset= позволяет задать значение увеличения id, отличное от 1015.

The option --add-bbox-tags will provide a bounding box for each way and relation which has been converted to a node. These bounding boxes will appear as tags. For Example (area of London):

<tag k="bBox" v="-0.5000,51.0000,0.5000,52.0000"/>

Обновление файлов OSM

Данные в формате OSM (.osm, .o5m or .pbf) могут быть объединены с одним или несколькими файлами изменений (.osc or .o5c) для получения новой версии. Например, имея planet.osm или данные региона germany.o5m, полученные вчера, можно, имея файл изменений за прошедий день (daily) получить обновлённый planet.osm или, соответственно, germany.o5m. Команды выглядят следующим образом:

./osmconvert planet_old.osm changefile.osc -o=planet_new.osm
./osmconvert planet_old.o5m changefile.osc.gz -o=planet_new.o5m
./osmconvert germany_old.o5m changefile.osc -B=germany.poly -o=germany_new.o5m

Если имеющийся OSM файл более старый, можно обновить его двумя или более файлами изменений за один раз:

./osmconvert veryold.osm c1.osc c2.osc c3.osc -o=new.osm
./osmconvert day24.o5m c24_25.osc c25_26.osc -o=day26.o5m
./osmconvert day01.o5m november/*.osc -o=day30.o5m

Объекты OSM в файле изменений должны быть уникальными. Это означает, что там только один раз могут быть определёны конкретная точка, линия или отношение. Файлы изменений за минуту (minutely) и час (hourly) могут содержать более одной версии OSM объекта, в этом случае будут выводится соответствующие текстовые сообщения. Объединить версии одного объекта можно, задав опцию --merge-versions. Тогда только самая последняя версия каждого объекта останется в результирующем файле.

Для автоматического обновления OSM файла, или создания объединённых (cumulative) .osc файлов можно использовать osmupdate.

Получение разницы между OSM файлами

Можно создавать .osc или .o5c файлы изменений сравнением двух .osm или .o5m файлов. Например:

./osmconvert old.osm new.osm --diff -o=changefile.osc
./osmconvert old.o5m new.o5m --diff -o=changefile.o5c

При этом нельзя использовать другие операции, вроде обрезания по области. Оба файла должны быть отсортированы по типу объекта и id. Созданные объекты в выходном файлы будут "modified", т.е. изменённые, если только версия объекта не 1.

При определении разницы osmconvert полагается на номера версий сравниваемых объектов. В случае, если номеров версий нет, или объекты нужно сравнивать по содержимому, добавьте опцию --diff-contents (работает только .o5m).

Если объект должен быть удалён, сохраняется только его id (и информация об авторстве). Разумно не сохранять данные объекта, раз он всё равно удаляется. Однако некоторые приложения требуют наличия широты и долготы у точек из каких-то формальных соображений. С опцией --fake-lonlat создаются некие значения для удовлетворения этих формальных требований.

Задание времени создания файла (timestamp)

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

./osmconvert hamburg.o5m --timestamp=2011-08-01T23:50:00Z -o=hamburg.o5m

Получение статистической информации

Есть различные способы получить метаданные или статистические данные из OSM файла.

Во-первых, можно прочитать timestamp (время, связанное с файлом) с помощью опции --out-timestamp (Z в конце обозначает Zulu):

./osmconvert file_with_timestamp.o5m --out-timestamp
2011-08-01T23:50:00Z
./osmconvert file_without_timestamp.o5m --out-timestamp
(invalid timestamp)

Во-вторых, можно обработать весь файл и получить набор статистических данных:

./osmconvert germany.osm.pbf --out-statistics

timestamp min: 2005-07-05T02:14:17Z
timestamp max: 2011-07-31T19:59:46Z
lon min: -20.0712330
lon max: 21.1441799
lat min: 47.0830289
lat max: 59.9982830
nodes: 78138447
ways: 11342322
relations: 176024
node id min: 1
node id max: 1380816490
way id min: 92
way id max: 123952798
relation id min: 159
relation id max: 1693098

Writing CSV Files

To get character-separated lists you may define ".csv" as output format. This can be done by using the -o= option, e.g. -o=my_table.csv or by defining one of the csv related options: --out-csv , --csv= , --csv-headline , --csv-separator= .

The table will have tree tab-separated columns: object type name, id, name. To change the column separator or to select a different set of columns please use the --csv-separator= resp. the --csv= option. Use the --help option to display further information on this topic.

Объединение задач

Можно объединять большинство из описанных выше задач. Так например, можно обновить .osm file и ограничить область одной командой:

./osmconvert day24.osm -B=p.poly c24_25.osc -o=day25.osm

Parallel Processing

osmconvert does not support parallel processing by it's own. However you can use your operating system's capabilities and enter such instructions at the command line. This might also be useful in cases you want to process more than one .pbf file, since osmconvert is presently not able to read more than one .pbf file at the same time. For example:

./osmconvert region1.pbf --out-o5m | ./osmconvert - region2.pbf -o=all.pbf

In this example the first process will read the .pbf file "region1.pbf" and output it o5m-formatted to standard output. The second process will read this data from standard input, merge it with the other regional file "region2.pbf", and write it to the file "all.pbf". You will have recognized the minus sign in the second osmconvert command: it advices the program to read data from standard input. The pipe operator "|" connects standard output of the first command to standard input of the second command.

You also can use more than one pipe by creating so-called named pipes. Unfortunately this might not work with Windows. On Linux, there is the mkfifo command to create pipes. These pipes can be addressed the same way files are. In this example, three processes will be created to merge three .pbf files:

mkfifo p1 p2
./osmconvert a.pbf --out-o5m -o=p1 & ./osmconvert ./osmconvert b.pbf --out-o5m -o=p2 & ./osmconvert p1 p2 c.pbf -o=all.pbf

The ampersand operators will each create a background process for the command which stands left to it. The last command in the line remains in foreground and will collect the data the two background processes produce.

Файл параметров

Командная строка может получится очень длинной, в случае сложных операций. Тогда можно использовать файл параметров, задавая его через опцию --parameter-file=. Например:

./osmconvert --parameter-file=my_parameters

Содержимое файла "my_parameters":

-v

// входной файл
planet.o5m

// ограничивающий прямоугольник
-b=8.123,10.123,9.456,11.456

--complex-ways

-o=region.o5m

Для разделения параметров используются пустые строки. Переводы строки внутри параметров будут преобразованы в пробелы. Линии, которые начинаются с "// " считаются комментариями и игнорируются приложением.

Технические детали

Временные файлы

Для некоторых операций osmconvert создаёт временные файлы. Обычно они небольшие в сравнении с обрабатываемыми OSM файлами. Имена временных файлов начинаются с "osmconvert_tempfile" и заканчиваются номерами. Можно изменить левую часть имени файла, включая путь. Например:

./osmconvert germany.pbf -B=n.poly -t=/media/hd70/temp -o=nuernberg.o5m

Работа с памятью

Опции, влияющие на работу с памятью: --hash-memory=, --max-refs= and --max-objects=. Более детальные описания во встроенной подсказке:

./osmconvert --help

Текстовый вывод для отладки

Бывает полезно получать информацию о том, чем сейчас занято приложение. Включить режим более детальный текстовый вывод, verbose mode, можно опцией -v. С -v=2 текстовый вывод будет ещё более делальный, хотя, возможно, и не всегда понятный.

Данные о производительности (Benchmarks)

Пожалуйста, добавляйте сюда результаты Ваших тестов производительности.