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 data
wł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 data
wł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.style
jest 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.Map
sobie. - 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.