Ich versuche, eine Vektorschicht in OpenLayers 3 zu zwingen, seine Daten periodisch von einer GeoJSON Quelle neu zu laden. Die GeoJSON-Quelle ändert sich von Zeit zu Zeit.OpenLayers 3: Erzwingen einer Vektorschicht, um GeoJSON Quelle neu zu laden
Nach vielen verschiedenen Versuche mit verschiedenen Methoden, ich denke, das ist die nächste, die ich habe es geschafft, so weit zu kommen:
$(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);
});
});
Doch diese gibt mir die folgenden (alle 3 Sekunden natürlich):
Uncaught TypeError: source.getParams is not a function
Hier ist der ganze andere Code, den ich verwende, um die GeoJSON-Datei zu laden und anzuzeigen. Die anderen Schichten in der Karte sind in der gleichen Art und Weise geladen:
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]);
ich woanders gelesen, dass getParams einfach nicht auf Vektorebene funktioniert, so dass dieser Fehler war nicht ganz unerwartet.
Gibt es eine alternative Methode, die eine Vektorschicht neu lädt (nicht nur neu rendert)?
Vielen Dank im Voraus. Ich muss mich auch im Voraus dafür entschuldigen, da ich wirklich eine spezifische Anleitung dazu brauche - ich bin sehr neu in JS und OpenLayers.
Gareth
Sie werden zeigen müssen, wie Sie (AJAX) Ihre JSON-Datei laden. –
Siehe meine Änderungen oben - Ich verwende AJAX nicht, um GeoJSON beim Initialisieren der Karte zu laden. Soll ich das tun? Der Layer wird korrekt mit dem zusätzlichen Code oben angezeigt - nur nicht aktualisiert. –