Mam mapę OpenLayers 3.2.0, która zawiera niektóre źródła wektorowe ( ol.source.Vector) i powiązane warstwy wektorowe ( ol.layer.Vector)
Kiedy Funkcje ( ol.Feature) są dodawane do źródeł wektorowych, otrzymują one datawłaściwość ustawioną na obiekt javascript, który reprezentuje funkcja. TypeScript śledzi ...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
Warstwy wektorowe mają następnie funkcję stylu, która odczytuje datawłaściwość i pobiera jej styl:
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 */
}
}
});
Czasami zdarzenia niezwiązane z mapą powodują zmianę stylów. Na przykład, gdy obiekt staje się nieprawidłowy, zmienia się jego styl. Oczywiście, ponieważ data.stylejest całkowicie pod moją kontrolą, zmiana tego jest banalna.
Problem polega na tym, że mapa nie wie, że styl się zmienił. Jeśli zmienię styl obiektu, a następnie powiększę mapę, zmuszając ją do przerysowania, zauważę, że moje funkcje stylu działają i zwracają nowy styl, a funkcja jest przerysowana. Jak programowo wymusić odświeżenie mapy?
Po kilku poszukiwaniach i eksperymentach próbowałem:
- Dzwoniąc
render()naol.Mapsobie. - Dzwoniąc
dispatchChangeEvent()naol.source.Vector - Dzwoniąc
redraw()naol.layer.Vector
Zostały zasugerowane, ale żadna z nich nie działała, co nie jest zaskakujące, ponieważ tylko pierwsza metoda jest wymieniona w dokumentacji API OpenLayers 3.2.0 i nie jest oznaczona jako stabilna.