Eu tenho um mapa do OpenLayers 3.2.0 que apresenta algumas fontes vetoriais ( ol.source.Vector
) e camadas vetoriais associadas ( ol.layer.Vector
)
Quando Features ( ol.Feature
) são adicionados às fontes de vetor, eles recebem uma data
propriedade definida para o objeto javascript que o recurso representa. O TypeScript segue ...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
As camadas vetoriais têm uma função de estilo que lê a data
propriedade e recupera seu estilo:
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 */
}
}
});
Às vezes, eventos não relacionados ao mapa fazem com que os estilos mudem. Por exemplo, quando um objeto se torna inválido, seu estilo muda. Claramente, uma vez que data.style
está inteiramente sob meu controle, mudá-lo é trivial.
O problema é que o mapa não sabe que o estilo mudou. Se eu mudar o estilo de um objeto e depois ampliar o mapa, forçando-o a redesenhar, noto que minhas funções de estilo são executadas e retornam o novo estilo e o recurso é redesenhado. Como forço programaticamente a atualização do mapa?
Após algumas pesquisas e experimentações, tentei:
- Invocando
render()
aol.Map
si mesmo. - Chamando
dispatchChangeEvent()
ool.source.Vector
- Chamando
redraw()
ool.layer.Vector
Eles foram sugeridos, mas nenhum deles funcionou, o que não é surpreendente, pois apenas o primeiro método está listado na documentação da API do OpenLayers 3.2.0 e não está marcado como estável.