Skip to content

Latest commit

 

History

History
31 lines (22 loc) · 5.07 KB

README.md

File metadata and controls

31 lines (22 loc) · 5.07 KB

murmansk_routes_pg

Одна из задач по тематике ГОБУ "Мурманская база авиационной охраны лесов" при тушении лесных пожаров: оптимизация доставки сил и средств наземным транспортом в условиях нескольких проблемных очагов. В качестве примера была реализована ситуация построения кратчайшего маршрута от комплекса зданий ГУ МЧС России по Мурманской области до точки из базы OpenStreetMap, которая наиболее близка к той, что задаёт кликом пользователь как очаг пожара в городе или в окрестных лесах.

Превью

Приложение реализовано на языке R с помощью API пакетов shiny и leaflet (также задействованы DBI, RPostgres, dplyr, sf, shinyalert). Средой исполнения служит shiny-сервер. Приложение, хранилища данных и необходимые для их работы компоненты размещены на облачном сервере Amazon Web Services EC2 под управлением Ubuntu 18.04 с 1 Гбайтом оперативной памяти. Версии основных программных компонентов манипулирования данными: PostgreSQL 10, PostGIS 2.4, pgRouting 2.6.2.

Карта содержит следующие объекты:

  1. Маркеры и тектовые метки для двух точек - начала и конца маршрута.
  2. Ломаную оптимального маршрута (линия синего цвета).
  3. Границу фрагмента карты, для которого построена база путей (зелёный прямоугольник).
  4. Границу фрагмента карты, внутри которого можно выбрать точку - очаг пожара (красный прямоугольник с заливкой).
  5. Границы и текстовые метки (появляются при наведении курсора мыши) для пригородов с указанием площади.

Справочная информация:

  1. Все данные взяты из OpenStreetMap (OSM). На момент подготовки данных (март 2019 г.) хранилище OSM для всей России имело объём более 2 Гбайт (архив PBF). Фрагмент для Мурманской области - 35 Мбайт (архив PBF).
  2. Для создания БД путей файл *.pbf разархивируется в *.osm (утилита osmconvert). В случае Мурманской области - 460 Мбайт. Далее этот объект можно превратить в PostgreSQL БД OSM (утилита osm2pgsql) - 823 Мбайта. Или сразу конвертировать с БД путей с поддержкой pgRouting (утилита osm2pgrouting ) - здесь сервер отказался выполнять конвертацию (похоже 1 Гбайт оперативы сыграл).
  3. Пришлось задать экстент и уменьшить PBF (тоже osmconvert, экстент: (32.93,68.86,33.5,69.05) - Мурманск и леса к востоку от города). Экстент изображается как объект (3) на карте. Итог: 3 Мбайта в архиве и 32 Мбайта после извлечения в *.osm. Далее БД путей (PostgreSQL c расширениями PostGIS и pgRouting) успешно сформировалась и стала занимать 25 Мбайт.
  4. Оптимальный маршрут для пары точек строится с помощью pgr_dijkstra из pgRouting - объект (2) на карте.
  5. Искусственное ограничение БД путей стало приводить к искажениям в итоговом маршруте, поэтому пришлось ограничить и область клика для выбора очага пожара, так появился объект (4).
  6. Ради эксперимента пригороды Мурманска были извлечены из PostgreSQL БД OSM в отдельный шейпфайл (папка towns), поэтому объекты (5) загружаются из него, а не из БД путей.

Ключевые ссылки:

  1. https://wiki.openstreetmap.org/wiki/Downloading_data
  2. https://workshop.pgrouting.org/2.5/en/chapters/prepare_data.html#prepare-the-database
  3. http://www.zoomadmin.com/HowToInstall/UbuntuPackage/osm2pgrouting
  4. https://wiki.openstreetmap.org/wiki/Osmconvert