OL3 uygulamamda her 5 saniyede bir yeniden çizmek istediğim bir geojson katmanım var (haritada hareket göstermek için).
Nasıl yaparım ? Layer.redraw () öğesine eşdeğer bulunamadı.
OL3 uygulamamda her 5 saniyede bir yeniden çizmek istediğim bir geojson katmanım var (haritada hareket göstermek için).
Nasıl yaparım ? Layer.redraw () öğesine eşdeğer bulunamadı.
Yanıtlar:
GeoJSON belgesindeki özellikleri döndüren bir web hizmetinden bir vektör kaynağını her 5 saniyede bir yenileyebilirsiniz:
var vectorSource = new ol.source.Vector();
var geojsonFormat = new ol.format.GeoJSON();
window.setTimeout(function() {
$.ajax('http://example.com/data.json', function(data) {
var features = geojsonFormat.readFeatures(data
{featureProjection:"EPSG:3857"});
geojsonSource.clear();
geojsonSource.addFeatures(features);
});
}, 5000);
jQuery burada Ajax ( $.ajax
) aracılığıyla veri istemek için kullanılır , ancak seçtiğiniz kütüphaneyi açıkça kullanabilirsiniz.
Bu kod snippet'i ayrıca haritanın projeksiyonlarının "EPSG: 3857" (web mercator) olduğunu ve GeoJSON belgelerindeki koordinatların boylam ve enlem olduğunu varsayar.
vectorSource
ve geojsonSource
birleştirilmeli mi?
Bu sorunun eski olduğunu biliyorum ama sonunda openlayers 3'te bir katmanı yenilemek için bir çözüm buldum.
Katman kaynağının parametrelerini şu şekilde güncellemelisiniz:
var source = yourLayer.getSource();
var params = source.getParams();
params.t = new Date().getMilliseconds();
source.updateParams(params);
updateParams
yöntemi desteklemiyor gibi görünüyor ; OL3.18.2 sadece gösterileri bunun için ImageArcGISRest
, ImageMapGuide
, ImageWMS
, TileArcGISRest
ve TileWMS
, ve, örneğin, ol.source.Vector
.
Bir WFS katmanını ile yenileyebilirsiniz myLayer.getSource().clear()
.
clear()
mevcut özellikler çağrıldığında haritadan hemen kaldırılır ve yalnızca HTTP yanıtı alındıktan sonra tekrar eklenir. Bu, hem VectorOptions#url
ve için bir değer belirtmek için geçerlidir VectorOptions#loader
. Gerçek zamanlı veriler için, elle bazı Yuvalarının veya XHR büyü yapıyor ve ardından görüşmesi özelliğini getSource().clear()
ardından getSource().addFeatures(...)
daha iyi son kullanıcıya kudreti görünüm.
OL2 ile OL3'e eklenmemiş bir katman yenileme stratejisi kullandım. Aşağıda, GeoJSON'u almak ve daha sonra okumak ve bir kaynağa eklemek için bir ajax isteği kullanacak kendi kendine arama işlevi aşağıdadır.
var yourSource = new ol.source.GeoJSON();
//add this source to a layer, the layer to a map with a view etc
...
//now fetch the data
var fetchData = function () {
jQuery.ajax(url,
{
dataType: 'json',
success: function (data, textStatus, jqXHR) {
yourSource.clear(); //remove existing features
yourSource.addFeatures(yourSource.readFeatures(data));
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
}
});
//call this again in 5 seconds time
updateTimer = setTimeout(function () {
fetchData();
}, 5000);
};
fetchData(); //must actually call the function!
Bu yardımcı olur umarım.
Bu katmanlar için mükemmel çalışır:
layer.changed();
http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html#changed uyarınca
layer.changed();
Katmanlar için nasıl mükemmel (ly) çalıştığı hakkında biraz daha açıklamanız gerekir . Dokümantasyon açıklaması Increases the revision counter and dispatches a 'change' event.
gerçekten yararlı değil. Değiştirilen () yönteminin kullanılması haritayı her 5 saniyede bir yeniden çizmeyle ilgili soruyu nasıl yanıtlıyor?
layer.changed();
benim için bir etkisi source.changed();
yoktu , ama hile yaptı.
Açıkça yenilenmeye gerek yoktur. Bir katmanın içeriğini her güncellediğinizde, harita yeni bir çerçeve oluşturma isteğiyle yenilenir.
El var render zorlamak için map.render()
ve map.renderSync()
yöntemler.