У меня есть слой geojson в моем приложении OL3, который я хочу перерисовывать каждые 5 секунд (чтобы показать движение на карте).
Как это сделать ? Не удалось найти эквивалент Layer.redraw ().
openlayers
Alophind
источник
источник
Ответы:
Вот как вы можете обновлять векторный источник каждые 5 секунд из веб-службы, возвращающей объекты в документе GeoJSON:
Здесь jQuery используется для запроса данных через Ajax (
$.ajax
), но вы, очевидно, можете использовать библиотеку по вашему выбору.В этом фрагменте кода также предполагается, что проекции карты - это «EPSG: 3857» (веб-меркатор) и что координаты в документах GeoJSON представляют собой долготы и широты.
источник
vectorSource
и должныgeojsonSource
быть объединены?Я знаю, что этот вопрос старый, но я наконец-то нашел решение обновить слой на openlayers 3.
Вы должны обновить параметры источника слоя следующим образом:
источник
updateParams
метод; OL3.18.2 только показывает , что дляImageArcGISRest
,ImageMapGuide
,ImageWMS
,TileArcGISRest
иTileWMS
, а не для, например,ol.source.Vector
.Вы можете обновить слой WFS с помощью
myLayer.getSource().clear()
.источник
clear()
любые существующие функции будут сразу удалены с карты и добавлены только после получения ответа HTTP. Это верно как для указания значения для, такVectorOptions#url
и дляVectorOptions#loader
. Для данных реального времени, вручную делать некоторые WebSockets или XHR магии , а затем призванииgetSource().clear()
затемgetSource().addFeatures(...)
может выглядеть лучше для конечного пользователя.В OL2 я использовал стратегию обновления слоя, которая не была добавлена в OL3. Ниже приведена функция самовызова, которая будет использовать ajax-запрос, чтобы получить GeoJSON, а затем прочитать его и добавить в источник.
Надеюсь это поможет.
источник
Это прекрасно работает для слоев:
согласно http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html#changed
источник
layer.changed();
идеально подходит для слоев. Описание документацииIncreases the revision counter and dispatches a 'change' event.
не очень полезно. Как использование метода change () отвечает на вопрос о перерисовке карты каждые 5 секунд?layer.changed();
не дало никакого эффекта для меня, ноsource.changed();
сделало трюк.Нет необходимости обновлять явно. Каждый раз, когда вы обновляете содержимое слоя, карта обновляется, запрашивая рендеринг нового кадра.
Для принудительного рендеринга у вас есть
map.render()
иmap.renderSync()
методы.источник