Я пытаюсь заставить векторный слой в OpenLayers 3 периодически перезагружать свои данные из источника GeoJSON. Источник GeoJSON время от времени меняется.OpenLayers 3: Принуждение векторного слоя для перезагрузки источника GeoJSON
После многих различных попыток, используя различные методы, я думаю, что это самый близкий мне удалось получить до сих пор:
$(document).ready(function(){
map.once("postcompose", function(){
//start refreshing each 3 seconds
window.setInterval(function(){
var source = testLayer.getSource();
var params = source.getParams();
params.t = new Date().getMilliseconds();
source.updateParams(params);
}, 3000);
});
});
Однако это дает мне следующее (каждые 3 секунды, конечно):
Uncaught TypeError: source.getParams is not a function
Вот еще один код, который я использую для загрузки и отображения файла GeoJSON. Остальные слои карты загружаются таким же образом:
var testSource = new ol.source.Vector({
url: '/js/geojson/testfile.geojson',
format: new ol.format.GeoJSON()
});
...
window.testLayer = new ol.layer.Vector({
source: testSource,
style: function(feature, resolution) {
var style = new ol.style.Style({
fill: new ol.style.Fill({color: '#ffffff'}),
stroke: new ol.style.Stroke({color: 'black', width: 1}),
text: new ol.style.Text({
font: '12px Verdana',
text: feature.get('testvalue'),
fill: new ol.style.Fill({
color: 'rgba(255, 255, 255, 0.1)'
}),
stroke: new ol.style.Stroke({
color: 'rgba(0, 0, 0, 1)',
width: 1
})
})
});
return style
}
});
...
var olMapDiv = document.getElementById('olmap');
var map = new ol.Map({
layers: [paddocksLayer,zonesLayer,structuresLayer,roadsLayer,testLayer],
interactions: ol.interaction.defaults({
altShiftDragRotate: false,
dragPan: false,
rotate: false
}).extend([new ol.interaction.DragPan({kinetic: null})]),
target: olMapDiv,
view: view
});
view.setZoom(1);
view.setCenter([0,0]);
Я читал где-то еще, что getParams просто не работает на векторных слоях, поэтому эта ошибка не была совершенно неожиданной.
Есть ли альтернативный метод, который будет перезагружать (а не просто повторно отображать) векторный слой?
Заранее спасибо. Я должен также извиниться заранее, так как мне понадобится действительно конкретное руководство с этим - я очень новичок в JS и OpenLayers.
Gareth
Вы должны показать, как загрузить (AJAX) файл в формате JSON. –
Смотрите мои правки выше - я не использую AJAX для загрузки GeoJSON при инициализации карты. Должен ли я это делать? Уровень отображается корректно с дополнительным кодом выше - просто не обновляется. –