G I S   T o o l K i t
Справочник программиста

Главная | MAPAPI | PANAPI | Примеры
 

ИМПОРТ ОБЪЕКТОВ КАРТЫ ИЗ 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 позволяет использовать любые карты и базы. Добавленные выше архивы с картой и базой приведены только для примера, если у вас нет собственных подходящих данных.

 
 

Касьянов О.В.
info@panorama.kharkov.ua

bigmir)net TOP 100