Вопрос по разработке архитектуры

Здравствуйте уважаемые форумчане!
Вопросы новичков прочёл, не нашел необходимой мне информации, решил создать отдельную тему.
В данной теме я начинающий, поэтому заранее извиняюсь за неточности и скудоумие в тексте ниже.
С 2019 в качестве хобби начал разрабатывать приложение для расчёта зон покрытия радиоисточников и оптимизации их размещения.
Так как в организации, где я работаю, были специалисты по работе с ГИС “Панорама”, приложение было написано на с++ в среде Qt5 с использованием проприентарных библиотек ГИС-конструктор + mapapi.h. В приложении используются векторные карты формата sxf.
Коллегам приложение понравилось, и в настоящий момент некоторые из них его используют как средство поддержки принятия решений.

         Как-то однажды наткнулся на видеоурок по QGIS и подключению к ней различных геосервисов, в первую очередь Openstreetmap.

В тех картах sxf, которые я использовал ранее, имеются векторные слои, которые используются в моих расчётах, то есть создается т.н. модель препятствий, и используются в основном данные о рельефе, городской застройке, высоте леса и некоторые другие данные, влияющие на распространение радиоволн.
В семантических данных объектов с сервиса OSM имеется БОЛЕЕ актуальная полезная информация (например, количество этажей в здании, да и вообще здания), в то время как в sxf у меня имеется только полигон с названием типа “квартал плотной застройки”…
В силу этих причин я решил попробовать переписать свою программу с использованием набора векторных карт, выкачанных с planet.openstreetmap.org.

Для разминки написал скрипт на python, используя библиотеки qgis, который может извлекать информацию из подгруженных векторных слоёв shp,
а в качестве растровой подложки отрисовывать данные с osm.

В силу определенных причин в нашей организации используется только закрытая корпоративная сеть, никакой интернет использовать нельзя;).
Поэтому возникла необходимость в организации автономного сервиса, подобного osm.

В общем, первичный замысел у меня приблизительно таков (у меня в нем много сомнений, но о них ниже):

  1. Написать клиентское приложение для необходимых расчётов и их визуализации, которое будет использовать какие-то необходимые векторные слои, но для удобства, обращение к этим слоям должно происходить как бы “под капотом” приложения, то, что должен
    делать пользователь - видит карту openstreetmap, (при необходимости как-то управляет стилем отображения, например, если нужен только рельеф или застройка города, то в каком-то меню галочку ставим и т.д., убирая лишнее с карты), наносит некоторые векторные значки (ретрансляторы, базовые станции), после расчётов получает полупрозрачные зоны покрытия, отрисованные поверх подложки в отдельном слое. Причем должна быть возможность сохранения этих слоев (с расположениями радиоисточников и их зон покрытия), т.е. пользователь может сохранять различные сценарии расчётов.
    Приложение планируется на python + Qt5 + различные импорты из qgis.

  2. Поднять в локальной сети организации тайловый сервер для отрисовки растровой подложки

  3. Хранение векторных слоёв, необходимых для расчёта, реализовать либо вместе с клиентским приложением, либо в каком-нибудь сетевом хранилище и их подгружать по необходимости

Ознакомился с инструкцией https://wiki.openstreetmap.org/wiki/RU:%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_OSM-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0
Начал работать по ней, дошёл до установки mapnik, но возникли опасения, а всё ли из данной инструкции мне нужно? Тем более она написана довольно давно (в 2015г), соответственно граблей будет довольно много.

В настоящий момент поставил Ubuntu, развернул RAILS OSM, изучаю материал.
Я пока не силен в понимании всех технологий, что у них “под капотом”, но изначально хотелось бы сократить количество своих неверных “концептуальных решений”.
Хотел бы спросить тех, кто в “данной теме” дольше, чем я:

  1. Подойдёт ли для моих задач классический набор из большинства HowTo, а именно:
    RAILS OSM (локальный openstreetmap.org)
    PostgreSQL + PostGIS (БД)
    apache + mod_tile (веб-сервер + кеширование тайлов)
    mapnik (рендерер, управление стилем отображения, визуализация векторных данных)
    renderd (оптимизация запросов на рендеринг)
    osmosis или osm2pgsql (иногда наверное надо будет как-то обновлять данные из openstreetmap)
    Openlayer или Leaflet (для работы с html)

Что из этого списка может быть избыточным? Или может что-то добавить?

  1. Что-то мне подсказывает, что я могу из pbf извлекать данные для работы с векторными слоями и одновременно их (через mapnik) отрисовывать.
    Но пока в понимании у меня небольшая каша)

  2. Первая самая важная задача, которую необходимо реализовать - открыть (без обращения к интернет) какую либо карту города, получить картинку, такую же как и с использованием openstreetmap, при этом получить данные о координатах и семантике растительных покрытий, рельефе, городской застройке. Как-то так.

Прощу советов у сообщества и знающих людей.
Заранее премного благодарен!

Не нужен, это для редактировании базы как обычный мапер.
Изучайте PostGIS и создание стиля карты, так вы поймёте как обращаться и извлекать данные.

  1. изучай постгис - бибилотека большого количества запросов географических функций на основе подготовленной бд постгре.
    карту источников можешь хранить там же,если подойдет функциональность или отдельно. можно отдельно готовить растровую/векторную карту наложения и подкладывать тайлики карты мапника. большинство так и делают

osm.xml pbf - обменные форматы напрямую с ними работать не получится.
они импортируются в бд индексируются подготавливаются и только потом используются.

обновления можно таскать хоть на флешке. все объекты осм версионированы, так что можно разделить на быстрый импорт новых данных с отключением сервисов и потом фоновый низкоприоритетный процесс удаления старых версий объектов при работающих сервисах

Огромное спасибо!
А создать именно автономную программу, использующую функции PostGIS возможно?
Не плагин к ГИС, а именно программу, которая выводит карту в отдельный виджет.

Для решения стоящей задачи достаточно QGIS (рендеринг всех слоёв, пользовательский интерфейс), PostgreSQL и PostGIS (хранение и обработка данных), Python (обработка данных; можно и иной язык).

Более того, стоящие перед автором задачи решаются и без БД (в частности, “первая самая важная задача”), см. https://wiki.openstreetmap.org/wiki/Shapefiles
Но PostGIS упростит и ускорит последующие задачи, поэтому целесообразнее сразу задействовать БД.

Тут нужно идти иным путём. Назвать QGIS с плагином “автономная импортозамещающая программа расчёта зон покрытия радиоисточников и оптимизации их размещения”.

Большое спасибо. Всё-таки на выходе нужен не плагин, а самостоятельный исполняемый файл. Я в курсе, что это быстрее и проще сделать в виде плагина к qgis, что можно добавить соответствующие иконки для решения задач в интерфейс qgis. Хоть это проще и быстрее, но…
я пока буду этот функционал [пробовать] наращивать в автономном скрипте, потому что на выходе хотелось бы реализовать “макет специального программного обеспечения”, а не расчёт в виде плагина.
Выглядит пока вот так:

Понял, что требуется сделать строго по эскизу интерфейса.

Но я бы взял QGIS, выпилил (скрыл) все лишние меню и панельки, добавил свою панельку с кнопками и вот, готово - “макет специального программного обеспечения”.

Результат лучше и быстрее, а трудозатрат меньше.

Кроме того, рано или поздно заказчику понадобятся стандартные инструменты ГИС (пусть он это пока и не сформулировал). А так просто убрать скрытие “лишних” элементов интерфейса и готово.

Иной вариант: есть вот такая штука - https://nextgis.ru/blog/reestr/
Это QGIS с документами “отечественное ПО”.
Можно использовать её.

Да, я обратил внимание на NextGIS, и заметил, что это тот же qgis по сути.
Особенно на их сервис Веб ГИС, довольно удобный. Интересно, а QGIS такое умеет?
Но меня отпугивает всё, где надо регистрироваться и бесплатно получать demo-версию.

   Согласен с вами.  Попробую для начала получить что-нибудь через QGIS, уговорили. И вообще интерфейс и все рюшечки это пока не важно.

Главное - оффлайн визуализация карт и считывание нужных векторных данных.

В общем, поставил PostgreSQL + PostGIS, выкачал нужный мне файл osm.pbf, (судя по ответу выше, без разницы, что использовать pbf или osm).
Следующий шаг - Я так понимаю [читая gis-lab.info], необходимо экспортировать эти данные в БД через osm2pgsql, shp2psql?

Да

Всё получилось.

  • экспортировал osm.pbf в pgsql
  • сделал коннект к pgsql
  • поигрался с разными фильтрами, запросами и т.д.
    Получилось вот так (с подключенным слоем OSM standart):

    Как писали выше, теперь надо изучать создание стиля карты.
    Это как?
    В QGIS подключать какие-то стили или что-то с mapnik-ом городить?

С Mapnik ничего городить не надо, это рендер карт, к QGIS отношения не имеющий. QGIS сама карты рендерит.

Про работу со стилями в QGIS подробно расписано в прилагаемой к QGIS документации.

Подскажите пожалуйста.
В наличии имеются два набора: данные osm.pbf, импортированные в pgsql (рис.1)и те же самые слои в виде shp (рис.2).

рис.1

рис.2
Искал варианты, как это визуализировать покрасивее.
Нашёл следующий вариант вот тут:
https://youtu.be/Ki45je1USXo?list=PLlRO0Qw6GY9GiQYhSyYcAOHSX0UvJWa98
Автор, опубликовавший больше 100 толковых уроков, говорит что можно взять (он называет это “стибрить”) готовые стили из демо-проектов NextGIS (рис.3), и скопировать на свои shp-слои, в итоге можно получить такую же визуализацию.

рис.3
Он копирует стиль для слоя “Здания” из демки NextGIS и вставляет стиль в слой “gis_osm_buildings…”.
У меня возникает вопрос - со зданиями понятно, а дальше… чему из NextGIS соответствуют остальные слои osm, например " gis_osm_landuse"?

Что-то он там показывает. В итоге, я не вижу, чтобы у него что-то изменялось, у меня стиль тоже как-бы копируется и вставляется без ошибок, но результат нулевой. У меня подозрение на то, что состав слоёв разный (рис. 4)

рис.4

Ладно, хоть я решил разбираться с запросами (spatial query вроде бы) попозже, понимаю, что без этого никак в PostGIS.
Эх, опять надо разбираться))
Глянул описание слоев osm вот тут
https://wiki.openstreetmap.org/wiki/RU:%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82%D1%8B

В общем, [как я понял,] используя по ссылке выше ключ и значение, можно выбирать из слоев osm.shp нужные мне объекты ПО ВЫРАЖЕНИЮ,
и применять (копировать) к ним стили из соответствующих слоёв NextGIS.
Вопрос. Подскажите пжста, мои предположения верны?
Уголком мозга понимаю, что сервис https://nextgis.ru/services/dataosm/ использует готовые скрипты, сценарии sql, наборы правил, что-то, чтобы выгружать нужную инфу с osm и создавать свои красивые слои с кириллицей.
Мои рассуждения верны?
Предполагаю, что я “выдумываю колесо”, в то время когда “рядом стоит велосипед”.
Помогите дельным советом пжста)
Я понимаю, что меня скорее всего отошлют читать документацию, но… лень - двигатель прогресса.