Tengo un mapa OpenLayers 3.2.0 que presenta algunas fuentes vectoriales ( ol.source.Vector) y capas vectoriales asociadas ( ol.layer.Vector)
Cuando ol.Featurese agregan características ( ) a las fuentes de vector, se les otorga una datapropiedad que se establece en el objeto de JavaScript que representa la característica. TypeScript sigue ...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
Las capas vectoriales tienen una función de estilo que lee la datapropiedad y recupera su 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 */
}
}
});
A veces, los eventos no relacionados con el mapa hacen que los estilos cambien. Por ejemplo, cuando un objeto deja de ser válido, su estilo cambia. Claramente, dado que data.styleestá completamente bajo mi control, cambiarlo es trivial.
El problema es que el mapa no sabe que el estilo ha cambiado. Si cambio el estilo de un objeto y luego hago zoom en el mapa, forzándolo a volver a dibujar, noto que mis funciones de estilo se ejecutan y devuelven el nuevo estilo y la característica se vuelve a dibujar. ¿Cómo fuerzo programáticamente el mapa para que se actualice?
Después de algunas búsquedas y experimentos, he intentado:
- Invocando
render()a laol.Mapmisma. - Llamando
dispatchChangeEvent()alol.source.Vector - Llamando
redraw()alol.layer.Vector
Se sugirieron, pero ninguno funcionó, lo cual no es sorprendente, ya que solo el primer método aparece en la documentación de la API de OpenLayers 3.2.0 y no está marcado como estable.