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

Проблемы с динамическим обновлением карты

Поиск  Пользователи  Правила  Войти
Форум » Серверные приложения » GIS WebServer
Страницы: 1
RSS
Проблемы с динамическим обновлением карты
 
Есть веб-приложение, работающее на webtoolkit 6.2.0. На пользовательской карте средствами mapapi рисуется движущийся объект и линия его курса. Период обновления на веб выставлен: GWTK.mapSetMapRefreshPeriod(gipMap, 2)

Проблема в том что, что картинка в браузере не обновляется - с сервера приходит новая, но отображается старая. Если подвигать карту мышкой, то обновляется. Как диагностировать и исправить проблему?
 
Возможно умничает браузер, выводит картинку из кэша...
Какой браузер и какой версии используется?
Если в режиме дебагера (F12) на вкладке Network, включить флаг "Disable cashe", картинка тоже не обновляется?
 
Проблема вновь себя проявила, но в несколько ином ключе.

Создаю ряд слоев при помощи webtoolkit - gipMap.openLayer

Затем мне надо в дереве слоев выбрать те которые необходимо отобразить. После выбора вызываю метод show() объекта слоя - слои не отображаются, но если слегка подвинуть карту, то тут же появляются. При этом после вызова show() карты на секунду появляются и исчезают. Ошибок в консоли нет. Тестировал в хром и фаерфокс последних версий. Все слои - wms. Порядка 15 штук одномоментно создаю, но не показываю.

Код
 const layerparam: any = {
    id: 'plan',
    alias: 'Plan',
    legend: '*',
    watch: 0,
    selectObject: 0,
    url: maputils.buildWmsUrl('HOST#localhost#2047#ALIAS#Layers_4f62c948-1a86-11ea-9cd2-b271382053e7_map_map.sit'),
    bbox: [61.40912281, 33.43866356, 70.9898426, 101.44292720],
   }
  layers[layerparam.id] = gipMap.openLayer(layerparam)
Изменено: Алексей - 10.08.2021 18:51:56
 
Попробуйте gipMap.tiles.wmsUpdate()
 
Цитата
Tim написал:
Попробуйте gipMap.tiles.wmsUpdate()

Не помогло. Вызываю данный метод сразу после цикла с  layers[key].show()

Попробовал даже данный метод поставить внутрь цикла. Карты стали показываться периодически, но не все - в произвольном количестве.
Изменено: Алексей - 18.08.2021 11:45:14
 
Пример включения слоя карты программно:
Код
// включить адресную карту
var mapcontent = theMap.mapTool('mapcontent');
mapcontent.setChecked('address'); // включить галку в дереве
theMap.tiles.getLayerByxId('address').show(); // включить отображение


Если все делаете так же, то выведите в консоль свойства слоя, может обнаружится свойство влияющее на некорректное поведение.
Изменено: admin - 18.08.2021 15:42:29
 
Массив карт создаю таким образом:

Код
 const layerparam5: any = {
    id: 'real',
    alias: 'Real map',
    legend: '*',
    watch: 1,
    url: maputils.buildWmsUrl('HOST#localhost#2047#ALIAS#Layers_4f62c948-1a86-11ea-9cd2-b271382053e7_real_real.sit')
  }
  layers[layerparam5.id] = gipMap.openLayer(layerparam5)


Изменил код так:

Код
    const mapcontent = gipMap.mapTool('mapcontent')
    for (const layerId in layers) {
      if (layersList.includes(key)) {
        mapcontent.setChecked(layerId)
        gipMap.tiles.getLayerByxId(layerId).show()
      } else {
        gipMap.tiles.getLayerByxId(layerId).hide()
      }
    }
    gipMap.tiles.wmsUpdate()


Все равно появляется только несколько из слоев - не все. Но если просто изменить масштаб - отображаются все.


Цитата
admin написал:
Если все делаете так же, то выведите в консоль свойства слоя, может обнаружится свойство влияющее на некорректное поведение.

А как понять и что именно надо вывести?
 
В общем ни один из предложенных способов мне не помог. Пробовал еще GWTK.mapShowLayer/GWTK.mapHideLayer, но результат тот же - слои не отображаются корректно. Помог такой костыль:

Код
for (const key in layers) {
      const layer = gipMap.tiles.getLayerByxId(key)
      if (checked.has(key)) {
        layer.layerContainer.style.opacity = 1
      } else {
        layer.layerContainer.style.opacity = 0
      }
}


Ощущение, что какая-то глобальная проблема у вас на веб со слоями. Если такую проблему решить костылем удалось, то хаотичное исчезновение слоев при изменении масштаба или сдвига карты при помощи мышки - нет.
 
Здравствуйте! В карте имеется функция resetMap.
       /**
        * Переустановить карту
        * @method resetMap
        * @param mapoptions {Object} параметры карты, mapoptions.layers - параметры добавляемых слоев (новых)
        * @param remove {String} список идентификаторов слоев (через запятую), которые необходимо закрыть.
        *        При remove = '*' удаляются все имеющиеся слои карты.
        * @param skipcontenttree {bool} признак "Пропустить настройку дерева данных":
        *        `true`  - дерево данных не обновляется;
        *        `false` - дерево данных обновляется. Если в options есть параметр contenttree дерево состава обновится по его
        *        описанию, иначе обновление автоматически по списку слоев в карте.
        */

       map.resetMap(mapoptions, remove, skipcontenttree);
Страницы: 1
Читают тему (гостей: 1)



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

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