ওপেনলায়ার্সে ভেক্টর বৈশিষ্ট্য / স্তরটিতে ক্লিকের স্থানাঙ্কগুলি কীভাবে পাব?


15

যখন ওপেনলায়ার্স মানচিত্রে কোনও ভেক্টর বৈশিষ্ট্যটিতে ব্যবহারকারী ক্লিক করেন তখন আমার ক্লিকটির সমন্বয় পেতে হবে। সিলেক্ট কন্ট্রোল কেবল এমন বৈশিষ্ট্য দেয় যা ক্লিক করা হয়েছিল এবং ক্লিকের স্থানাঙ্কগুলি নয়। যাইহোক কোনও ভেক্টরের ক্লিকের স্থানাঙ্কগুলি পেতে? ব্যবহারকারী ক্লিকের পয়েন্টে আমাকে অ্যাঙ্কার্ডব্বল দেখাতে হবে।

উত্তর:


16

আসলে, ক্লিক ইভেন্টের নমুনা আপনাকে যা চায় তা দেয়।

OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {                
            defaultHandlerOptions: {
                'single': true,
                'double': false,
                'pixelTolerance': 0,
                'stopSingle': false,
                'stopDouble': false
            },

            initialize: function(options) {
                this.handlerOptions = OpenLayers.Util.extend(
                    {}, this.defaultHandlerOptions
                );
                OpenLayers.Control.prototype.initialize.apply(
                    this, arguments
                ); 
                this.handler = new OpenLayers.Handler.Click(
                    this, {
                        'click': this.trigger
                    }, this.handlerOptions
                );
            }, 

            trigger: function(e) {
                var lonlat = map.getLonLatFromViewPortPx(e.xy);
                alert("You clicked near " + lonlat.lat + " N, " +
                                          + lonlat.lon + " E");
            }

        });

প্রয়োজনে পপআপ প্রদর্শনের জন্য স্থানাঙ্কগুলিকে পিক্সেলে রূপান্তর করতে পারেন ।

সম্পাদনা করুন - কেবল বৈশিষ্ট্য নির্বাচন করে স্থানাঙ্ক পেতে :

   var options = {
    onSelect: getCoordinates,
};

var selectEt = new OpenLayers.Control.SelectFeature(mylayer, options);
map.addControl(selectEt);

function getCoordinates(e) {
 // this should work
 var lonlat = map.getLonLatFromViewPortPx(e.xy);
 alert("You clicked near " + lonlat.lat + " N, " +
                                          + lonlat.lon + " E");
}

হাই সিমো, আমার আগ্রহী ভেক্টর স্তর বা বৈশিষ্ট্যটিতে ক্লিক করার সময় আমার ক্লিক ইভেন্টটি কল করা দরকার I আমি মনে করি উপরের নমুনাটি ক্যাপচার করে এবং পুরো মানচিত্রে ইভেন্ট হ্যান্ডলারকে ক্লিক করে কেবল ভেক্টর স্তরগুলিই নয়। আপনাকে ধন্যবাদ, বিশ
বিশ

@ উইশ: সেক্ষেত্রে টিম শ্যাউবের উত্তর এবং উপরে আমার সম্পাদনা দেখুন।
সিমো

আরে সিমো, getCoordinates পদ্ধতিতে 'e' কোথা থেকে আসছে?
বিশ

ঘটনাGetCoordinates (e) ফাংশনের ঘোষণায় এটি যুক্ত করেছি । আমি নিশ্চিত যে আপনি বৈশিষ্ট্যটি পাস করতে পারবেন তবে আমি ইভেন্টটি সম্পর্কে নিশ্চিত নই। একটি পরীক্ষা করুন।
সিমো

@ সিমো, এতে বলা হয়েছে যে অন্ল্লেটকে কোনও বৈশিষ্ট্য সহ ডাকা হবে বলে আশা করা উচিত, কোনও ইভেন্ট নয়: dev.openlayers.org/docs/files/OpenLayers/Control/…
ক্রিস

6

এপিআই SelectFeatureনিয়ন্ত্রণ থেকে ক্লিকের অবস্থান পাওয়ার কোনও উপায় সরবরাহ করে না - তবে এটি হওয়া উচিত। এটি একটি তুচ্ছ সংযোজন হবে ( ইভেন্টে xyঅন্তর্ভুক্ত করা featureselected)। আপনি যদি এটি টিকিট করেন তবে এটি ঘটানোর এটি প্রথম পদক্ষেপ।

ইতিমধ্যে আপনি SelectFeatureনিয়ন্ত্রণ দ্বারা ব্যবহৃত বৈশিষ্ট্য হ্যান্ডলারের মাউস ইভেন্টটি অ্যাক্সেস করতে পারবেন । সুতরাং, আপনার কাছে এমন শ্রোতা থাকতে পারে যা দেখতে এরকম কিছু দেখাচ্ছে:

layer.events.on({featureselected: function(event) {
    // should be event.xy, but it's not available currently
    var pixel = control.handlers.feature.evt.xy;
    var location = map.getLonLatFromPixel(pixel);
    alert("You clicked near " + location);
});

এটি ধরে নিয়েছে (স্পষ্টতই) যে SelectFeatureনিয়ন্ত্রণ এবং আপনার মানচিত্রের একটি রেফারেন্স রয়েছে ।


3

আমি ক্লিক করে ক্লিক ইভেন্টের দীর্ঘতমটি পেতে সক্ষম হয়েছি:

clickFeatureহ্যান্ডলারের ভিতরে

var clickedlonlat = 
    Ext.getCmp("coreRef").parent.map.getLonLatFromPixel(
        new OpenLayers.Pixel(
            selectFeatureReference.handlers.feature.evt.layerX,
            selectFeatureReference.handlers.feature.evt.layerY
        ));

যেখানে আপনি তৈরি করেছেন selectFeatureReferenceতার রেফারেন্স কোথায় SelectFeature


এটি কাজ করে, তবে আমাকে এক্সট্রেটস্যাম্প ("কোরআরফ") সরিয়ে ফেলতে হয়েছিল parent কোড থেকে পিতামাতা
ম্যাথিউ লক

3
map.on('click', function(evt){
    console.log(ol.proj.transform(evt.coordinate, 'EPSG:3857', 'EPSG:4326'));
});

নীচের মত স্থানাঙ্ক পাওয়ার জন্য আমি v3.8.2 এ এটিকে বুঝতে পেরেছিলাম:
[-1.1645507812500016, 53.2257684357902]
যখন আমি ইউকে এর আশেপাশে ক্লিক করি।


এটি সহজ এবং সহজ উপায়। এটি v5.3 এর সাথেও কাজ করে তা নিশ্চিত করতে পারে।
রাইডোক

0

আপনি ব্যবহার করতে পারেন feature.getBounds().getCenterLonLat()। পয়েন্ট / লাইন / বহুভুজ ধরণের বৈশিষ্ট্যগুলির জন্য কাজ করে। এবং এটি কী তা আপনাকে জানার দরকার নেই, কারণ এটি সবার জন্য কাজ করে।


হাই ভাদিম, আমার ক্লিকের সমন্বয় দরকার কারণ আমি সেখানে আমার বুদ্বুদ নোঙ্গর করতে চাই কেননা কেন্দ্রে নয়। আপনাকে ধন্যবাদ,
বিশ

0

যদি কেউ এই পুরানো প্রশ্নটি দেখে আমার হোঁচট খায় তবে এই মুহুর্তে ওপেনলায়ার্সের সর্বশেষ প্রকাশে (3.20.0) আপনি নির্বাচিত ইভেন্টটি e.mapBrowserEvent.coordinateকোথায় রয়েছে eতা ব্যবহার করে ক্লিক করা অবস্থান পেতে পারেন ।

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