मैं OpenLayers में वेक्टर सुविधा / परत पर एक क्लिक के निर्देशांक कैसे प्राप्त करूं?


15

जब उपयोगकर्ता OpenLayers मानचित्र पर वेक्टर सुविधा पर क्लिक करता है, तो मुझे क्लिक का समन्वय प्राप्त करने की आवश्यकता होती है। SelectControl केवल उस सुविधा को देता है जिसे क्लिक किया गया था न कि क्लिक के निर्देशांक। वैसे भी एक वेक्टर पर क्लिक के निर्देशांक में पाने के लिए? मुझे उपयोगकर्ता क्लिक के बिंदु पर AnchoredBubble दिखाने की आवश्यकता है।

जवाबों:


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");
}

हाय सिमो, मुझे क्लिक की जाने वाली घटना की आवश्यकता तभी होगी जब मैं वेक्टर लेयर या फीचर पर क्लिक करूं जिसमें मुझे रुचि हो। मुझे लगता है कि कैप्चर और कॉल के ऊपर का नमूना पूरे मैप पर ईवेंट हैंडलर पर क्लिक करता है, न कि केवल वेक्टर लेयर्स पर। थैंक यू, विश
विश्

@Vish: उस मामले में, टिम शहाब का जवाब और ऊपर मेरा संपादन देखें।
सिमो

अरे सिमो, गेटकॉर्ड दिशाओं में 'ई' कहां से आ रहा है?
Vish

घटना है । मैंने इसे फ़ंक्शन गेटकॉर्डिनेट्स (ई) की घोषणा में जोड़ा । मुझे यकीन है कि आप इस सुविधा को पारित कर सकते हैं, लेकिन मुझे इस घटना पर यकीन नहीं है। एक परीक्षण करें।
सिमो

@ सिमो, यह कहता है कि onSelect को एक फीचर के साथ कॉल करने की उम्मीद करनी चाहिए, न कि एक ईवेंट: 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


यह काम किया, लेकिन मुझे Ext.getCmp ("coreRef") को हटाना पड़ा। कोड से माता-पिता
मैथ्यू लॉक

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) में किया था, OpenLayers की नवीनतम रिलीज में भर में मामला किसी stumbles में आप का उपयोग करके क्लिक स्थिति प्राप्त कर सकते हैं e.mapBrowserEvent.coordinateजहां eघटना का चयन है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.