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

Пара вопросов по mapapi

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 3 4 5 След.
RSS
Пара вопросов по mapapi
 
Добрый день. Возникла небольшая проблема.

Есть код: https://pastebin.com/86GffDKt

Создаю два объекта из классификатора и рисую линию. Отображаются либо объекты, либо линия. Если закомментировать создание objectIdent и objectIdent2, то линия отрисовывается, если же их создавать, то видны на карте объекты, но не видна линия.

И второй вопрос. Если подобный образом работать с картой, опубликованной на гис сервере, то как информировать WebServerSE об произошедших изменениях - добавление объектов или изменение их координат? Или Вебсервер следит самостоятельно за подобными изменениями?

Все под астру, сдк 13
 
Код
    MAPREGISTEREX mapreg;    memset((void *)&mapreg, 0, sizeof(mapreg));
    mapreg.Length = sizeof(mapreg);
    mapRegisterFromMapType(CK_42, &mapreg);
 
    CREATESITEUN createsite;
    memset((void *)&createsite, 0, sizeof(createsite));
    createsite.Length = sizeof(createsite);
    createsite.MapType = mapreg.MapType;
    createsite.MaterialProjection = mapreg.MaterialProjection;
    createsite.Scale = mapreg.Scale;
    createsite.FirstMainParallel = mapreg.FirstMainParallel;
    createsite.SecondMainParallel = mapreg.SecondMainParallel;
    createsite.AxisMeridian = mapreg.AxisMeridian;
    createsite.MainPointParallel = mapreg.MainPointParallel;

Для начала не видно где идет присвоение значения mapreg.AxisMeridian - осевой меридиан зоны.

Для простоты можно выполнить инициализацию через код EPSG для нужной зоны.

А еще проще - не работать в СК-42.
Если полюса не нужны - создайте карту в проекции Меркатора.
Тем более, если собираетесь публиковать данные через web. Там СК-42 делать нечего.
Пересчитывать координаты в метры не обязательно.
Есть функции mapAppendPointGeo, mapAppendPointGeoWGS84.

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

Код
TEMPHSELECT hselect = mapCreateMapSelectContext(hmap);
mapGetSiteViewSelect(hmap, hmap, hselect);
mapClearSelectContext(hselect);
mapSetDrawObjectsFlag(hselect, 0);
mapSetSiteViewSelect(hmap, hmap, hselect);
hselect = 0;
 
GIS WebServer берет данные от GIS WebService по WMS\WMTS ... Пользователь может включить автообновление слоя на экране.

GIS WebService может быть подключен к ГИС Серверу. Он с заданной периодичностью (в его настройках) опрашивает состояние карт и обновляет их представление.

Если отображение идет через WMS, то картинка обновится автоматически. Если через WMTS, то нужно сбрасывать состояние кэша на клиенте (CTRL-F5).
Динамические картинки рисуют через WMS.
 
Цитата
Oleg Belenkov написал:
GIS WebServer берет данные от GIS WebService по WMS\WMTS ... Пользователь может включить автообновление слоя на экране.

GIS WebService может быть подключен к ГИС Серверу. Он с заданной периодичностью (в его настройках) опрашивает состояние карт и обновляет их представление.

Если отображение идет через WMS, то картинка обновится автоматически. Если через WMTS, то нужно сбрасывать состояние кэша на клиенте (CTRL-F5).
Динамические картинки рисуют через WMS.

Подскажите, пожалуйста, а для работы в реальном времени такой режим подойдет? Какова минимальная задержка?
 
Если карта отображается в некотором масштабе и объект двигается не с космической скоростью, то перемещение, например, самолетов будет вполне адекватно выглядеть.
Термин "Реальное время" тут не применяется, конечно. В режиме времени, близком к реальному.


У нас поддерживается подключение навигационных слоев и мобильных объектов -

https://gisinfo.ru/newspages-news-2575-0
https://gisinfo.ru/newspages-news-2557-0
 
В продолжении. Если я правильно понял, то для веб карты лучше создавать в проекции меркатора: mapRegisterFromMapType(MERCATOR, &mapreg);

Нужно ли еще что-то?

И вот тестовый кусок кода. Не наблюдаю изменения координат в ГИС Оператор. Чего не хватает? И если потом подобным образом надо обновлять координаты объекта на карте, то можно как-то принудительно сигнализировать веб-клиенту об изменениях?

Код
   HMAP hMap = mapOpenDataUn(WTEXT("/home/okbadmin/GIS/owork/tmp/map/map.sit"), GENERIC_WRITE);
    cout << "Is map opened: " << hMap << endl;
    HOBJ object = mapCreateObject(hMap);
    auto findObject = mapSeekObject(hMap, object, mapListName(object), 1);

    cout << " Is found: " << findObject << " object " << object << endl;
    double x = 4197969.32;
    double y = 7443378.48;
    bool isNew = false;

    while(true) {
        long int isUpdated = 0;

        if(!isNew) {
            mapUpdatePointPlane(object, x + 10000, y, 1);
            isUpdated = mapUpdatePointPlane(object, x + 10000, y, 1);
        } else {
            mapUpdatePointPlane(object, x, y, 1);
            isUpdated = mapUpdatePointPlane(object, x, y, 1);
        }

        isNew = !isNew;
        auto isCommited = mapCommitObject(object);
        cout << " Is commited: " << isCommited << " Is updated: " << isUpdated << " " << isNew << endl;
        sleep(2);
    }

 
Установка проекции (системы координат) не должна приводить к изменению самих координат. Может измениться форма объекта при его отображении на экране в зависимости от выбранной проекции (и то в определенных масштабах).

WEB - клиент - это какое приложение (стандартное или специальное)? Ни в одной распределенной системе вы не можете сигнализировать об изменениях без того, чтобы клиент (который хочет узнать о некоем событии) сам периодически опрашивал некие информационные ресурсы на счет их изменений.
 
Это автономное приложение или Вы планируете, что оно будет запускаться из ГИС Оператора?

1) Примеры приложений, запускаемых из ГИС Оператора, есть в sdk13.zip\mapexam в разделе Скачать.

https://gisinfo.ru/download?id=229

Например:
Код
// --------------------------------------------------------------
// Создать на карте объект со служебной семантикой SEMDATEFROM
// hmap - идентификатор открытого документа
// parm - параметры для связи с окном документа
// При необходимости перерисовать окно карты возвращает ненулевое значение
// --------------------------------------------------------------
int CallApplication(HMAP hMap, TASKPARMEX * parm)
{
 HOBJ info = mapCreateObject(hMap, IDDOUBLE2, 1, 0);
 if (info)
 {
   mapRegisterObjectByKey(info, "P0062132000");
   mapAppendSemantic(info, SEMDATEFROM, "20180812", 0);
   mapAppendPointPlane(info, -5546, 6120);
   mapCommitObject(info);
   mapFreeObject(info);
 }

 // Обновить окно карты
 return 1;
}

// --------------------------------------------------------------
//  Точка входа в задачу
// --------------------------------------------------------------
extern "C"
{
  long int _export WINAPI GetInterfaceVersion() { return 0; }

  long int _export WINAPI CallMapFunctionEx(HMAP hmap, TASKPARMEX * parm)
  {
    if (hmap == 0) return 0;
    return CallApplication(hmap, parm);
  }

  long int _export WINAPI CallGisFunctionEx(HMAP hmap, TASKPARMEX * parm)
  {
    return CallMapFunctionEx(hmap, parm);
  }
}

От ГИС приложение получает HMAP.
Для запуска из ГИС Оператор в библиотеке должна быть функция CallGisFunctionEx.

Для обновления окна может использоваться идентификатор окна в TASKPARMEX.
Код
// Обновить изображение окна
::SendTheMessage(parm->Handle, WM_COMMAND, MT_UPDATESCREEN, 0);

Для интерактивной задачи на классах PANTASK доступны различные методы управления окном.

2) Автономное приложение открывает карту на ГИС Сервере параллельно с ГИС Оператором.
В ГИС Оператор устаналивается период обновления окна карты (опроса ГИС Сервера).
При обновлении карты (вызов mapCommitObject) будет обновляться карта в ГИС Оператор.

В GIS WebService SE и в окне браузера обновление будет с периодичностью, заданной в настройках web-приложения.
 
Цитата
Andrey Gheleznyakov написал:
Установка проекции (системы координат) не должна приводить к изменению самих координат. Может измениться форма объекта при его отображении на экране в зависимости от выбранной проекции (и то в определенных масштабах).

WEB - клиент - это какое приложение (стандартное или специальное)? Ни в одной распределенной системе вы не можете сигнализировать об изменениях без того, чтобы клиент (который хочет узнать о некоем событии) сам периодически опрашивал некие информационные ресурсы на счет их изменений.

Веб-приложение будет не стандартное. Свое с использованием вашего тулкита.

Подскажите, почему мой пример кода не меняет координаты объекта даже в толстом клиенте ГИС Оператор?
 
В ГИС Оператор я открыл sit файл через меню Файл -> Открыть файл. Возможно в этом дело?
Страницы: 1 2 3 4 5 След.
Читают тему (гостей: 1)



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

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