На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Вопрос по MapGisServer

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
Вопрос по MapGisServer
 
Доброго дня. Вопрос связанный с использованием компонента MapGisServer возможно ли с его помощью подключиться к гис серверу программно, то есть без выдачи запросов на подключение.Если нет то каким образом можно решить следующую задачу: на удаленном компьютере запущен гис сервер, папка с картами не имеет общего сетевого доступа. Нужно на клиентском компьютере открыть карту расположенную на сервере.
 
Программно можно (и нужно) подключаться к ГИС Серверу для работы с картами.

Ниже перечень функций MAPAPI-интерфейса, которые обеспечивают доступ к ГИС Серверу.

Например, Вы хотите открыть карту Ногинск на сервере www.gisserver.ru.
Алгоритм следующий.

1) Открыть соединение.
int number = mapOpenConnect("www.gisserver.ru", 2047);


2) Зарегистрировать пользователя
TMCUSERPARM parm;
strcpy(parm.Name, "User1");

svStringToHash("1", parm.Password, sizeof(parm.Password));  // Кодировка по md5, gisdlgs.dll

mapRegisterUserEx(number, &parm);

Если ГИС Сервер настроен на работу с ActiveDirectory, то вызываете

mapRegisterSystemUserEx(number);

3) Сформировать имя данных на Сервере

char name[1024];
mapBuildAliasName("www.gisserver.ru", 2047, "Ногинск", name, sizeof(name);


4) Открыть данные

HMAP hmap = mapOpenData(name);


5) По завершении работы закрыть данные

mapCloseData(hmap);

6) И закрыть соединение

mapCloseConnect(number);


Номер соединения не является его идентификатором.
Соединений может быть много с разными серверами параллельно.
При отсутствии обращений к ГИС Серверу соединение через 30 минут разрывается.
Если программа работает и обращается к данным, то соединение восстанавливается.

Чтобы закрыть все соединения в конце работы удобнее вызвать функцию -

mapCloseMapAccess();


Код
  // Сформировать имя ресурса на Сервере                    // 03/10/11
  // в формате "HOST#ХОСТ#ПОРТ#ALIAS#условное_имя_карты"
  // host  - имя хоста
  // port  - номер порта
  // alias - имя ресурса (условное имя карты)
  // name  - имя строки для размещения результат
  // size  - максимальный размер в байтах строки
  // При ошибке в параметрах возвращает ноль

_MAPIMP long int _MAPAPI mapBuildAliasName(const char * host, long int port,
const char * alias,
char * name, long int size);

  // Запросить число подключений к ГИС Серверам
  // При отсутствии подключений возвращает ноль

_MAPIMP long int _MAPAPI mapActiveServerCount();

  // Запросить состояние подключения к серверу
  // number - номер активного подключения к ГИС Серверу от 1 до mapActiveServerCount()
  // При потоковом открытии\добавлении данных с ГИС Сервера рекомендуется
  // после первой ошибки открытия данных проверить состояние подключения
  // и при ошибке прервать потоковую обработку
  // Если после ошибки открытия данных с именем "HOST#..." или "ALIAS#..."
  // подключение не установлено, то нужно убедится, что Сервер запущен и
  // введены правильные параметры соединения
  // Если подключение к серверу установлено - возвращает ненулевое значение

_MAPIMP long int _MAPAPI mapIsServerActiveEx(long int number);

  // Запросить выполнено ли подключение и регистрация пользователя
  // для заданного имени алиаса данных
  // name - алиас в формате "HOST#ХОСТ:ПОРТ#ALIAS#условное_имя_карты",
  //        или "HOST#ХОСТ" или "HOST#ХОСТ:ПОРТ"
  // При успешной проверке возвращает номер подключения
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapCheckConnectForAlias(const char * name);

  // Открыть новое соединение с ГИС-сервером
  // name - имя хоста (до 256 символов),
  //        или строка адреса "XXX.XXX.XXX.XXX"
  // Если параметр равен нулю - сервер ищется на локальном хосте "localhost".
  // port - номер порта от 1024 до 65536, по умолчанию - 2047 (если port = 0)
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapOpenConnect(const char * name, long int port);

  // Запросить - можно ли закрыть соединение
  // При ошибке (соединение не найдено) возвращает ноль
  // При занятости соединения возвращает "-1"
  // Если соединение может быть закрыто, то возвращает положительное значение

_MAPIMP long int _MAPAPI mapCanCloseConnect(long int number);

  // Закрыть соединение с ГИС-сервером
  // number - номер активного подключения к ГИС Серверу от 1 до mapActiveServerCount()
  // При ошибке (соединение не найдено) возвращает ноль
  // При занятости соединения возвращает "-1"
  // При успешном выполнении возвращает положительное значение

_MAPIMP long int _MAPAPI mapCloseConnect(long int number);

  // Изменить параметры соединения с ГИС-сервером
  // Вызывается до открытия карт на сервере
  // number - номер активного подключения к ГИС Серверу от 1 до mapActiveServerCount()
  // name - имя хоста (до 256 символов),
  //        или строка адреса "XXX.XXX.XXX.XXX"
  // Если параметр равен нулю - сервер ищется на локальном хосте "localhost".
  // port - номер порта от 1024 до 65536, по умолчанию - 2047 (если port = 0)
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetConnectParametersEx(long int number,
const char * name, long int port);

  // Зарегистрировать пользователя
  // number - номер активного подключения к ГИС Серверу от 1 до mapActiveServerCount()
  // Если соединение с сервером не было установлено -
  // пытается соединиться с установленными ранее параметрами
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapRegisterUserEx(long int number, TMCUSERPARM * parm);

  // Зарегистрировать текущего пользователя ОС как пользователя ГИС Сервера
  // number - номер активного подключения к ГИС Серверу от 1 до mapActiveServerCount()
  // Если соединение с сервером не было установлено -
  // пытается соединиться с установленными ранее параметрами
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapRegisterSystemUserEx(long int number);
 
Большое спасибо, буду разбираться, а то в мануале как то мало информации по работе с этим компонентом.
 
Может я чего не так понял, но попытался перевести код на делфи, получилось следующее:
Код
var
  Form1: TForm1;
  map:HMAP;
  number,us:integer;
  parm:TMCUSERPARM;
  name:string;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
number:=  mapSetConnectParameters('192.168.1.2', 2047,1);
if number=0 then
MessageDlg('Ошибка соединения с сервером', mtError,[mbok],0);
parm.Name:='dima';
svStringToHash('12345', parm.Password, sizeof(parm.Password));
us:=mapRegisterUs er(parm);
if us=0 then
MessageDlg('Ошибка авторизации', mtError,[mbok],0);
map:= mapOpenData('Spas.sit',GENERIC_READ);
if map=0 then
MessageDlg('Ошибка открытия карты', mtError,[mbok],0);
end;


Некоторых функций которые Вы указали в MAPAPI.inc не оказалось, заменил схожими по описанию. Код нормально запускается и при нажатии на кнопку ошибок не выдает. Но вот теперь следующий вопрос: а как мне вывести карту в MapView. Работаю с GisToolkit 11. Ранее с компонентами GisToolkit не работал, поэтому заранее извините за может быть глупые вопросы...
 
Здравствуйте, господа разработчики!
Я уже второй день пытаюсь открыть программно карту, которая находится на моем развернутом ГИС сервере с использованием MapGisServer.
Подключение к серверу есть, а вот карту открыть не получается пишет, что файл не найден, хотя через диалог открывает.
Вот мой код на С#

/// <summary>
       /// Подключение к ГИС серверу
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void NavButton2_ElementClick(object sender, DevExpress.XtraBars.Navigation.NavElementEventArgs e)
       {
           MapGisServer.OpenConnect("srvgis", 2047);
           MapGisServer.RegisterUser(0, "MSQL", "123");
           int r = MapGisServer.ConnectionCount; .. равно = 1 это я проверяю соединение))
           MapView.MapOpen("E:\\Maps\\1mlnKGC\\Study.sitx", true);
       }

В чем моя ошибка и как сделать правильно? Напишите если Вас это не затруднит кодом на С#.
Мне это необходимо сделать программно так как карты будут постоянно меняться и соответственно путь к ним тоже.
Я использую GIS ToolKit 11.
 
Добрый день!
Хотел Вас оповестить, что у меня получилось открыть нужную мне карту программно!
Но есть пару вопросов:
1. После выполнения кода появляется окошко, в котором необходимо нажать на кнопку "Установить" (скрин прилагаю), как мне можно сделать, чтобы данная кнопку нажималась программно?
Вот мой код на C#
private void NavButton2_ElementClick(object sender, DevExpress.XtraBars.Navigation.NavElementEventArgs e)
       {
           var a = MapGisServer.OpenConnect("srvgis", 2047);
           MapGisServer.RegisterUser(0, "MSQL", "123");
           string s = MapGisServer.BuildAliasName("srvgis", 2047, "Study.sitx");
           MapView.MapOpen(s, true);
           if(MapGisServer.CanClose(a)>0) MapGisServer.CloseConnect(a);
       }
2. После того как карта загружается отсутствует возможность повторного подключения почему? И как это исправить?
 
При открытии соединения возвращается его номер:
Код
  // Открыть новое соединение с ГИС-сервером
  // name - имя хоста (до 256 символов),
  //        или строка адреса "XXX.XXX.XXX.XXX"
  // Если параметр равен нулю - сервер ищется на локальном хосте "localhost".
  // port - номер порта от 1024 до 65536, по умолчанию - 2047 (если port = 0)
  // В случае удачно выполненного подключения возвращает его порядковый номер
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapOpenConnectUn(const WCHAR *name, long int port);

  // Открыть новое соединение с ГИС-сервером
  // name - имя хоста (до 256 символов),
  //        или строка адреса "XXX.XXX.XXX.XXX"
  // Если параметр равен нулю - сервер ищется на локальном хосте "localhost".
  // port - номер порта от 1024 до 65536, по умолчанию - 2047 (если port = 0)
  // cansleep - разрешение на открытие виртуального (спящего) соединения,
  //        при отсутствии физического доступа к серверу
  // Данные будут открываться из кэш, если он есть
  // При появлении физического соединения оно автоматически (по мере вызова mapAdjustData)
  // будет восстановлено вместо вирутального (кэш обновится по данным с сервера)
  // В случае удачно выполненного подключения возвращает его порядковый номер
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapOpenConnectExUn(const WCHAR *name, long int port, long int cansleep);
Этот номер нужно передать первым параметром при регистрации пользователя:
Код
  // Зарегистрировать пользователя
  // number - номер активного подключения к ГИС Серверу от 1 до mapActiveServerCount()
  // Если соединение с сервером не было установлено -
  // пытается соединиться с установленными ранее параметрами
  // Пароль должен передаваться в зашифрованном виде по алгоритму MD5 (в виде хэша)
  // Для получения хэша пароля следует использовать функцию svStringToHash
  // (описана в gisdlgs.h)
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapRegisterUserEx(long int number, TMCUSERPARM * parm);

  // Зарегистрировать текущего пользователя ОС как пользователя ГИС Сервера в домене
  // number - номер активного подключения к ГИС Серверу от 1 до mapActiveServerCount()
  // Если соединение с сервером не было установлено -
  // пытается соединиться с установленными ранее параметрами
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapRegisterSystemUserEx(long int number);
Вы получаете номер в переменную a, регистрацию делаете по соединению 0.
В результате при открытии данных программа запрашивает регистрацию принудительно.
 
Спасибо большое за помощь! Я теперь понял в чем была моя ошибка!
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности