VERTEP Вход

Загрузка данных OSM в БД postgresql для сервера Tegola.

14 сентября 2021 г. 14:49,

В предыдущей части были подготовлены база данных и необходимые для загрузки инструменты, частности OpenMapTiles. В этой части описание загрузки данных.

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

Установка screen

sudo apt install screen
# запустим
screen
# и перейдём в каталог с инструментами загрузки
cd /osm/openmaptiles

Будем использовать стандартный метод: все необходимые данные будут скачиваться из интернета и загружаться в БД, ничего предварительно скачивать не понадобится.

Если ранее были загружены какие-то данные, которые теперь не нужны, сначала необходимо их удалить

make clean
make

Также удалить всё из каталога /osm/openmaptiles/data. В этом каталоге после окончания скачивания будут находиться сам *.pbf файл региона, файл <имя_региона>.bbox и каталог borders со вспомогательными файлами.

Загрузка свежих данных OSMData, NaturalEarth, и OSM Lake Labels

make import-data

Занимает примерно 2 минуты.

Закачка данных OSM нужного региона

Россия (2.9GB)

make download area=russia

вся планета (59GB)

make download area=planet

Начнётся закачка pbf-файла указанного региона, источник загрузки будет выбран автоматически. Если хочется задать конкретный источник OSM-данных, то команда, например, для geofabrik.de будет такая:

make download-geofabrik area=russia

Остальные источники (и кучу полезных команд) можно посмотреть с помощью make help

Файл региона будет помещён в каталог /osm/openmaptiles/data. В этом каталоге после окончания скачивания будут находиться сам *.pbf файл региона, файл <имя_региона>.bbox и каталог borders со вспомогательными файлами. Скорость закачки зависит от скорости подключения к интернету, в моём случае планета закачивется около 12 минут.

Релиз OpenMapTiles, используемый мной на август 2021 года содержит ошибку, которая происходит при закачивании региона planet (russia ошибку не вызывает):

Status Legend:
(OK):download completed.
Traceback (most recent call last):
 File "/usr/src/app/download-osm", line 763, in <module>
   main()
 File "/usr/src/app/download-osm", line 759, in main
   exit(asyncio.run(main_async(docopt(__doc__, version=openmaptiles.__version__))))
 File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run
   return loop.run_until_complete(main)
 File "/usr/local/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
   return future.result()
 File "/usr/src/app/download-osm", line 691, in main_async
   if bbox:
UnboundLocalError: local variable 'bbox' referenced before assignment
make: *** [Makefile:328: download] Error 1

Файл региона planet.osm.pbf скачивается нормально, но не создаётся файл planet.bbox, каталог borders создаётся, но пустой. Эта ошибка на момент написания статьи известна разработчикам и, скорее всего, уже исправлена. На дальнейшую работу не влияет.

Загрузка данных в БД postgresql.

Если screen ещё не запущен, самое время запустить (и не забыть перейти в каталог /osm/openmaptiles после запуска).

Команда

make import-osm

начнёт загрузку скачанного ранее файла региона в БД.

Вывод загрузки данных:

Загрузка региона planet на указанном железе с указанными настройками БД длится примерно 6 часов:

[Sep 14 19:50:01] [INFO] Imposm took: 6h10m56.384795542s

Регион russia (Россия) загружается около 17 минут.

Оставшиеся команды:

Формирование границ:

make import-borders

Выполняется быстро, примерный вывод:

Filtering data/planet.osm.pbf into data/borders/filtered.pbf
Creating a CSV borders file data/borders/lines.csv
There were 0 warnings.
There were 0 errors.
Importing data/borders/lines.csv into 192.168.1.2:5432/osm as table osm_border_linestring...
NOTICE: drop cascades to 19 other objects
DETAIL: drop cascades to materialized view osm_border_linestring_gen_z13
drop cascades to materialized view osm_border_linestring_gen_z12
drop cascades to materialized view osm_border_linestring_gen_z11
drop cascades to materialized view osm_border_linestring_gen_z10
drop cascades to materialized view osm_border_linestring_gen_z9
drop cascades to materialized view osm_border_linestring_gen_z8
drop cascades to materialized view osm_border_linestring_gen_z7
drop cascades to materialized view osm_border_linestring_gen_z6
drop cascades to materialized view osm_border_linestring_gen_z5
drop cascades to materialized view osm_border_linestring_gen_z4
drop cascades to view boundary_z5
drop cascades to view boundary_z6
drop cascades to view boundary_z7
drop cascades to view boundary_z8
drop cascades to view boundary_z9
drop cascades to view boundary_z10
drop cascades to view boundary_z11
drop cascades to view boundary_z12
drop cascades to view boundary_z13
DROP TABLE
CREATE TABLE
CREATE INDEX
COPY 2306799

Импорт меток:

make import-wikidata

Длится примерно 30-35 минут для региона planet, примерный вывод:

...
Querying Wikidata for 4,787 redirect IDs...
Inserted 4,787 Wikidata IDs from WDQS into wd_names table
Saving 1,199,209 items to cache /cache/wikidata-cache.json

Формирование слоёв (layers) данных:

make import-sql

Этот этап длится около 9-10 часов для региона planet в течение которых на экране мелькают операторы SQL. Окончание выглядит примерно так:

Finished importing sql files matching '/sql/parallel/*.sql'
Importing /sql/run_last.sql (md5 85cf5747d76388d1f141272bf4bfbd40 - 39 lines) into Postgres...
Timing is on.
DROP FUNCTION
Time: 2.451 ms
CREATE FUNCTION
Time: 6.939 ms
user@Ubuntu-1804-bionic-64-minimal:/osm/openmaptiles$

На этом загрузка данных закончена.

Данные для сервера Tegola подготовлены, следующий этап - установить и настроить сам сервер и сделать веб-страницу (клиент), отображающую карту.


Категории: Tegola


Категории