আমার কাছে একটি ওপেনলায়ার্স ৩.২.০ মানচিত্র রয়েছে যা কিছু ভেক্টর উত্স ( ol.source.Vector
) এবং সম্পর্কিত ভেক্টর স্তরগুলি ( ol.layer.Vector
) সরবরাহ করে
যখন বৈশিষ্ট্যগুলি ( ol.Feature
) ভেক্টর উত্সগুলিতে যুক্ত করা হয়, তখন তাদের এমন একটি data
সম্পত্তি দেওয়া হয় যা জাভাস্ক্রিপ্ট অবজেক্টে সেট করা থাকে যা বৈশিষ্ট্যটি উপস্থাপন করে। টাইপস্ক্রিপ্ট অনুসরণ করে ...
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
এগুলি প্রস্তাবিত হয়েছিল তবে তাদের কেউই কাজ করেন নি, এটি অবাক করার মতো নয় যেহেতু কেবল প্রথম পদ্ধতিটি এমনকি ওপেন লেয়ারস ৩.২.০ এপিআই ডকুমেন্টেশনে তালিকাভুক্ত এবং এটি স্থিতিশীল হিসাবে চিহ্নিত করা হয়নি।