You are not logged in.

#1 2022-05-28 08:58:05

Eugeny Nikolaev
Member
Registered: 2022-05-27
Posts: 6

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

Здравствуйте уважаемые форумчане!
Вопросы новичков прочёл, не нашел необходимой мне информации, решил создать отдельную тему.
В данной теме я начинающий, поэтому заранее извиняюсь за неточности и скудоумие в тексте ниже.
С 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: … 1%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)

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

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

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

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

Offline

#2 2022-05-28 09:57:38

freeExec
Moderator
From: Ульяновск,Модератор всех слоёв
Registered: 2012-07-31
Posts: 8,460

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

Eugeny Nikolaev wrote:

RAILS OSM (локальный openstreetmap.org)

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

Offline

#3 2022-05-28 10:43:12

pfg21
Member
From: Чебоксары
Registered: 2012-10-18
Posts: 4,183

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

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

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

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

Offline

#4 2022-05-28 10:51:42

Eugeny Nikolaev
Member
Registered: 2022-05-27
Posts: 6

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

pfg21 wrote:

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

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

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

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

Offline

#5 2022-05-28 11:56:33

fndoder
Member
Registered: 2011-07-17
Posts: 374

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

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

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

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

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

Offline

#6 2022-05-28 13:37:03

Eugeny Nikolaev
Member
Registered: 2022-05-27
Posts: 6

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

fndoder wrote:

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

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

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

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

Большое спасибо. Всё-таки на выходе нужен не плагин, а самостоятельный исполняемый файл. Я в курсе, что это быстрее и проще сделать в виде плагина к qgis, что можно добавить соответствующие иконки для решения задач в интерфейс qgis. Хоть это проще и быстрее, но...
я пока буду этот функционал [пробовать] наращивать в автономном скрипте, потому что на выходе хотелось бы реализовать "макет специального программного обеспечения", а не расчёт в виде плагина.
Выглядит пока вот так:
GENESIS-SIRIUS-2022-05-28-15-20-37.png

Last edited by Eugeny Nikolaev (2022-05-28 20:20:06)

Offline

#7 2022-05-28 14:44:02

fndoder
Member
Registered: 2011-07-17
Posts: 374

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

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

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

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

Offline

#8 2022-05-28 14:49:47

fndoder
Member
Registered: 2011-07-17
Posts: 374

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

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

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

Offline

#9 2022-05-28 15:24:37

Eugeny Nikolaev
Member
Registered: 2022-05-27
Posts: 6

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

fndoder wrote:

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

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

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

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

Last edited by Eugeny Nikolaev (2022-05-28 15:25:29)

Offline

#10 2022-05-28 15:32:36

fndoder
Member
Registered: 2011-07-17
Posts: 374

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

Eugeny Nikolaev wrote:

Следующий шаг - Я так понимаю [читая gis-lab.info], необходимо экспортировать эти данные в БД через osm2pgsql, shp2psql?

Да

Offline

#11 2022-05-28 20:18:26

Eugeny Nikolaev
Member
Registered: 2022-05-27
Posts: 6

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

fndoder wrote:
Eugeny Nikolaev wrote:

Следующий шаг - Я так понимаю [читая gis-lab.info], необходимо экспортировать эти данные в БД через osm2pgsql, shp2psql?

Да

Всё получилось.
- экспортировал osm.pbf в pgsql
- сделал коннект к pgsql
- поигрался с разными фильтрами, запросами и т.д.
Получилось вот так (с подключенным слоем OSM standart):
Ubuntu-POSTGIS-2022-05-28-22-00-50.png
Как писали выше, теперь надо изучать создание стиля карты.
Это как?
В QGIS подключать какие-то стили или что-то с mapnik-ом городить?

Last edited by Eugeny Nikolaev (2022-05-28 20:19:05)

Offline

#12 2022-05-28 21:21:37

fndoder
Member
Registered: 2011-07-17
Posts: 374

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

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

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

Offline

#13 2022-05-29 18:37:57

Eugeny Nikolaev
Member
Registered: 2022-05-27
Posts: 6

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

Подскажите пожалуйста.
В наличии имеются два набора: данные osm.pbf, импортированные в pgsql (рис.1)и те же самые слои в виде shp (рис.2).
Ubuntu-POSTGIS-2022-05-29-14-40-44.png
                                                        рис.1
Ubuntu-POSTGIS-2022-05-29-14-43-28.png
                                                        рис.2
Искал варианты, как это визуализировать покрасивее.
Нашёл следующий вариант вот тут:
https://youtu.be/Ki45je1USXo?list=PLlRO … SX0UvJWa98
Автор, опубликовавший больше 100 толковых уроков, говорит что можно взять (он называет это "стибрить") готовые стили из демо-проектов NextGIS (рис.3), и скопировать на свои shp-слои, в итоге можно получить такую же визуализацию.
Ubuntu-POSTGIS-2022-05-29-14-39-49.png
                                                        рис.3
Он копирует стиль для слоя "Здания" из демки NextGIS и вставляет стиль в слой "gis_osm_buildings...".
У меня возникает вопрос - со зданиями понятно, а дальше... чему из NextGIS соответствуют остальные слои osm, например " gis_osm_landuse"?

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

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

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

Offline

Board footer

Powered by FluxBB