2010-11-08 19 views

cevap

13

İlk olur Ama uygulamanızda, sorunuzdaki daire simgeleriyle bahsettiğiniz vektör katmanını içeren dört harita seviyesi vardır.

0: "Đường Sá"   ||---> Overlay Tiles 
    1: "Vệ Tinh"   ||---> Overlay Tiles 
    2: "TMS Overlay"  ||---> Markers ~ Icons 
    3: "KML"    ||---> Vector 

Analiz: birini son sıfır ile başlayan , sadece vektör diğerleri biz işaretleyici katman üzerinde odaklanmak zorunda bu sorunu gelmek için tiles.In paylaşımı olarak kalır, sonuncusu gibi görünüyor, yani özellikleri (simgeler).
Haritadaki gibi gördüğünüz gibi, için sürüklemeyi denediğinizde haritayı tetiklediniz. haritayı sürükleyin. Etkinlik kaydı, haritaya ilk olarak harita için değil, işaretçi katmanı için çalıştığından sürüklenemiyorsunuz. haritayı sürüklemek için tıklattıktan sonra fareyi (sürükleme) tıklamanız gerekir. Bunu vektör katmanında denediğinizde, katmanın katmanları kaplaması için etkinliği geçme şansı yoktur.

Çözüm:
Sana bu böcek türü sorunu ulaşmak için iki yol öneriyoruz. .Bu genellikle kontrol Handler.Feature miras SelectFeature olarak bilinen openlayers bir kontrol yoktur

Let this be the long way
hover.Which üzerinde tıklandığında belirli bir katmandan vektör özelliği, bu işleyici yanıt verebilir anlamına veriyor Herhangi bir çizilen özellikler ile ilgili fare olayı.Yeni geri aramalar, bunlardan birine ihtiyaç duyuyor, bunlardan birine ihtiyaç duyuyorsunuz.
. .Tek yapmamız gereken tek şey, tıklama olayı geri kalan fayanslar için yatay kaydırma yapmaktır. Bu denetim Başka layer.To aracılığıyla olayları geçmek için katmanları sağlamak zorunda aktive edildiğinde

var selectFeat = new OpenLayers.Control.SelectFeature(
        vector, {toggle: true, clickout:false}); 
    selectFeat.handlers['feature'].stopDown = false; 
    selectFeat.handlers['feature'].stopUp = false; 
    map.addControl(selectFeat);//instance of map 
    selectFeat.activate(); 

tüm bu eylemler Şimdiye kadar, son bir şey bıraktı yapılan basitçe

layer.events.fallThrough = true;//both for vector and marker layers 

sonra, bunu Bunu yapmak için: Bu, işaretçilerin ve kml katmanlarının sırasını değiştiriyor. layers.You z-endeksi yüksek id sahip tabaka tabakaların, dizinin üstünde kontrol edilebilir olduğunu
And this should be the easiest way
da yüksek Z-dizini vardır. Bu çözeltinin ek olarak

layer.setZIndex(...any number...); 

, kolay yolu sadece simgeler tüm ani tıklayarak özellikleri uzun bir yol olmadan kayıp olabilir harita aracılığıyla sürüklemek için izin verir, bu yüzden onları geride bırakmak sizin seçiminiz.

+0

Çok teşekkür ederim! Doğru çalışıyor ... – KimKha

+0

Benim de sorumu yanıtladı! Biraz değiştirmek zorunda kaldım ama son derece yararlı, teşekkürler! – Jared

+0

harika dostum !!! TEŞEKKÜRLER !!!! –

1

Fare olayları bir svg Vector overlay ile katmanlara altından yaymak istemiyor. Yukarıdaki çözüm, tüm işaretleyici HTML katmanlarının tüm Vector SVG katmanlarından daha yüksek bir zindex olmasını gerektirir.

aşağıdaki CSS svg elemanı içinden olayları yayılan/kısım kısım etrafında bir potansiyel sağlar, ancak svg kaplaması olan herhangi bir vektör elemanları olduğu sürece:

/** Hack so mouse events propagate(bubble) through svg elements, but not the 
images within svg */ 
.olLayerDiv svg { 
    pointer-events: none; 
} 

.olLayerDiv svg * { 
    pointer-events: auto; 
} 

fallThrough eklenirken yukarıda CSS birleştirin : Haritalar, katmanlar ve kontroller içindeki tüm OpenLayers etkinlik nesnelerine true.

// map events 
var map = new OpenLayers.Map(div, { fallThrough:true }); 

// layer events 
var lvec = new OpenLayers.Layer.Vector(....); 
lvec.events.fallThrough = true 
map.addLayers([lvec]) 

// all map controls 
var ctrl = new OpenLayers.Control.SelectFeature(lvec, {... 
    fallThrough: true, autoActivate:true }); 
map.addControl(ctrl)