RU:Minutely Mapnik
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.