Support only updating .osm.pbf without DB

master
Vitaliy Filippov 2018-12-11 01:32:45 +03:00
parent 150c9382bf
commit 6ac9ea88af
1 changed files with 24 additions and 17 deletions

View File

@ -9,42 +9,53 @@
# OSM_CARTO_VERSION - для режима osm2pgsql-carto - версия osm-carto. Файлы должны быть в /usr/share/mapnik/openstreetmap-carto-ВЕРСИЯ
# URL_LATEST - URL последней версии .osm.pbf экспортного файла
# URL_UPDATES - URL директории с обновлениями (должна содержать state.txt и дельты)
# PG_ENV_OSM_DB - БД PostGIS
# PG_ENV_OSM_DB - БД PostGIS. Если пустая - база обновляться не будет
# PG_ENV_OSM_HOST - хост/сокет БД
# PG_ENV_OSM_PORT - порт БД (по умолчанию 5432)
# PG_ENV_OSM_USER - пользователь БД
# PG_ENV_OSM_PASSWORD - пароль пользователя БД
use strict;
use DBI;
use POSIX;
my $dbh;
my $dir = $ENV{OSM_CACHE_DIR} || '/var/lib/mod_tile/downloads';
my $method = $ENV{OSM_METHOD} || 'osm2pgsql-carto';
my $url_latest = $ENV{URL_LATEST} || 'http://download.geofabrik.de/russia-latest.osm.pbf';
my $url_updates = $ENV{URL_UPDATES} || 'http://download.geofabrik.de/russia-updates';
if (!$ENV{PG_ENV_OSM_DB})
if (!$ENV{PG_ENV_OSM_DB} && !$ENV{OSM_UPDATE_FILE})
{
fatal("Не задана БД OSM");
}
info("Начато обновлением OSM базы данных: $ENV{PG_ENV_OSM_DB}");
if ($method ne 'osm2pgsql-carto' && $method ne 'imposm3-all')
{
fatal("Некорректный режим обновления: $method (поддерживаются только osm2pgsql-carto и imposm3-all)");
fatal("Не задана ни БД, ни файл для обновления");
}
-e $dir || mkdir($dir);
chdir $dir or fatal("Директория $dir не существует");
eval { run_update() };
eval
{
if ($ENV{PG_ENV_OSM_DB})
{
run_update_db();
}
if ($ENV{OSM_UPDATE_FILE})
{
run_update_file($url_latest, $url_updates, $dir);
}
};
if ($@)
{
fatal("Ошибка кода: $@");
}
exit(0);
sub run_update
sub run_update_db
{
require DBI;
my $method = $ENV{OSM_METHOD} || 'osm2pgsql-carto';
if ($method ne 'osm2pgsql-carto' && $method ne 'imposm3-all')
{
fatal("Некорректный режим обновления: $method (возможные значения: none, osm2pgsql-carto, imposm3-all)");
}
info("Начато обновлением OSM базы данных: $ENV{PG_ENV_OSM_DB}");
my $state = parse_geofabrik_state($url_updates, $dir);
my $dbh = DBI->connect(
'dbi:Pg:dbname='.$ENV{PG_ENV_OSM_DB}.';host='.$ENV{PG_ENV_OSM_HOST}.';port='.($ENV{PG_ENV_OSM_PORT}||5432),
@ -110,10 +121,6 @@ sub run_update
system("cat $dir/expire.list | render_expired --map=osm_bright --touch-from=11");
}
}
if ($ENV{OSM_UPDATE_FILE})
{
apply_deltas_file($url_latest, $url_updates, $dir);
}
}
sub parse_geofabrik_state
@ -300,7 +307,7 @@ sub apply_deltas_imposm3
}
}
sub apply_deltas_file
sub run_update_file
{
my ($url_latest, $url_updates, $dir) = @_;
my ($full_fn) = $url_latest =~ /([^\/]+)$/so;