Создаю два объекта из классификатора и рисую линию. Отображаются либо объекты, либо линия. Если закомментировать создание objectIdent и objectIdent2, то линия отрисовывается, если же их создавать, то видны на карте объекты, но не видна линия.
И второй вопрос. Если подобный образом работать с картой, опубликованной на гис сервере, то как информировать WebServerSE об произошедших изменениях - добавление объектов или изменение их координат? Или Вебсервер следит самостоятельно за подобными изменениями?
Для начала не видно где идет присвоение значения mapreg.AxisMeridian - осевой меридиан зоны.
Для простоты можно выполнить инициализацию через код EPSG для нужной зоны.
А еще проще - не работать в СК-42. Если полюса не нужны - создайте карту в проекции Меркатора. Тем более, если собираетесь публиковать данные через web. Там СК-42 делать нечего. Пересчитывать координаты в метры не обязательно. Есть функции mapAppendPointGeo, mapAppendPointGeoWGS84.
Линия создается как графический объект. Возможно в условиях отображения отключено отображение графических объектов. В одной из версий библиотек графические объекты в начальный момент выключались.
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.
Подскажите, пожалуйста, а для работы в реальном времени такой режим подойдет? Какова минимальная задержка?
Если карта отображается в некотором масштабе и объект двигается не с космической скоростью, то перемещение, например, самолетов будет вполне адекватно выглядеть. Термин "Реальное время" тут не применяется, конечно. В режиме времени, близком к реальному.
У нас поддерживается подключение навигационных слоев и мобильных объектов -
В продолжении. Если я правильно понял, то для веб карты лучше создавать в проекции меркатора: 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 - клиент - это какое приложение (стандартное или специальное)? Ни в одной распределенной системе вы не можете сигнализировать об изменениях без того, чтобы клиент (который хочет узнать о некоем событии) сам периодически опрашивал некие информационные ресурсы на счет их изменений.
// --------------------------------------------------------------
// Создать на карте объект со служебной семантикой 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 - клиент - это какое приложение (стандартное или специальное)? Ни в одной распределенной системе вы не можете сигнализировать об изменениях без того, чтобы клиент (который хочет узнать о некоем событии) сам периодически опрашивал некие информационные ресурсы на счет их изменений.
Веб-приложение будет не стандартное. Свое с использованием вашего тулкита.
Подскажите, почему мой пример кода не меняет координаты объекта даже в толстом клиенте ГИС Оператор?