Доброго дня. Вопрос связанный с использованием компонента MapGisServer возможно ли с его помощью подключиться к гис серверу программно, то есть без выдачи запросов на подключение.Если нет то каким образом можно решить следующую задачу: на удаленном компьютере запущен гис сервер, папка с картами не имеет общего сетевого доступа. Нужно на клиентском компьютере открыть карту расположенную на сервере.
Номер соединения не является его идентификатором. Соединений может быть много с разными серверами параллельно. При отсутствии обращений к ГИС Серверу соединение через 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. В результате при открытии данных программа запрашивает регистрацию принудительно.