У меня есть карта OpenLayers 3.2.0, которая имеет некоторые векторные источники ( ol.source.Vector
) и связанные векторные слои ( ol.layer.Vector
)
Когда Features ( ol.Feature
) добавляются к векторным источникам, им присваивается data
свойство, которое устанавливается для объекта javascript, который представляет объект. TypeScript следует ...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
Векторные слои тогда имеют функцию стиля, которая читает data
свойство и получает его стиль:
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 */
}
}
});
Иногда события, не связанные с картой, вызывают изменение стилей. Например, когда объект становится недействительным, его стиль меняется. Ясно, что, поскольку я data.style
полностью нахожусь под его контролем, его изменение тривиально.
Проблема в том, что карта не знает, что стиль изменился. Если я изменяю стиль объекта, а затем увеличиваю карту, заставляя ее перерисовывать, я замечаю, что мои функции стиля запускаются и возвращают новый стиль, а функция перерисовывается. Как мне программно заставить карту обновиться?
После некоторых поисков и экспериментов я попытался:
- Призывая
render()
кol.Map
себе. - Вызов
dispatchChangeEvent()
наol.source.Vector
- Вызов
redraw()
наol.layer.Vector
Они были предложены, но ни один из них не сработал, что неудивительно, поскольку только первый метод даже указан в документации по API OpenLayers 3.2.0 и не помечен как стабильный.