OpenLayers'ta vektör özelliğine / katmanına tıklamanın koordinatlarını nasıl alabilirim?


15

Kullanıcı OpenLayers harita üzerinde bir vektör özelliği tıkladığında tıklamanın koordinatını almak gerekir. SelectControl yalnızca tıklatılan özelliği verir, tıklamanın koordinatlarını vermez. Yine de bir vektör tıklamanın koordinatlarına ulaşmak için? Kullanıcı tıklaması noktasında AnchoredBubble göstermek gerekiyor.

Yanıtlar:


16

Aslında, tıklama etkinliği örneği size istediğinizi verir.

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

        });

Gerekirse , açılır pencereyi görüntülemek için koordinatları piksele dönüştürebilirsiniz .

Düzenle - yalnızca özellik seçme sırasında koordinatlar almak için :

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

Merhaba simo, ben sadece vektör katmanı veya ilgilendiğim özelliği tıklarken çağrılacak tıklama olayı gerekir. Bence yukarıdaki örnek yakalar ve sadece vektör katmanları değil, tüm harita üzerinde tıklama olay işleyicisi çağırır. Teşekkürler, Vish
Vish

@ Vish: bu durumda Tim Schaub'un cevabına ve yukarıdaki düzenlememe bakın.
simo

Hey simo, getCoordinates yöntemindeki 'e' nereden geliyor?
Vish

e olaydır . GetCoordinates (e) işlevinin bildirimine ekledim . Özelliği geçebildiğinizden eminim, ancak etkinlikten emin değilim. Bir test yap.
simo

@simo, onSelect'in bir etkinlikle değil, bir özellikle çağrılmayı beklemesi gerektiğini söylüyor: dev.openlayers.org/docs/files/OpenLayers/Control/…
Chris

6

API, tıklama konumunu SelectFeaturedenetimden almanın bir yolunu sağlamaz - ancak gerekir. ( Etkinliğe xydahil olmak için) önemsiz bir ek olacaktır featureselected. Bunu biletlerseniz, bunu gerçekleştirmenin ilk adımı olurdu.

Bu arada, fare olayına SelectFeaturedenetim tarafından kullanılan özellik işleyicisinden erişebilirsiniz . Yani, şuna benzer bir dinleyiciniz olabilir:

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

Bu, (açık bir şekilde) SelectFeaturekontrole ve haritanıza bir referansınız olduğunu varsayar .


3

Aşağıdakileri kullanarak click olayının lat lon'unu elde edebildim:

İçinde clickFeatureişleyicisi

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

oluşturduğunuz selectFeatureReferencereferans nerede SelectFeature?


Bu çalıştı ama Ext.getCmp ( "coreRef") koddan ebeveyn kaldırmak zorunda kaldı.
Matthew Lock

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

Aşağıdaki gibi koordinatlar elde etmek için v3.8.2'de böyle anladım:
[-1.1645507812500016, 53.2257684357902]
İngiltere'yi tıkladığımda.


Bu en basit ve en kolay yoldur. Ayrıca v5.3 ile çalıştığını doğrulayabilir.
Raidok

0

Kullanabilirsiniz feature.getBounds().getCenterLonLat(). Nokta / çizgi / çokgen tipi özellikler için çalışır. Ve ne olduğunu bilmenize gerek yok, çünkü herkes için çalışıyor.


Merhaba Vadim, merkezde değil, kabarcıklarımı demirlemek istediğim için tıklamanın koordinatına ihtiyacım var. Teşekkürler,
Vish

0

Birinin benim yaptığım gibi bu eski soru boyunca tökezlemesi durumunda, şu anda OpenLayers'ın son sürümünde (3.20.0) Select olayını e.mapBrowserEvent.coordinatenerede kullanarak tıklama konumunu alabilirsiniz e.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.