Ho una mappa OpenLayers 3.2.0 che presenta alcune fonti vettoriali ( ol.source.Vector) e livelli vettoriali associati ( ol.layer.Vector)
Quando ol.Featurevengono aggiunte funzionalità ( ) alle origini vettoriali, viene assegnata una dataproprietà 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 dataproprietà 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.Mapstessa. - 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.