Saya memiliki peta OpenLayers 3.2.0 yang menampilkan beberapa sumber vektor ( ol.source.Vector
) dan layer vektor terkait ( ol.layer.Vector
)
Ketika Fitur ( ol.Feature
) ditambahkan ke sumber vektor, mereka diberikan data
properti yang diatur ke objek javascript yang diwakili fitur. TypeScript mengikuti ...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
Lapisan vektor kemudian memiliki fungsi-gaya yang membaca data
properti dan mengambil gayanya:
vectorLayer = new ol.layer.Vector({
source: vectorSource,
renderBuffer: /* ... */,
style: function (feature: ol.Feature, resolution: any) {
var data = </* TypeScript Type */>feature.get('data');
if ((data) && (data.style)) {
return [data.style];
}
else {
/* return default style */
}
}
});
Terkadang, peristiwa yang tidak terkait dengan peta menyebabkan gaya berubah. Misalnya, ketika suatu objek menjadi tidak valid, gayanya berubah. Jelas, karena data.style
sepenuhnya dalam kendali saya, mengubahnya sepele.
Masalahnya adalah bahwa peta tidak tahu bahwa gayanya telah berubah. Jika saya mengubah gaya objek dan kemudian memperbesar peta, memaksanya untuk menggambar ulang, saya perhatikan bahwa fungsi gaya saya berjalan dan mengembalikan gaya baru dan fitur tersebut digambar ulang. Bagaimana saya secara sistematis memaksa peta untuk menyegarkan?
Setelah beberapa pencarian dan percobaan, saya telah mencoba:
- Memanggil
render()
padaol.Map
itu sendiri. - Memanggil
dispatchChangeEvent()
padaol.source.Vector
- Memanggil
redraw()
padaol.layer.Vector
Ini disarankan tetapi tidak ada yang bekerja, yang tidak mengejutkan karena hanya metode pertama yang terdaftar dalam dokumentasi OpenLayers 3.2.0 API dan tidak ditandai sebagai stabil.
sumber
Jawaban:
Secara kebetulan, saya telah menemukan jawabannya - itu untuk memanggil
changed()
fitur itu sendiri setelah mengubahstyle
properti dari data terkait mereka. Lihat: http://openlayers.org/en/v3.2.0/apidoc/ol.Feature.html?unstable=true#changedIni memang mengharuskan saya untuk melacak
ol.Feature
objek yang terkait dengan setiapvectorData
objek (sebelumnya, saya hanya perlu menemukanvectorData
dari fitur, yang dapat dilakukan denganget()
) tetapi ini tidak banyak biaya.(Saya menemukan ini dengan melihat
setGeometry
dansetStyle
dan metode lainol.Feature
untuk melihat apa yang mereka lakukan.)sumber
changed
untuk sejumlah fitur yang masuk akal sebenarnya menimbulkan penalti kinerja yang cukup serius (Chrome beberapa kali gagal seperti ini). Saya sarankan memanggilchanged()
sumber layer Anda setelah semua fitur Anda telah diubah.Saya menghabiskan waktu satu minggu untuk mencoba mencari cara membuat fitur (Polygon) menghilang dari peta setelah menghapusnya (
vectorSource.removeFeature(selectedFeature)
. Dan tidak ada solusi yang berfungsi. Anehnya OL3 v3.15.1 saat ini tidak memiliki fungsi memaksa-refresh / render dasar yang berhasil! Solusi yang berhasil bagi saya adalah mengubahselectedFeature
gaya:Gaya apa pun akan berfungsi karena fitur tersebut telah dihapus dari layer tetapi tidak di-refresh.
sumber