আমার ওল 3 অ্যাপে আমার একটি জিওজসন স্তর রয়েছে যা আমি প্রতি 5 সেকেন্ডে পুনরায় ছবি আঁকতে চাই (মানচিত্রে চলাচল করতে)।
আমি এটা কিভাবে করব ? Layer.redraw () এর সমতুল্য খুঁজে পেল না।
আমার ওল 3 অ্যাপে আমার একটি জিওজসন স্তর রয়েছে যা আমি প্রতি 5 সেকেন্ডে পুনরায় ছবি আঁকতে চাই (মানচিত্রে চলাচল করতে)।
আমি এটা কিভাবে করব ? Layer.redraw () এর সমতুল্য খুঁজে পেল না।
উত্তর:
জিওজেএসএন নথিতে কোনও ওয়েব পরিষেবা ফিরিয়ে দেওয়া বৈশিষ্ট্যগুলি থেকে আপনি প্রতি 5 সেকেন্ডে ভেক্টর উত্সটি রিফ্রেশ করতে পারেন:
var vectorSource = new ol.source.Vector();
var geojsonFormat = new ol.format.GeoJSON();
window.setTimeout(function() {
$.ajax('http://example.com/data.json', function(data) {
var features = geojsonFormat.readFeatures(data
{featureProjection:"EPSG:3857"});
geojsonSource.clear();
geojsonSource.addFeatures(features);
});
}, 5000);
অ্যাজাক্স ( $.ajax
) এর মাধ্যমে ডেটা অনুরোধ করার জন্য jQuery এখানে ব্যবহৃত হয় তবে আপনি অবশ্যই আপনার পছন্দের লাইব্রেরিটি ব্যবহার করতে পারেন।
এই কোড স্নিপেট আরও ধরে নেয় যে মানচিত্রটির অনুমানগুলি "EPSG: 3857" (ওয়েব মেরেটার) এবং জিওজেসন নথিগুলিতে স্থানাঙ্কগুলি দ্রাঘিমাংশ এবং অক্ষাংশ হয়।
vectorSource
এবং geojsonSource
কি একীভূত করা উচিত ?
আমি জানি যে এই প্রশ্নটি পুরানো তবে অবশেষে আমি ওপেনলেয়ার 3-তে একটি স্তর রিফ্রেশ করার সমাধান পেয়েছি।
আপনাকে লেয়ার উত্সের এই জাতীয় প্যারামগুলি আপডেট করতে হবে:
var source = yourLayer.getSource();
var params = source.getParams();
params.t = new Date().getMilliseconds();
source.updateParams(params);
updateParams
পদ্ধতিটি সমর্থন করে না ; OL3.18.2 শুধুমাত্র শো জন্য এটি ImageArcGISRest
, ImageMapGuide
, ImageWMS
, TileArcGISRest
এবং TileWMS
, এবং, না যেমন, ol.source.Vector
।
আপনি ডাব্লুএফএস স্তরটি রিফ্রেশ করতে পারেন myLayer.getSource().clear()
।
clear()
কোনও বিদ্যমান বৈশিষ্ট্যগুলি এখনই মানচিত্র থেকে সরানো হবে এবং কেবল এইচটিটিপি প্রতিক্রিয়া পাওয়ার পরে আবার যুক্ত করা হবে। এটি উভয়ের জন্য VectorOptions#url
এবং এর জন্য একটি মান নির্দিষ্ট করার ক্ষেত্রে সত্য VectorOptions#loader
। রিয়েলটাইম ডেটার জন্য, ম্যানুয়ালি কিছু ওয়েবসকেট বা XHR যাদু করছেন এবং তারপর কলিং getSource().clear()
দ্বারা অনুসরণ getSource().addFeatures(...)
শেষ ব্যবহারকারীর ভাল যথাসাধ্য চেহারা।
ওল 2 এর সাথে আমি একটি স্তর রিফ্রেশ কৌশল ব্যবহার করেছি যা ওল 3-তে যোগ করা হয়নি। নীচে একটি স্ব কলিং ফাংশন রয়েছে যা জিওজেএসএন আনার জন্য এজ্যাক্স অনুরোধটি ব্যবহার করবে এবং তারপরে এটি পড়বে এবং এটি কোনও উত্সে যুক্ত করবে।
var yourSource = new ol.source.GeoJSON();
//add this source to a layer, the layer to a map with a view etc
...
//now fetch the data
var fetchData = function () {
jQuery.ajax(url,
{
dataType: 'json',
success: function (data, textStatus, jqXHR) {
yourSource.clear(); //remove existing features
yourSource.addFeatures(yourSource.readFeatures(data));
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
}
});
//call this again in 5 seconds time
updateTimer = setTimeout(function () {
fetchData();
}, 5000);
};
fetchData(); //must actually call the function!
আশাকরি এটা সাহায্য করবে.
এটি স্তরগুলির জন্য নিখুঁতভাবে কাজ করে:
layer.changed();
http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html# হিসাবে পরিবর্তন হয়েছে
layer.changed();
স্তরগুলির জন্য কীভাবে নিখুঁত (লাই) কাজ করে সে সম্পর্কে আপনাকে আরও কিছু ব্যাখ্যা করতে হবে । ডকুমেন্টেশন বিবরণ Increases the revision counter and dispatches a 'change' event.
সত্যিই সহায়ক নয়। পরিবর্তিত () পদ্ধতিটি কীভাবে প্রতি 5 সেকেন্ডে মানচিত্র পুনরায় আঁকানো সম্পর্কিত প্রশ্নের উত্তর দেয়?
layer.changed();
পক্ষে কোনও প্রভাব ফেলেনি, তবে source.changed();
কৌশলটি করেছে।
স্পষ্টভাবে রিফ্রেশ করার দরকার নেই। প্রতিবার আপনি যখন কোনও স্তরের সামগ্রী আপডেট করবেন তখন নতুন ফ্রেমের রেন্ডারিংয়ের জন্য ম্যাপটি সতেজ করা হবে।
ম্যানুয়ালি রেন্ডারিং করার জন্য আপনার কাছে পদ্ধতি map.render()
এবং map.renderSync()
পদ্ধতি জোর করে ।