У мене є карта OpenLayers 3.2.0, яка містить деякі векторні джерела ( ol.source.Vector
) та пов'язані з ними векторні шари ( ol.layer.Vector
)
Коли компоненти ( 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 і він не позначений як стабільний.