RU:Minutely Mapnik

From OpenStreetMap Wiki
Jump to navigation Jump to search

Minutely Mapnik (ежеминутный Mapnik) это концепция поддержки вашей базы данных PostgreSQL синхронизированной с изменениями, производимыми на сервере OpenStreetMap. Изменения, производящиеся в OpenStreetMap с пользовательских аккаунтов записываются в "файлы репликаций" на каждую минуту и каждый час. Java приложение Osmosis используется для автоматизации процесса скачивания нужных "файлов репликаций", которые используются для обновления данных в вашей базе. Затем используется приложение Osm2pgsql, которое импортирует эти изменения в вашу базу данных PostgreSQL.

Процедура поддержки личной базы данных в актуальном состоянии изменилась 7 января 2010. Данная страница отражает необходимые процедуры после этой даты. Чтобы ознакомиться со старой процедурой, смотрите Minutely_Mapnik_Pre2010.

Требования

Для использования "файлов репликаций" вам нужны инструменты Osmosis и Osm2pgsql. Osm2pgsql у вас уже должен быть, поскольку вы его использовали для начального импорта данных OpenStreetMap в базу данных PostgreSQL. Неплохо бы убедиться, что у вас имеются последние версии обоих инструментов. Вам также нужно знать дату и время снимка данных OpenStreetMap, который вы изначально импортировали в свою базу данных. Ну, и последнее требование заключается в том, чтобы вы импортировали изначальные данные с аргументом --slim для Osm2pgsql.

Начальная установка

Инициализация

Сначала зададим переменную окружения, содержащую путь к рабочей директории, которую будет использовать Osmosis.

export WORKDIR_OSM=$HOME/.osmosis

Если вы используете разные окружения или не хотите использовать переменные окружения, просто заменяйте $WORKDIR_OSM в выражениях ниже на полный путь.


Подготовим систему для работы с "файлами репликаций". Osmosis имеет встроенный функционал для этой цели:

mkdir $WORKDIR_OSM
osmosis --read-replication-interval-init workingDirectory=$WORKDIR_OSM

Аргумент workingDirectory выше указывает желаемую директорию, которую Osmosis создаст для файлов, необходимых для поддержки ваших данных в актуальном состоянии. В данном примере он положит их в скрытую директорию в домашней папке пользователя. Когда вы всё настроите и запустите, вам, скорее всего, больше не понадобится обращаться к этим файлам, так что такое их расположение вполне уместно.

После того, как команда выше отработает, workingDirectory которую вы указали, наполнится двумя файлами: configuration.txt и download.lock. configuration.txt будет разобран ниже. Файл download.lock используется для проверки того, что только один процесс в данный момент пытается получить "файлы репликаций".

Задание интервала репликаций

Теперь нам надо указать, насколько далеко мы вернёмся в прошлое, чтобы собрать все изменения, произошедшие на сервере OpenStreetMap. Именно здесь нам понадобятся дата и время нашего снимка, который мы использовали для изначального импорта. Есть несколько способов задать эту спецификацию, а в результате мы получим файл с именем state.txt, который будет создан в $WORKDIR_OSM. ВНИМАНИЕ: Дату и время надо указывать в UTC, и вычитать из него час или два, чтобы наверняка не упустить ни одного изменения.

Webpage Tool with Browser

Можете использовать Peter Körner's website tool. После ввода даты и времени, кликните "fetch state-file" и создайте файл с именем state.txt с содержимым, появившемся на странице, в размещении $WORKDIR_OSM.

Webpage Tool with API

Как вариант, укажите дату и время в командной строке, и загрузите всё прямо в файл state.txt:

 wget http://toolserver.org/~mazder/replicate-sequences/?2010-01-01T10:00:00Z -O $WORKDIR_OSM/state.txt

Выбор интервала файла репликаций

По умолчанию, osmosis будет получать диффы минутных репликаций, and at most one hours worth of them. Если желаете иначе, поправьте $WORKDIR_OSM/configuration.txt и замените фразу "minute-replicate" в aseUrl на "hour-replicate". If you have lots to catch up, you can even set the value maxInterval=3600 higher.

Получение данных репликации

Теперь мы готовы получить и импортировать изменения данных, которые произошли на сервере OpenStreetMap с момента нашего изначального импорта.

osmosis --read-replication-interval workingDirectory=$WORKDIR_OSM --simplify-change  --write-xml-change changes.osc.gz

Аргумент --simplify-change указывает Osmosis включать только последнее изменение, произведенное с каждой "сушностью" в changes.osc.gz. Если в загруженных "файлах репликаций" "сущность" изменена больше одного раза, то без этого аргумента она может задублироваться в вашей базе данных.

Импорт данных репликации

Теперь файл changes.osc.gz может быть импортирован в базу данных. Вам нужно будет указать часть арументов специально для вашей настройки. Вы можете использовать некоторые аргументы, которые были при изначальном импорте, но убедитесь, что добавили аргумент --append и указали файл changes.osc.gz. Без аргумента --append ваша база будет очищена перед импортом изменений.

osm2pgsql --append [мои собственные аргументы] changes.osc.gz


Как вариант, вы можете скомбинировать два предыдущих шага, перенаправив вывод osmosis в osm2pgsql:

osmosis --read-replication-interval workingDirectory=$WORKDIR_OSM --simplify-change - \
 --write-xml-change | osm2pgsql --append [мои собственные аргументы] -

Возможные проблемы

Увеличение размера базы данных

Импортирование в базу данных, содержащую выгрузку части данных OSM вместо целой планеты (используя osm2pgsql с параметром --bbox), может вызвать значительное увеличение размера базы данных. Выходом является удаление линий и отношений, которые относятся к точкам, не описанным в базе данных here.

Смотрите также