ওপেনলায়ার্স 3 এ লেয়ার.ড্রেও (সত্য) এর সমান?


13

আমার ওল 3 অ্যাপে আমার একটি জিওজসন স্তর রয়েছে যা আমি প্রতি 5 সেকেন্ডে পুনরায় ছবি আঁকতে চাই (মানচিত্রে চলাচল করতে)।

আমি এটা কিভাবে করব ? Layer.redraw () এর সমতুল্য খুঁজে পেল না।


আপনি কি তাকিয়েছেন? সাধারণভাবে, ভেক্টর অঙ্কনটি মসৃণ এবং ওলি 3-তে ভিন্নভাবে পরিচালিত হয় তবে আপনি কী করতে চান তা আপনার প্রশ্ন থেকে সম্পূর্ণ পরিষ্কার নয়।
জন পাওয়েল

@ জনবারিয়া - আমার জিওজেসন ডেটা পোস্টগ্রাস থেকে আসে যা প্রতি 5 সেকেন্ডে নতুন জিপিএস ডেটা দিয়ে আপডেট করা হয়। আমি প্রত্যেকবার মানচিত্রে ইউনিটগুলির বর্তমান অবস্থান দেখানোর জন্য স্তরটি পুনরায় আঁকতে চাই (এটি পরিবর্তন হতে
চলেছে

সুতরাং, আপনি প্রতি 5 সেকেন্ডে একটি পুনরাবৃত্তাকার সেটটাইমআউট কল (বা অনুরূপ কিছু) ব্যবহার করে ডেটা অনুরোধ করছেন এবং আপনি কীভাবে ভেক্টর বৈশিষ্ট্যগুলি রিফ্রেশ করতে বাধ্য করবেন তা জানতে চান?
জন পাওয়েল

@ জনবারিয়া - এর চেয়ে আরও ভাল উপায় যদি আমি শিখতে ইচ্ছুক, তবে এটি আমি যা করি, আমি মানচিত্রে রিয়েল টাইমে জিপিএসের অবস্থানটি দেখাতে চাই। জিপিএস তাদের অবস্থান পোস্টজিআইএসে প্রেরণ করে এবং সেখান থেকে আমি জিওএসএসএন ব্যবহার করে ডেটা পড়ি (বা আমি জিও সার্ভার ব্যবহার করতে পারি) তবে আমি স্তরটি একবারে একবারে আপডেট হওয়ার ইচ্ছা করি।
অ্যালোফিন্ড

অবশ্যই, আপনি যা করার চেষ্টা করছেন তা পেয়েছি। কোডের নমুনার কোনও সম্ভাবনা, কারণ আমার অভিজ্ঞতায় আপনি যদি রিমোট সার্ভারে এজাক্স কল সহ সেটটাইমআউটটিতে অ্যানিমেশন লুপ রাখেন এবং ফর্ম্যাট.জিয়োজেএসএন বা অনুরূপ ব্যবহার করে ফিরে আসা জসনকে লোড করেন, বৈশিষ্ট্যগুলি আপডেট হবে।
জন পাওয়েল

উত্তর:


9

জিওজেএসএন নথিতে কোনও ওয়েব পরিষেবা ফিরিয়ে দেওয়া বৈশিষ্ট্যগুলি থেকে আপনি প্রতি 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" (ওয়েব মেরেটার) এবং জিওজেসন নথিগুলিতে স্থানাঙ্কগুলি দ্রাঘিমাংশ এবং অক্ষাংশ হয়।


3
এই কোডটি আমাকে বিভ্রান্ত করে, vectorSourceএবং geojsonSourceকি একীভূত করা উচিত ?
কেলি টমাস

আমার মনে হয় আপনি উইন্ডোটি সেট করেছেন।আর আন্তঃকালকাল সেটটাইমআউট নয়; অন্যথায় এটি কেবল একবার করে।
জোনাথন

9

আমি জানি যে এই প্রশ্নটি পুরানো তবে অবশেষে আমি ওপেনলেয়ার 3-তে একটি স্তর রিফ্রেশ করার সমাধান পেয়েছি।

আপনাকে লেয়ার উত্সের এই জাতীয় প্যারামগুলি আপডেট করতে হবে:

var source = yourLayer.getSource();
var params = source.getParams();
params.t = new Date().getMilliseconds();
source.updateParams(params);

3
দেখে মনে হচ্ছে যে সমস্ত উত্স updateParamsপদ্ধতিটি সমর্থন করে না ; OL3.18.2 শুধুমাত্র শো জন্য এটি ImageArcGISRest, ImageMapGuide, ImageWMS, TileArcGISRestএবং TileWMS, এবং, না যেমন, ol.source.Vector
আরজান

তারিখ # গেটটাইম তারিখের চেয়ে আরও ভাল হতে পারে # getMilliseconds ক্যাশে অবৈধ করতে এবং লেয়ারটিকে পুনরায় আঁকতে বাধ্য করে কারণ এটি প্রতিবারই একটি অনন্য নম্বর নিশ্চিত করবে।
ওয়াকারমেট

5

আপনি ডাব্লুএফএস স্তরটি রিফ্রেশ করতে পারেন myLayer.getSource().clear()


1
এটি আমার জন্য ওপেনলায়ার্স 3 বনাম 0.14.2 এবং একটি ডাব্লুএফএস জিওজেএসএন ভেক্টর উত্স দিয়ে করেছে।
শির্ক

3
যদি তারা অর্থের উপরে থাকে তবে এক-লাইনের উত্তরের সাথে কোনও ক্ষতি হবে না। এই তথ্য বাক্সটি সরানোর জন্য একটি খ্যাতি পুরষ্কার থাকা উচিত।
ডেনিস বাউজুস

1
উত্তরটি সঠিক, তবে এটি কিছুটা ঝলকানি দেখাতে পারে: কল করার সাথে সাথে clear()কোনও বিদ্যমান বৈশিষ্ট্যগুলি এখনই মানচিত্র থেকে সরানো হবে এবং কেবল এইচটিটিপি প্রতিক্রিয়া পাওয়ার পরে আবার যুক্ত করা হবে। এটি উভয়ের জন্য VectorOptions#urlএবং এর জন্য একটি মান নির্দিষ্ট করার ক্ষেত্রে সত্য VectorOptions#loader। রিয়েলটাইম ডেটার জন্য, ম্যানুয়ালি কিছু ওয়েবসকেট বা XHR যাদু করছেন এবং তারপর কলিং getSource().clear()দ্বারা অনুসরণ getSource().addFeatures(...)শেষ ব্যবহারকারীর ভাল যথাসাধ্য চেহারা।
আরজান

3

ওল 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!

আশাকরি এটা সাহায্য করবে.


2

এটি স্তরগুলির জন্য নিখুঁতভাবে কাজ করে:

layer.changed();

http://openlayers.org/en/latest/apidoc/ol.layer.Vector.html# হিসাবে পরিবর্তন হয়েছে


1
layer.changed();স্তরগুলির জন্য কীভাবে নিখুঁত (লাই) কাজ করে সে সম্পর্কে আপনাকে আরও কিছু ব্যাখ্যা করতে হবে । ডকুমেন্টেশন বিবরণ Increases the revision counter and dispatches a 'change' event.সত্যিই সহায়ক নয়। পরিবর্তিত () পদ্ধতিটি কীভাবে প্রতি 5 সেকেন্ডে মানচিত্র পুনরায় আঁকানো সম্পর্কিত প্রশ্নের উত্তর দেয়?
nmtoken

আমি একটি সংশোধিত জিওজসন উত্সটি সংরক্ষণ করতে আজাক্স ব্যবহার করেছি এবং আমার সমস্যাটি হ'ল আমি যদি স্তরটি বন্ধ করে দিয়ে আবার খুলি তবে মানচিত্রটি উত্সটির ক্যাশেড (অপরিবর্তিত) সংস্করণ ব্যবহার করেছে। একবার আমি ক্যাশে সাফ করার পরে স্তরটি প্রত্যাশিত উত্সটি ব্যবহার করবে যেমনটি আমি আশা করি। দুর্ভাগ্যক্রমে, প্রস্তাবিতটি আমার layer.changed();পক্ষে কোনও প্রভাব ফেলেনি, তবে source.changed();কৌশলটি করেছে।
পিটার কুপার

1

স্পষ্টভাবে রিফ্রেশ করার দরকার নেই। প্রতিবার আপনি যখন কোনও স্তরের সামগ্রী আপডেট করবেন তখন নতুন ফ্রেমের রেন্ডারিংয়ের জন্য ম্যাপটি সতেজ করা হবে।

ম্যানুয়ালি রেন্ডারিং করার জন্য আপনার কাছে পদ্ধতি map.render()এবং map.renderSync()পদ্ধতি জোর করে ।


এটি সামগ্রী আপডেট করে না, কেবল মানচিত্রের ক্যানভাস আপডেট করে।
ম্যাপার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.