RU:Osmconvert
osmconvert используется для преобразования и обработки файлов данных OpenStreetMap. Приложение предоставляет значительно меньше различных возможностей, чем часто используемое Osmosis: к примеру, из osmconvert невозможно обратиться к базе данных. Но osmconvert работает быстрее и обладает специализированными функциями(--all-to-nodes, --complex-ways and --out-statistics).
Загрузка
Доступны для загрузки:
- бинарный модуль Linux 32 bit
- бинарный модуль Linux 64 bit
- бинарный модуль Windows 32 bit (должен работать и на Win 64)
- бинарный модуль Windows 64 bit (версия 0.8.8 имеет грубую ощибку обрезки, не обрезает отношения без координат)
- бинарный модуль Windows 64 bit
- исходный код (используемая текущая версия)
- требуется линковка с zlib (т.е. cc osmconvert.c -lz -o osmconvert)
- (предыдущая версия исходного кода)
- (версия кода в разработке (если есть))
- Загрузка с и сборка одной строкой: wget -O - http://m.m.i24.cc/osmconvert.c | cc -x c - -lz -O3 -o osmconvert
С тем, что получилось, как обычно: Никаких гарантий, в рамках разрешённого законом.
Запуск двойным щелчком кнопки мыши
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)
Пожалуйста, добавляйте сюда результаты Ваших тестов производительности.