Saya memiliki lapisan geojson di aplikasi OL3 yang ingin saya gambar ulang setiap 5 detik (untuk menunjukkan pergerakan di peta).
Bagaimana saya melakukannya ? Tidak dapat menemukan yang setara dengan Layer.redraw ().
Saya memiliki lapisan geojson di aplikasi OL3 yang ingin saya gambar ulang setiap 5 detik (untuk menunjukkan pergerakan di peta).
Bagaimana saya melakukannya ? Tidak dapat menemukan yang setara dengan Layer.redraw ().
Jawaban:
Ini adalah cara Anda dapat menyegarkan sumber vektor setiap 5 detik, dari layanan web yang mengembalikan fitur dalam dokumen GeoJSON:
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 digunakan di sini untuk meminta data melalui Ajax ( $.ajax
), tetapi Anda jelas dapat menggunakan perpustakaan pilihan Anda.
Cuplikan kode ini juga mengasumsikan bahwa proyeksi peta adalah "EPSG: 3857" (web mercator) dan bahwa koordinat dalam dokumen GeoJSON adalah bujur dan lintang.
vectorSource
dan geojsonSource
digabung?
Saya tahu bahwa pertanyaan ini sudah lama tetapi saya akhirnya menemukan solusi untuk menyegarkan lapisan pada openlayers 3.
Anda harus memperbarui params dari sumber layer seperti ini:
var source = yourLayer.getSource();
var params = source.getParams();
params.t = new Date().getMilliseconds();
source.updateParams(params);
updateParams
metode ini; OL3.18.2 hanya menunjukkan untuk ImageArcGISRest
, ImageMapGuide
, ImageWMS
, TileArcGISRest
dan TileWMS
, dan bukan untuk, misalnya, ol.source.Vector
.
Anda dapat menyegarkan layer WFS dengan myLayer.getSource().clear()
.
clear()
fitur yang ada akan segera dihapus dari peta, dan hanya ditambahkan lagi setelah menerima respons HTTP. Ini berlaku untuk menentukan nilai untuk VectorOptions#url
dan untuk VectorOptions#loader
. Untuk data realtime, secara manual melakukan beberapa WebSockets atau XHR magic dan kemudian panggilan getSource().clear()
diikuti oleh getSource().addFeatures(...)
mungkin terlihat lebih baik bagi pengguna akhir.
Dengan OL2 saya menggunakan strategi refresh layer yang belum ditambahkan ke OL3. Di bawah ini adalah fungsi panggilan mandiri yang akan menggunakan permintaan ajax untuk mengambil GeoJSON dan kemudian membacanya dan menambahkannya ke sumber.
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!
Semoga ini membantu.
Ini berfungsi sempurna untuk lapisan:
layer.changed();
sesuai http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html# berubah
layer.changed();
bekerja sempurna untuk layer. Deskripsi dokumentasi Increases the revision counter and dispatches a 'change' event.
tidak terlalu membantu. Bagaimana cara menggunakan metode yang diubah () menjawab pertanyaan tentang menggambar kembali peta setiap 5 detik?
layer.changed();
tidak berpengaruh bagi saya, tetapi source.changed();
melakukan trik.
Tidak perlu menyegarkan secara eksplisit. Setiap kali Anda memperbarui konten layer, peta di-refresh meminta rendering bingkai baru.
Untuk memaksa rendering secara manual, Anda memiliki map.render()
dan map.renderSync()
metode.