Bazı vektör kaynakları ( ol.source.Vector
) ve ilişkili vektör katmanları ( ol.layer.Vector
) özellikleri bir OpenLayers 3.2.0 harita var
ol.Feature
Vektör kaynaklarına Unsurlar ( ) eklendiğinde, bunlara data
unsurun temsil ettiği javascript nesnesine ayarlanmış bir özellik verilir . TypeScript aşağıdakileri takip eder ...
vectorSource.addFeature(new ol.Feature({
geometry: /* ... */,
data: vectorData,
}));
Vektör katmanları daha sonra data
özelliği okuyan ve stilini alan bir stil işlevine sahiptir :
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 */
}
}
});
Bazen, harita ile ilgisi olmayan olaylar stillerin değişmesine neden olur. Örneğin, bir nesne geçersiz hale geldiğinde, stili değişir. Açıkçası, data.style
tamamen benim kontrolümde olduğu için, değiştirmek önemsizdir.
Sorun, haritanın stilin değiştiğini bilmemesi. Bir nesnenin stilini değiştirip haritayı yakınlaştırıp yeniden çizmeye zorlarsam, stil işlevlerimin çalıştığını ve yeni stili döndürdüğünü ve özelliğin yeniden çizildiğini fark ederim. Haritayı programlı olarak yenilenmeye nasıl zorlarım?
Bazı arama ve denemelerden sonra denedim:
- Arama
render()
üzerindeol.Map
kendisi. - Şunu arıyor
dispatchChangeEvent()
:ol.source.Vector
- Şunu arıyor
redraw()
:ol.layer.Vector
Bunlar önerildi, ancak hiçbiri işe yaramadı, çünkü OpenLayers 3.2.0 API belgelerinde sadece ilk yöntem bile listelendiğinden ve kararlı olarak işaretlenmediğinden şaşırtıcı değil.