RU:Osmosis
Исходная статья: Osmosis. Вы можете закончить перевод.
Если вы знаете английский, то можете помочь нам, переведя часть оригинальной статьи. Общие сведения о переводе статей на русский язык можно найти здесь.
Подразделы |
---|
Установка |
Руководство пользователя |
Примеры |
Разработка |
Создание модулей |
Osmosis приложение java для командной строки, предназначенное для обработки данных OSM. Этот инструмент содержит набор модулей, которые могут работать в цепочке, чтобы выполнять сложные операции. Например он имеет компоненты для чтения из базы данных и из файла, компоненты для записи в базу данных и в файл, компоненты для доставки и применения пакетов правок к источникам данных, имеет компоненты для сортировки данных, и т.д. Он был написан таким образом, чтобы было легко добавлять новые функции без переделки общих задач, таких как обработка базы данных или файла.
Некоторые примеры того, что может делать это средство:
- Генерирует дампы планеты из базы данных
- Загружает дампы планеты в базу данных
- Формирует пакеты правок на основе таблиц истории базы данных
- Внедряет пакеты правок в локальную базу данных
- Сравнивает два файла планеты и формирует пакет правок
- Пересортировывает данные, содержащиеся в файлах планеты
- Извлекает данные из охватывающего их прямоугольника или многоугольника
Текущее состояние
Осмос находится в состоянии, когда большинство кодов базы вряд ли радикально изменится. Новые функциональные возможности будут введены с течением времени в виде новых задач и модулей, но существующие функции вряд ли будут удалены. Все сообщения об ошибках - приветствуются.
Текущая выпущенная версия поддерживает обе модели данных OSM - и 0.5, и 0,6. API v0.6 полностью поддерживается в кодах базы в svn. Новый стабильный релиз будут выпущен, как только будет принято решение о его развертывании.
В настоящее время мы занимаемся проблемами проверки данных. И высока вероятность того, что обработка xml будет сбоить из-за несоответствия правилам. Чтобы избежать появления неверных символов в xml файле, в новой версии (0.31.2) исправлено решение задач, связанных с записью xml. Теперь файлы, произведенные в Osmosis, поддерживают xml-utf8.
Скачивание
Последние версии
Внимание! Здесь находится версия 0.31. Есть более свежая версия - смотри раздел "Исправление неработающего UTF8".
Последние версии в двоичных кодах:
- http://dev.openstreetmap.org/~bretth/osmosis-build/osmosis-latest-bin.zip
- http://dev.openstreetmap.org/~bretth/osmosis-build/osmosis-latest-bin.tar.gz
Последние полные версии:
- http://dev.openstreetmap.org/~bretth/osmosis-build/osmosis-latest.zip
- http://dev.openstreetmap.org/~bretth/osmosis-build/osmosis-latest.tar.gz
Исправление неработающего UTF8
Файл с решённым вопросом поддержки набора символов UTF8 находится здесь:
- Все файлы дистрибутива: http://osmosis.achmyr.com/0.31.2
- Версия в двоичных кодах: http://osmosis.achmyr.com/0.31.2/osmosis-0.31.2-bin.zip and http://osmosis.achmyr.com/0.31.2/osmosis-0.31.2-bin.tar.gz
- Полная версия: http://osmosis.achmyr.com/0.31.2/osmosis-0.31.2.zip and http://osmosis.achmyr.com/0.31.2/osmosis-0.31.2.tar.gz
Ночная сборка
Ночную сборку можно скачать здесь: http://dev.openstreetmap.org/~bretth/osmosis-build/
Java 1.5
Версии, совместимые с java5:
- API 0.5: http://gweb.bretth.com/osmosis-0.24.1-java5.zip
- API 0.6: http://osmosis.achmyr.com/api0.6-java1.5
Схема DB (база данных)
Если вы желаете создать локальную схему, используйте сценарий (скрипт) для создания схемы (mysql и postgresql) соответствующего продукта (потребуется ночная сборка osmosis), то ищите здесь:
- http://gweb.bretth.com/apidb06-pgsql-latest.sql
- http://gweb.bretth.com/apidb06-mysql-latest.sql
- http://gweb.bretth.com/apidb06-pgsql-v25.sql
- http://gweb.bretth.com/apidb06-mysql-v25.sql
Subversion
Хранилище Subversion находится здесь: http://svn.openstreetmap.org/applications/utils/osmosis/
(Подробности читайте в инструкции Osmosis/Installation.)
Использование
Подробности использования
Полное руководство с подробным описанием, как использовать Osmosis, вы найдёте в Osmosis/Detailed Usage.
Примеры использования
(Подробности смотрите на подстраницах Osmosis/Examples.)
Импортировать файл планеты в локальную базу данных MySQL.
osmosis --read-xml file="planet.osm" --write-mysql host="x" database="x" user="x" password="x"
Экспортировать файл планеты из локальной базы данных MySQL.
osmosis --read-mysql host="x" database="x" user="x" password="x" --write-xml file="planet.osm"
Извлечь пакет правок, проанализировав два файла планеты.
osmosis --read-xml file="planet1.osm" --read-xml file="planet2.osm" --derive-change --write-xml-change file="planetdiff-1-2.osc"
Извлечь пакет правок, проанализировав файл планеты и базу данных.
osmosis --read-xml file="planet1.osm" --read-mysql host="x" database="x" user="x" password="x" --derive-change --write-xml-change file="planetdiff-1-2.osc"
Применить пакет правок на файл планеты.
osmosis --read-xml-change file="planetdiff-1-2.osc" --read-xml file="planet1.osm" --apply-change --write-xml file="planet2.osm" or osmosis --read-xml file="planet1.osm" --read-xml-change file="planetdiff-1-2.osc" --apply-change --write-xml file="planet2.osm" for the older version
Отсортировать содержимое файла планеты.
osmosis --read-xml file="data.osm" --sort type="TypeThenId" --write-xml file="data-sorted.osm"
The above examples make use of the default pipe connection feature, however a simple read and write planet file command line could be written in two ways. The first example uses default pipe connection, the second explicitly connects the two components using a pipe named "mypipe". The default pipe connection will always work so long as each task is specified in the correct order. Each task pushes its output stream(s) onto a stack, and each task that requires input stream(s) takes them from the stack. This stack-based approach is the reason why the above "--apply-change" example first reads the change file, then the data file - the --apply-change task will then first retrieve the data file from the stack and then the change file.
osmosis --read-xml file="planetin.osm" --write-xml file="planetout.osm"
osmosis --read-xml file="planetin.osm" outPipe.0="mypipe" --write-xml file="planetout.osm" inPipe.0="mypipe"
Извлечь область, основываясь на файле, описывающем многоугольник Osmosis/Polygon Filter File Format:
osmosis --read-xml file="planet-latest.osm" --bounding-polygon file="country2pts.txt" --write-xml file="germany.osm"
Извлечь только линии, содержащие определённые теги. Опция --used-node позволяет извлекать только точки из таковых линий. Отношения остаются неизменными:
osmosis --read-xml city.osm --way-key-value keyValueList="railway.tram,railway.tram_stop" --used-node --write-xml city_tram.osm
В случае больших файлов (например, файла планеты), это может привести к ошибке сегментации вследствие нехватки памяти. В таком случае может помочь добавление параметра idTrackerType=BitSet к --used-node:
osmosis --read-xml city.osm --way-key-value keyValueList="railway.tram,railway.tram_stop" --used-node idTrackerType=BitSet --write-xml city_tram.osm
Учтите, что --way-key-value и --node-key-value не могут быть использованы одновременно. Чтобы обойти это ограничение, создайте два или более файлов, обработайте каждый соответствующей командой, и объедините результаты в один файл (да, для n файлов, операцию объединения придётся запускать n-1 раз):
osmosis --rx 1.osm --rx 2.osm --rx 3.osm --merge --merge --wx merged.osm
Only 0.5 tasks are available from version 0.22 onwards.
Извлечение прямоугольных областей
Одной из распространённых базовых задач является извлечение небольшой порции данных из OSM XML. Например, вы скачали файл планеты (planet.osm) и хотите извлечь оттуда определённые регионы; или же у вас загружены данные страны, а вы хотите извлечь оттуда один город. Простейший способ решить эту задачу - извлечь прямоугольную область.
Пример ниже показывает, как извлечь Нюрнберг и немного окрестных территорий из дампа Германии (или файла планеты):
bzcat downloaded.osm.bz2 | osmosis\ --read-xml enableDateParsing=no file=/dev/stdin\ --bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201 --write-xml file=-\ | bzip2 > extracted.osm.bz2
Такой подход использует bzip2 напрямую для извлечения и сжатия данных, так как это считается более эффективным, чем использование встроенного архиватора.
Для получения координат точки, сделайте на ней двойной клик, а затем кликните "Permalink" и скопируйте появившиеся данные из адресной строки.
Техподдержка и сообщения об ошибках
Лучшим способом получить ответы на вопросы является использование списка рассылки, предоставленного разработчиками - http://lists.openstreetmap.org/listinfo/dev
Пожалуйста, обсуждайте потенциальные баги при помощи электронной почты и вышеуказанной рассылки, прежде чем создавать новые тикеты. Если вы уверены в том, что обнаружили баг, он может быть уже описан в баг-трекере OSM, среди ошибок с пометкой "osmosis" - http://trac.openstreetmap.org/query?component=osmosis
Смотрите также
- Чтобы узнать спецификации файлового формата, используемого в Osmosis-е, и узнать об изменениях, посетите OsmChange.
- Чтобы ознакомиться с более сложными примерами использования, посетите Osmosis/Examples.
- Чтобы написать плагин под свою задачу, посетите Osmosis/WritingPlugins.
- Чтобы увидеть полный список опций командной строки, посетите Osmosis/Detailed Usage.
- Osm2pgsql также позволяет импортировать базы данных PostGIS.
Разработка
Детальная информация о разработке Osmosis размещена здесь: Osmosis/Development. Загляните туда, если вас интересует документация о внутренней структуре Osmosisa-а, решения в вопросах дизайна, руководства по конфигурации сред разработки и т.д.
Заметки
Необходима Java 1.6 или более поздних версий. Это вызвано тем, что Osmosis использует некоторые классы java.awt.geom, которые впервые появились в Java 1.6. Если эта часть кода будет переписана для решения задач средствами Java 1.5, можно будет снизить требования к версии. Однако, используемые в Osmosis обобщения и функции java.util.concurrent не позволят понизить требования дальше Java 1.5.
Производительность встроенного bzip (.bz2) значительно ниже, чем gzip (.gz), встроенного в первую версию Java (тот использовал нативный код для улучшения производительности). Также последние версии файла планеты сжаты bzip с использованием функции потоков, которые не поддерживаются встроенным в Java bzip. Для работы с такими файлами планеты и для более быстрой обработки больших файлов, рекомендуется использовать системную реализацию bzip и производить чтение и запись файлов непосредственно из/в /dev/stdin и /dev/stdout соответственно. ( pbzip2 -d -c planet.osm.bz2 | bin/osmosis --rx /dev/stdin --wx /dev/stdout | gzip -c > planet-same.osm.gz ). См. также Osmosis/Examples#Benchmark tests.