Разработка прикладных задач для ГИС "Панорама"

Урок 4. Создание потоковых прикладных задач на примере задачи экспорта данных в базу данных PostgreSQL

Автор: Дарья Лунченко

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

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

Примечание:

PostgreSQL — это объектно-реляционная система управления базами данных, с открытым исходным кодом. Она поддерживает большую часть стандарта SQL и предлагает множество современных функций: сложные запросы, внешние ключи, триггер, изменяемые представления, транзакционная целостность, многоверсионность.

PostGIS — расширение объектно-реляционной СУБД PostgreSQL, предназначенное для хранения в базе географических данных.

Создание и наполнение БД PostgreSQL проводилось в программе pgAdmin 4.

Для работы таких задач, необходимо скачать и добавить в своё приложение DLL библиотеки и заголовочные файлы для доступа к интерфейсу MAPAPI, как это сделать, описано в уроке №1(п. 1,2,3).

1. Работа с базой данных PostgreSQL

Прежде, чем приступить к реализации нашей задачи рассмотрим особенности работы с пространственными объектами в PostgreSQL.
В качестве исходных данных в нашей задаче выступает карта сельскохозяйских угодий и таблица базы данных площадных объектов PostgreSQL, содержащая поля: code (bigint) - уникальный идентификатор, keyname(character(80))- ключ объекта, ownname(character(80)) - собственное название, the_geom(geometry) - метрика объекта (рис.1).

Рисунок 1- Вид таблицы базы данных в pgAdmin4

На карте были выбраны площадные объекты слоя границы сельхозугодий- отдельные участки пашни и экспортированы в таблицу БД polygon_objects (рис.2).

Рисунок 2 - Результат экспорта объектов в таблицу БД

Рассмотрим некоторые аспекты работы с БД PostgreSQL:

1) спецификация OpenGIS определяет два стандартных формата хранения метрики объектов Well-Known Text (WKT) и Well-Known Binary (WKB). В нашей БД поля для хранения метрики имеют тип данных geometry, и представляют собой формат WKB.

Примеры текстового представления (WKT) пространственных объектов приведены ниже:

Спецификация OpenGIS требует, чтобы внутренний формат хранения пространственных объектов включал идентификатор системы координат (spatial referencing system identifier - SRID). SRID необходим для добавления объекта в базу данных.

Ввод/вывод в этих форматах доступен с использованием следующих интерфейсов:

2) так как пример является демонстрационным, пользователь может экспортировать только точечные (POINT), линейные (LINESTRING) и площадные (POLYGON) объекты карты. Также при экспорте не учитываются подобъекты;

3) для экспорта данных в существующую БД, используются SQL запросы вида:

получить имена полей таблицы:

получить тип данных поля таблицы:

получить тип поля геометрии:

получить EPSG код:

получить поле первичного ключа:

вставить новую запись в таблицу площадных объектов:

вставить новую запись в таблицу линейных объектов:

вставить новую запись в таблицу точечных объектов:

2. Реализация программы экспорта данных

2.1 Создание потоковой задачи, описание работы с libpq.dll

Проект создан, как библиотека DLL MFC, в среде разработки Microsoft Visual Studio Community, которая может использоваться бесплатно в учебных целях. Как создать в Microsoft Visual Studio новый проект DLL, и настроить внешние зависимости, вы можете посмотреть в п.1-3 урока № 1.

Рисунок 3 - Структура проекта DLL экспорта объектов

Работа с БД PostgreSQL осуществляется с помощью набора специальных dll-библиотек (архив libpqdll), которые нужно добавить в папку с установленной ГИС "Панорама". Для доступа к функциям dll-библиотек PostgreSQL необходимо добавить во внешние зависимости указание на папку libpq с h-файлами PostgreSQL.

Ссылка на архивы со всеми необходимыми библиотеками приведены в конце страницы.

Чтобы осуществить вызов задачи из ГИС "Панорама" в модуле DLL, должны быть объявлены две функции:

1) функция сравнения версий библиотеки MAPACCES, используемой в DLL и в системе;

Если прикладная задача разрабатывается на Visual C++, то вместо "_export" необходимо записать "__declspec(dllexport)".

2) функция запуска выполнения прикладной задачи;

Рассмотрим функции работы с базой данных PostgreSQL:

1) подключение к базе данных, PGconnection - структура подключения к БД:

2) отправка запроса на сервер и ожидание результата PGresult:

3) определение количества строк и столбцов, получение значения результата:

4) установка пользовательской кодировки:

2.2 Описание класса экспорта данных

Задача экспорта данных позволяет, выбрав на карте объекты с одинаковым типом локализации, записать их в базу данных PostgreSQL,  в соответствии с настройкой семантик.

Рисунок 3 - Диалог экспорта данных карты

Для реализации экспорта объектов карты необходимо:
1) создать диалог и класс диалога экспорта данных CExportMapToPG, вызвать его в основной функции потоковой задачи MapToPostgreSQL;

2) использовать следующие функции MAPAPI, которые встречаются при реализации записи объектов в базу данных:

2.1) получить число выделенных объектов mapTotalSeekObjectCount , и создать пустой объект для обработки выделенных объектов - mapCreateObject;

2.2) перебрать выделенные объекты на карте - mapTotalSeekObject, проверить локализацию объекта, и сравнить с типом данных, выбранной таблицы базы данных, (площадные,линейные, точечные)- mapObjectLocal;

2.3) определить количество точек во внешнем контуре объекта - mapPointCount, получить координаты каждой точки контура mapGetPlanePoint;

2.4) определить количество заполненных семантик у объекта - mapSemanticAmount, запросить код семантической характеристики - mapSemanticCode, получить значение семантической характеристики - mapSemanticValue;

3. Добавление задачи в ГИС "Панорама"

Для подключения задачи в ГИС "Панорама" необходимо:

1) открыть программу и перейти в меню "Задачи"→"Запуск приложений";

2) в открывшемся окне, нажать кнопку "Добавить задачу", и выбрать файл библиотеки, который необходимо поместить в папку установки ГИС "Панорама";

3) чтобы запустить задачу, необходимо выбрать её из списка двойным щелчком мыши.

Таким образом, используя только функции MAPAPI, а также две функции потоковой задачи, мы можем быстро и просто встраивать свои решения в ГИС "Панорама".

Скачать архив со всеми необходимыми библиотеками >>>