일부 벡터 소스 ( ol.source.Vector
) 및 관련 벡터 레이어 ( ol.layer.Vector
) 가있는 OpenLayers 3.2.0 맵이 있습니다.
기능 ( ol.Feature
)이 벡터 소스에 추가 되면 data
해당 기능이 나타내는 자바 스크립트 객체로 설정된 속성 이 제공 됩니다. 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
이것들은 제안되었지만 그중 아무것도 작동하지 않았으며, 첫 번째 방법 만 OpenLayers 3.2.0 API 문서에 나열되어 있으며 안정적으로 표시되어 있지 않기 때문에 놀라운 것은 아닙니다.