Как создать свою ГИС с помощью GIS ToolKit Active

Урок 11. Работа с ГИС Сервером и подключение геопорталов

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

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

ГИС-Сервер - программа, предоставляющая удаленный доступ к векторным картам, растрам, матрицам, атласам и связанным с ними документам, разных типов (изображения, файлы Word, Excel, PDF-файлы и прочее). ГИС-Сервер позволяет нескольким пользователям одновременно работать с одними и теми же картой. Важным преимуществом использования ГИС-Сервер в проектах с большим числом пользователей является возможность управления правами доступа к данным. Все пользователи распределяются по группам, которым предоставляется определенный набор прав по работе с картами и данными. При этом каждый пользователь имеет свой собственный логин и пароль для входа на сервер, что дает возможность администратору не только определять права доступа, но и мониторить действия конкретного пользователя.

В этом уроке мы рассмотрим, как с помощью функций MAPAPI реализовать в нашем приложении работу с данными ГИС-Серверов.

Также мы научим наше приложение подключать и отображать пространственные данные, публикуемые популярными web-сервисами Google, Yandex, Bing, OpenStreetMap и другими, которые поддерживают основные стандарты передачи данных OGC, WMS, WMTS, TMS.

После этого наше ГИС-приложение будет уметь:

  • получать данные, хранящиеся на ГИС-Сервере;
  • подключать и отображать геопорталы;
  • вызывать диалог сортировки карты;
  • редактировать паспорт карты;
  • изменять систему отображения координат курсора.

Внешний вид приложения представлен на рис.1.

Рисунок 1 - Внешний вид приложения
 

Скачать рабочий образец программы, ее исходный код, а также примеры данных, используемые в этом уроке, можно на страничке "Дополнительные материалы к уроку 11". Если у вас не установлен GIS ToolKit Active, то для запуска приложения вам потребуется загрузить библиотеки GIS ToolKit, и выполнить их регистрацию. Все необходимые библиотеки и короткая инструкция размещены на этой же странице.

 

1. Организация работы приложения с ГИС-Сервером

Для организации централизованного хранения и коллективной работы с данными используем программу ГИС-Сервер x64. Соединение приложения с сервером выполняется по протоколу TCP/IP. Между клиентом и сервером передаются двоичные данные, представляющие собой координаты объектов, атрибуты, блоки данных растров и матриц. Для добавления данных на сервер, создания списка клиентов и формирования прав доступа к ним, используется программа ГИС-Администратор.

Если вы не знакомы с настройкой ГИС-Сервер, то узнать, как разместить на ГИС-Сервере данные и задать права доступа пользователей, вы можете, посмотрев этот небольшой видеоурок.

Для получения данных с ГИС-Сервера пользователю необходимо:

  1. Пройти регистрацию в диалоге подключения к ГИС-Серверу, введя логин и пароль (рис.2);
  2. Выбрать данные из списка в виде дерева, и нажать кнопку "Открыть" или "Добавить" для открытия или добавления данных к уже открытым (рис.3).

Рисунок 2 - Регистрация пользователя на ГИС Сервере
 

Рисунок 3 - Подключение данных с ГИС сервера
 

Реализация функции:

  • создадим новый класс FGISServer.cs, в который в дальнейшем, поместим функции для работы с ГИС-Сервером и геопорталами;
  • в классе FMapAPI.cs импортируем функцию MAPAPI svOpenData для вызова диалога выбора данных доступных пользователю на ГИС-Сервере;


 

  • в событии по нажатию на кнопку подключения к ГИС-Серверу на главной форме Form1.cs, вызываем импортируемую функцию;


 

  • при нажатии кнопки "Открыть" в диалоге выбора данных см. рис.3, главному окну приложения посылается сообщение AW_OPENDOCUN (0x623) с именем выбранных данных;
  • при работе с растрами (FRstEdit.cs) мы уже перехватывали оконные сообщения с помощью обработчика WndProc, переходим к нему и при получении сообщения AW_OPENDOCUN с помощью метода MapView1.MapOpen, открываем данные;


 

  • при условии, что в приложении уже открыты какие-либо данные, для того чтобы активировать кнопку "Добавить" в диалоге выбора данных с ГИС-Сервера, посылается сообщение AW_GETCURRENTDOC (0x673), в ответ на которое необходимо вернуть указатель на идентификатор данных и идентификатор окна с открытой картой;
  • в WndProc перехватываем сообщение AW_GETCURRENTDOC и, используя небезопасный код, передаем идентификаторы данных и окна с картой.

 

2. Подключение геопорталов

Диалог подключения геопорталов позволяет взаимодействовать нашему ГИС приложению и web-сервисам. Выбранные из диалога web-сервисы могут отображаться совместно с уже открытыми картами, растрами, матрицами высот, что очень удобно при уточнении информации на карте, совместном отображении с матрицами качеств определенной территории, создании карт и т.д.

Для того чтобы подключить геопортал пользователю необходимо:

  1. По нажатию на кнопку подключения геопорталов, выбрать его из списка доступных (рис.4) ;
  2. По нажатию на кнопку параметров открытых геопорталов (wms-растров), установить по желанию такие параметры как степень прозрачности, яркость, контрастность WMS-растра (рис.5);

Рисунок 4 - Выбор геопортала
 

Рисунок 5 - Настройка отображения геопорталов
 

Реализация:

  • добавляем на главную форму Form1.cs компонент axMapWMSPopupDialog - "всплывающее меню" подключения WMS-порталов, который доступен в версии GisToolKit Active 11.3.13;
  • связываем его свойством cMapView c компонентом отображения карт axcMapView;
  • в событии по нажатию на кнопку подключения геопорталов с помощью свойств MapWMSPopupDialog.PopupLeft, MapWMSPopupDialog.PopupTop, определяем позицию отображения диалога в окне, и используя метод MapWMSPopupDialog.Execute, вызываем диалог подключения WMS-порталов;


 

Примечание: для успешного добавления геопорталов, в каталоге проекта необходимо разместить файлы - epsg.csg, epsg.csp, epsg.csu для обработки проекций и систем координат геопорталов, файл настроек подключения к геопорталам wmslist.xml и директорию wmslist, содержащую иконки геопорталов.

  • создаем новую форму GeoPortSettings.cs для настройки параметров отображения геопорталов (рис. 6);

Рисунок 6 - Элементы формы параметров геопорталов
 

  • в событии по нажатию на кнопку настройки параметров отображения геопорталов с помощью свойства MapView1.WMScount, определяем количество открытых геопорталов и добавляем их на форму в ComboBox для выбора, создаем список WmsParametrs, в котором будем запоминать настроенные пользователем параметры каждого открытого WMS-растра;


 

  • при изменении флага "Над картой", используя метод MapView1.WMSViewOrder_set, устанавливаем порядок отображения геопортала, передавая в метод значение 0 - под картой, 1 - над картой;


 

  • используя свойство MapView1.WMSTransparent_set, устанавливаем степень прозрачности геопортала: 0 - не виден, 1 - полная видимость, 2 - насыщенная, 3 - полупрозрачная, 4 - средняя, 5 - прозрачная и, записываем соответствующее значение в список параметров WmsParametrs ;


 

  • при изменении ползунка яркости и контраста, используя свойства MapView1.WMSBright_set, MapView1.WMSContrast_set, устанавливаем соответствующие яркость и контрастность геопортала в пределах от -16 до 16, записываем значения ползунков в TextBox и в список параметров WmsParametrs;


 


 

  • при выборе другого геопортала из списка уже добавленных восстанавливаем в диалоге параметров значения, настраиваемые для каждого геопортала;


 

  • при нажатии в диалоге настройки параметров кнопки "Отмена", сбрасываем установленные параметры в исходные;


 

  • при добавлении геопортала к карте на время сеанса карта принимает проекцию геопортала, и для корректного отображения координат при передвижении курсора мыши, свойством MapView1.WMSCount проверяем открыт ли геопортал, и если да, то к координатам курсора мыши не добавляем значения левого верхнего угла окна просмотра карты в пикселях;

 

3. Диалог просмотра и редактирования паспорта карты

При создании карты, пользователь мог не указать некоторые параметры ее проекции, или неправильно задать какой-либо из параметров, что, к примеру, может привести к невозможности подключения геопорталов к карте. В таком случае ему необходимо получить доступ к паспорту карты, что и позволит нам сделать диалог просмотра и редактирования паспорта карты (рис.7).

Рисунок 7 - Диалог редактирования паспорта карты
 

Для того чтобы добавить данный диалог, создадим в панели элементов главного окна приложения "Задачи" меню "Редактирование паспорта карты", и по нажатию на него, используя функции MAPAPI mapGetActiveSite - запрашиваем активную пользовательскую карту, paspViewPasp - открываем диалог редактирования паспорта.

 

4. Сортировка карты

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

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

Диалог сортировки представлен на рис. 8.

Рисунок 8 - Диалог "Сортировка объектов карты"
 

Для внедрения данного диалога в наше приложение, создадим в панели инструментов "Задачи" меню "Сортировка карты" и по нажатию, используя функцию MAPAPI MapSort, вызываем диалог сортировки объектов карты.

 

5. Изменение формата отображения координат курсора

При работе с картой может быть полезна функция по изменению формата отображения координат при передвижении мыши. Далее мы рассмотрим с вами, как перевести координаты из прямоугольных в метрах в геодезические в системах координат СК-42 года, WGS 1984, ПЗ - 90.02 в радианах; десятичных градусах; градусах, минутах, секундах.

Реализация:

  • добавим меню в панели инструментов приложения "Параметры" и соответствующие выпадающие списки (рис.9)

Рисунок 9 - Вид меню "Параметры"
 

  • определим два флага cursorParam - для определения выбранной системы координат курсора, cursorParamView - при геодезической системе координат курсора, для определения в каких единицах измерения необходимо отображать данные координаты;
  • в событии по нажатию на меню перехода из одной системы координат в другую, устанавливаем свои значения флагов для каждой системы координат (СК);


 

  • в классе FMapAPI.cs импортируем функции:

    mapPlaneToMap - преобразование из метров на местности в дискреты;
    mapPlaneToPicture - преобразование из метров на местности в пикселы на изображении;
    mapIsGeoSupported - запрос: поддерживается ли пересчет к геодезическим координатам из прямоугольных и обратно;
    mapPlaneToGeo42 - преобразование из метров на местности (проекция карты) в геодезические координаты в радианах (эллипсоид Красовского, СК-42);
    mapPlaneToGeoWGS84 - преобразование из метров на местности (проекция карты) в геодезические координаты в радианах (общеземной эллипсоид WGS84);
    mapPlaneToGeoEP903D - преобразование прямоугольных координат в метрах из системы координат карты в геодезические координаты в радианах системы ПЗ-90(общеземной эллипсоид ПЗ-90);


 

  • в событии передвижения мыши по экрану MapView1_OnMapMouseMove, используя импортируемые функции, преобразовываем координаты курсора мыши из метров в выбранную пользователем систему координат;


 

  • выводим полученные координаты в том же виде в строку статуса в окне приложения или же, преобразуем в десятичные градусы или в градусы, минуты, секунды;

 

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

В следующем уроке мы рассмотрим некоторые аналитические функции библиотеки GIS ToolKit и функции для работы с матрицами и растрами качеств.

Смотреть: Дополнительные материалы к уроку 11