Tengo un mapa OpenLayers 3.2.0 que presenta algunas fuentes vectoriales ( ol.source.Vector
) y capas vectoriales asociadas ( ol.layer.Vector
)
Cuando ol.Feature
se agregan características ( ) a las fuentes de vector, se les otorga una data
propiedad 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 data
propiedad 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.style
está 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.Map
misma. - 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.