ИМПОРТ ОБЪЕКТОВ КАРТЫ ИЗ POSTGRESQL
Автор: Дарья Лунченко
В примере решается задача импорта объектов из таблицы базы данных PostgreSQL на карту. Таблица БД PostgreSQL содержит следующие поля: code (bigint) - уникальный идентификатор, keyname(character(80))- ключ объекта, ownname(character(80)) - собственное название, the_geom(geometry) - метрика объекта (рис.1).
Рисунок 1- Вид таблицы базы данных в pgAdmin4
Пример частной задачи импорта площадных объектов (новые районы под строительство) на карту Харьковской области (рис.2,3).
Рисунок 2 - Вид карты до импорта объектов
Рисунок 3 - Результат импорта объектов на карту
1. Реализация программы импорта данных
Проект создан, как библиотека DLL MFC, в среде разработки Microsoft Visual Studio Community.
Как создать в Microsoft Visual Studio новый проект DLL, и настроить внешние зависимости, вы можете посмотреть здесь.
Структура проекта представлена на рис. 4.
Работа с БД PostgreSQL осуществляется с помощью набора специальных dll-библиотек (архив libpqdll), которые нужно добавить в папку с утановленной ГИС "Карта". Для доступа к функциям dll-библиотек PostgreSQL необходимо добавить во внешние зависимости указание на папку libpq с h-файлами PostgreSQL.
Также необходимо добавить во внешние зависимости также указание на папку include, содержащую объявление функций интерфейса "MAPAPI". Ссылки на архивы со всеми необходимыми библиотеками приведены в конце страницы.
Необходимые сведения о функциях и запросах, используемых при работе с PostgreSQL, приведены здесь.
Список функций MAPAPI, используемых в данном примере:
// Запросить внутренний код (порядковый номер) объекта
// по ключу
mapGetRscObjectCodeByKey
// Запросить код локализации объекта
// по порядковому номеру в заданном слое
mapGetRscObjectLocal
// Запросить количество семантик в классификаторе
mapGetRscSemanticCount
// Запросить код семантики по порядковому номеру
mapGetRscSemanticCodeByNumber
// Запросить название семантики по порядковому номеру в кодировке UNICODE
mapGetRscSemanticNameByNumberUn
// Создать контекст (описание условий) поиска/отображения
// объектов карты
mapCreateMapSelectContext
// Установить доступ к объектам c заданной локализацией
mapSelectLocal
// Диалог выбора вида объекта из файла ресурсов
medChoiceTypeObjectParm
// Cоздать пустой объект векторной карты
mapCreateObject
// Сформировать описание нового объекта
// по внутреннему коду объекта
mapDescribeObject
// Запросить классификационный код объекта
mapObjectExcode
// Сохранить данные об объекте в файле
mapCommitObject
// Запросить характер локализации объекта
mapObjectLocal
// Запросить уникальный идентификатор вида объекта в классификаторе
mapObjectRscKey
// Удалить контекст (описание условий) поиска/отображения
// объектов карты
mapDeleteSelectContext
// Удалить объект карты
mapDeleteObject
// Удалить описание объекта векторной карты из памяти
mapFreeObject
// Запросить количество видов семантик, которые еще могут быть
// добавлены для данного объекта
mapAvailableSemanticCount
// Запросить индекс (внутренний код) объекта
mapObjectCode
// Запросить список всех кодов семантики для данного объекта
mapGetRscSemanticObjectCodeList
// Запросить название семантики по коду в кодировке UNICODE
mapGetRscSemanticNameUn
// Сформировать описание нового объекта по короткому имени объекта
// (ключу) или изменить код существующего объекта на карте
mapRegisterObjectByKey
// Добавить в конец метрики объекта точку
mapAppendPointPlane
// Добавить новую характеристику в семантику объекта
mapAppendSemantic
2. Алгоритм работы пользователя
1) выбрать меню «Задачи»-> «Запуск приложений»-> «Импорт объектов из таблицы БД PostgreSQL»;
2) ввести параметры подключения к базе данных, и нажать кнопку «Подключиться»;
3) выбрать таблицу базы данных для импорта объектов из БД PostgreSQL;
4) выбрать поле идентификатора, если оно есть в таблице, и поле метрики;
5) выбрать тип установки ключа объекта: выбирать ключ объекта из поля таблицы БД (рис.4), выбирать ключ объекта из стандартного диалога выбора объектов (рис.5);
Рисунок 4 - Установка ключа объекта по полю таблицы
Рисунок 5 - Установка ключа объекта из диалога
6) настроить в соответствие полям таблицы семантики объекта: выбрать поле из первого списка, и сделать двойной щелчок мыши на семантике из второго списка;
7) нажать кнопку «Выполнить».
Данные для загрузки:
1) Задача импорта данных в PostgreSQL (только для ГИС "Карта" 12-й версии): PostgreSqlImportDll.zip
2) dll-библиотеки PostgreSQL (должны быть скопированы в папку установки ГИС "Карта"): libpqdll.zip
3) Исходные файлы примера: codex002.zip
4) h-файлы интерфейса Mapapi для VC++: include.zip
5) h-файлы PostgreSQL: libpq.zip
6) Пример карты для импорта/экспорта: map001.zip
7) Пример базы данных PostgreSQL: db001.zip
Задача импорта данных PostgreSQL позволяет использовать любые карты и базы. Добавленные выше архивы с картой и базой приведены только для примера, если у вас нет собственных подходящих данных.