![]() |
|
||
|
| Подключение к ГИС Серверу | ||
|
Подключение к ГИС Серверу ГИС Сервер 2008 – программа, предназначенная для обеспечения удаленного доступа к картографическим данным пользователей программ ГИС Карта 2008, Панорама-Редактор, ГИС Навигатор 2008, ГИС-вьюер и других программ, разработанных в среде GIS ToolKit версии 10 и новее. Сервер предоставляет удаленный доступ к векторным картам, растрам и матрицам. Соединение с сервером устанавливается по протоколу TCP\IP с использованием механизма сокетов. Сервер реализован для платформ Windows, Linux, Solaris (Sparc). Размещение данных на Сервере обеспечивает защиту от нелегального доступа и повышает надежность и скорость операций редактирования данных несколькими пользователями одновременно. Для ускорения работы с данными в сети существенно увеличен буфер данных на клиенте (кэш) и часть операций по редактированию объектов и ведению журнала транзакций выполняется на сервере, что уменьшает объем передаваемых данных по сравнению с доступом в режиме Файл-Сервер. При этом скорость редактирования данных через ГИС Сервер выше в 3-5 раз по сравнению с прямым открытием карты по сети (http://www.gisinfo.ru/products/gisserver.htm). Для синхронизации работы нескольких пользователей (при любом способе доступа к данным) приложение периодически должно вызывать функцию mapAdjustData, которая при необходимости обновит буфер данных. Для передачи данных по протоколу TCP\IP программа должна знать параметры соединения - IP-адрес сервера и номер порта. Вместо IP-адреса может быть указано имя компьютера в локальной сети (хост). // Установить параметры соединения с ГИС-сервером _MAPIMP long int _MAPAPI mapSetConnectParameters(const char * name, Эти действия можно выполнить и через стандартный диалог, вызываемый из библиотеки gisdlgs.dll: // Запрос параметров соединения с ГИС - сервером Результат работы пользователя через стандартный диалог можно узнать, запросив в ГИС ядре текущие установки функциями MAPAPI-интерфейса: // Запросить текущий номер порта для связи с ГИС-сервером _MAPIMP long int _MAPAPI mapGetConnectPort(); // Запросить имя\адрес хоста _MAPIMP long int _MAPAPI mapGetConnectHost(char * name, long int size); По окончании работы приложения текущие установки могут быть сохранены в INI-файле, а затем при старте приложения восстановлены функцией mapSetConnectParameters. Прежде, чем получить доступ к картам на ГИС Сервере, пользователь (клиентская программа) должен зарегистрироваться. Для этого применяется функция mapRegisterUser. // Зарегистрировать пользователя _MAPIMP long int _MAPAPI mapRegisterUser(TMCUSERPARM * parm); В структуре TMCUSERPARM передаются два поля – Name (имя пользователя в кодировке ANSI) и Password (пароль, введенный в ANSI, и закодированный по алгоритму MD5). Функции для преобразования строки по алгоритму MD5 имеются в различных средствах программирования и поддерживаются на уровне ОС Windows (cryptdll.dll). // Зарегистрировать пользователя (ввести имя пользователя и пароль) Чтобы запросить имя текущего зарегистрированного пользователя применяется функция mapGetCurrentUserName: // Запросить имя пользователя, подключившегося к ГИС-серверу _MAPIMP const char * _MAPAPI mapGetCurrentUserName(); Для открытия карты на ГИС Сервере используются те же, функции, что и для открытия локально расположенной карты (mapOpenData). Отличия в формате имени карты. Имя карты на ГИС Сервере имеет вид "ALIAS#условное_имя_карты". Строка "ALIAS#" является ключевым словом для обращения к ГИС-серверу. Список условных имен карт (алиасов), доступных для зарегистрированного пользователя, можно запросить функциями MAPAPI-интерфейса: // Запросить список доступных пользователю карт на ГИС-сервере _MAPIMP long int _MAPAPI mapGetMapListforUser(TMCMAPLIST * buffer, int length); // Запросить список доступных пользователю матриц на ГИС-сервере _MAPIMP long int _MAPAPI mapGetMtwListforUser(TMCMAPLIST * buffer, int length); // Запросить список доступных пользователю растров на ГИС-сервере _MAPIMP long int _MAPAPI mapGetRswListforUser(TMCMAPLIST * buffer, int length); Можно запросить три списка – векторных карт, растров и матриц. Списки могут быть представлены в виде дерева. Для этого в структуре TMCMAPLIST каждый элемент имеет уровень вложенности Level и признак типа данных Type (для промежуточных уровней равен 0). Открыть данные или добавить к данным, открытым ранее, можно с помощью стандартных диалогов, вызываемых из библиотеки gisdlgs.dll: // Открыть карту на ГИС Сервере При выборе открываемой карты в стандартном диалоге посылается сообщение главному окну приложения (идентификатор которого задан в TASKPARM) – AW_OPENDOC (0x655): ::SendMessage(Parm->Handle, AW_OPENDOC, (WPARAM)name, 0); В параметре WPARAM передается указатель на строку вида: “ALIAS#условное_имя_карты". ::SendMessage(Parm->Handle, AW_GETCURRENTDOC, (long)&hWnd, (long)&hMap); В ответ необходимо вернуть указатель на идентификатор данных (HMAP) и идентификатор окна с открытой картой для передачи ему уведомления о необходимости перерисовать окно после открытия данных: ::InvalidateRect(hWnd, 0, false); Если в ответ на сообщение AW_GETCURRENTDOC не установлен идентификатор данных (HMAP), то кнопка Добавить в диалоге не активна, если не установлен идентификатор окна (HWND), то функция InvalidateRect не выполняется. Чтобы выполнить только добавление данных к данным, открытым ранее, может быть вызван стандартный диалог из библиотеки gisdlgs.dll: // Добавить к текущей карте данные с ГИС Сервера При этом идентификатор карты, к которой добавляются данные, передается в качестве параметра функции. В списке данных будут недоступны для добавления векторные карты типа MAP, поскольку добавить можно только пользовательские карты (SIT). Чтобы определить, где открыта текущая карта – на ГИС Сервере или локально, применяется функция MAPAPI-интерфейса: _MAPIMP long int _MAPAPI mapIsMapFromServer(HMAP hMap, HSITE hSite); Приложение само должно учитывать имеет ли пользователь право на копирование данных (конвертирование, перенос объектов на другую карту и т.п.). Поскольку операции чтения данных из приложения не могут быть блокированы ГИС ядром из-за необходимости выполнения различных расчетных и графических задач. Права пользователя на чтение данных и редактирование контролируются автоматически. Для запроса прав пользователя на копирование данных вызывается функция mapGetSiteCopyFlag: // Запросить - могут ли объекты карты копироваться на другие карты или экспортироваться _MAPIMP long int _MAPAPI mapGetSiteCopyFlag(HMAP hMap,HSITE hSite); Если функция вернула нулевое значение, то приложение не должно выполнять действия по сохранению данных или их копированию вне ГИС Сервера.
|
||
| Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены | | Статьи | Обучение | Контакты |
|
|||
| Copyright © Panorama Group 1991- 2012 |
||||