ฉันมีแผนที่ OpenLayers 3.2.0 ซึ่งมีบางแหล่งเวกเตอร์ ( ol.source.Vector
) และเลเยอร์เวกเตอร์ที่เกี่ยวข้อง ( ol.layer.Vector
)
เมื่อเพิ่มคุณสมบัติ ( 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
ตัวเอง - Calling
dispatchChangeEvent()
บนol.source.Vector
- Calling
redraw()
บนol.layer.Vector
สิ่งเหล่านี้ถูกนำเสนอ แต่ไม่มีวิธีใดทำงานได้ซึ่งไม่น่าแปลกใจเนื่องจากมีเพียงวิธีแรกเท่านั้นที่แสดงรายการไว้ในเอกสารประกอบ OpenLayers 3.2.0 API และไม่ได้ทำเครื่องหมายว่าเสถียร