Ho una mappa OpenLayers 3.2.0 che presenta alcune fonti vettoriali ( ol.source.Vector
) e livelli vettoriali associati ( ol.layer.Vector
)
Quando ol.Feature
vengono aggiunte funzionalità ( ) alle origini vettoriali, viene assegnata una data
proprietà impostata sull'oggetto javascript rappresentato dalla funzione. TypeScript segue ...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
I livelli vettoriali hanno quindi una funzione di stile che legge la data
proprietà e ne recupera lo stile:
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 */
}
}
});
A volte, eventi non correlati alla mappa fanno cambiare gli stili. Ad esempio, quando un oggetto diventa non valido, il suo stile cambia. Chiaramente, poiché data.style
è interamente sotto il mio controllo, cambiarlo è banale.
Il problema è che la mappa non sa che lo stile è cambiato. Se cambio lo stile di un oggetto e poi ingrandisco la mappa, costringendolo a ridisegnare, noto che le mie funzioni di stile vengono eseguite e restituiscono il nuovo stile e la funzionalità viene ridisegnata. Come imposto a livello di codice l'aggiornamento della mappa?
Dopo alcune ricerche e sperimentazioni, ho provato:
- Richiamo
render()
sullaol.Map
stessa. - Chiamando
dispatchChangeEvent()
ilol.source.Vector
- Chiamando
redraw()
ilol.layer.Vector
Questi sono stati suggeriti, ma nessuno di loro ha funzionato, il che non sorprende poiché solo il primo metodo è elencato nella documentazione API OpenLayers 3.2.0 e non è contrassegnato come stabile.