Openlayers'ta katman düzeni nasıl tanımlanır?


28

Bir marker katmanım, iki vektör katmanım ve iki raster katmanım var. İşaretleyici katman, iki raster katman tarafından kaplanır.

İşaret katmanını her zaman en üste taşımanın bir yolu var mı?

Düzenlendi: Z dizinlerinin sırası vektör katmanında iyi çalışıyor, ancak haritada daha düşük bir Z indeksli başka bir WMS tarama katmanı eklediğimde, tarama katmanı yine de vektör katmanını kaplıyor.

Düzenlendi: Herhangi biri katman oluşturma sırasındaki "LayerIndex" ve "Z-Index" açısından görüntü oluşturma sırasındaki farkı işaret edebilir mi? Katman endeksinin bindirme sırasını ele aldığını ve Zindex'in bir vektör katmanındaki özellik sırasını ele aldığını düşünüyorum, değil mi?


Sanırım layerindex ve z-index, OpenLayers'da birbirleriyle değiştirilebilir terimlerdir. Dokümantasyonda aynı bağlamda kullanılırlar, örneğin: dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
Casey

Merhaba @Casey Örneği takdir ediyorum. Ancak, layerindex ve z-index'in birbirinin yerine geçebileceğini sanmıyorum. Kendi tecrübelerime göre setZindex çalışmıyor ama setIndex çalışıyor. Aşağıdakileri farkettim: 1. Açık katmandaki Z-index örneği, vektör katmanındaki bir özellik için çalışıyor ve rendererOptions: {zIndexing: true} tarafından etkinleştirildi. 2. Raster görüntü katmanı için örneğinizden, katman oluşturma sırasının harita kontrolünde gördüklerinize dayanarak, katman indeksine (cevap kodunuz olarak) bağlı olduğunu görebilirsiniz. 3. Katman indeksi, yeni katmana eklediğim sıraya göre ayarlanır (temel katman 0 ...)
Görülme

1. Haklı olduğunuzu düşünüyorum. 2 & 3. Doğru, ancak bir katmanın z dizinini ayarlayan setLayerIndex yöntemini çağırarak varsayılan davranışı geçersiz kılabilirsiniz. Bu, harita kontrolündeki katmanların sırasını ve katmanların çizim sırasını etkileyecektir.
Casey,

Yanıtlar:


24

Her katman için z dizininin ayarlanması yardımcı olacaktır: http://www.openlayers.org/dev/examples/ordering.html

REDAKTE

Aslen bağlantılı olduğum örnek pek yardımcı değil. Katmanlar içindeki yapıcıları değil, katmanların katman indeksini / z-indeksini ayarlamak istiyorsunuz (sipariş örneği gösterildiği gibi). Özel katman indeksleme gösteren bir örnek (bu örneğe dayanarak) bir araya getirdim . Canada Raster'ı açtığınızda, Marker katmanının en üstte kaldığına dikkat edin.

İşte ilgili kod:

map.setLayerIndex(dm_wms, 0); //set the image overlay to the bottom
map.setLayerIndex(markers, 99); //set the marker layer to an arbitrarily high layer index

SetLayerIndex kodu için belgeler burada: http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex


örnek bir kötü amaçlı yazılıma bağlantı verir.
Bazinga777

8

Bunu yapabilirsiniz, vektör katmanınızı her zaman basit kodla doldurmak istiyorsanız ...

var vecLyr = map.getLayersByName('VectorLayer')[0];
map.raiseLayer(vecLyr, map.layers.length);

Kolay olabilir!


4

yukarıdakilerin hiçbiri benim için işe yaramadı, ancak basitçe bunu yeni bir katman eklediğimde yapmak, marker katmanımı üstte tutmak için bir işe yaradı:

myMarkerLayer.setZIndex (1001);


Bu benim için de işe yarayan tek cevaptı. Diğerlerinin hiçbiri işe yaramadı.
Matthew Lock

3

Mevcut olanların üzerine yeni bir sayfa yerleştirerek haritaya bir katman eklemeyi düşünebilirsiniz. Yeni sayfa saydam değilse aşağıdakileri gizleyecektir.

Maalesef OpenLayers bir insertLayerAt yöntemine sahip değildir , bu yüzden katmanlarınızı yerleştirmeden sonra yeniden sıralamanız gerekir. Çözüm, daha sonra katmanı eklemek ve sonra istiften istenen derinliğe kadar aşağı kaydırmak veya üstünden en üste istediğiniz sayfayı taşımaktır.

Bunu aşağıdaki gibi yapabilirsiniz:

// add your wms as usual
var yourWMSLayer = new ....
map.addLayer(yourWMSlayer);

// you can do it both ways:
// 1. now move the markers to the top of the stack
var yourMarkers = map.getLayersByName("the marker layer name")[0];
map.setLayerIndex(yourMarkers, map.layers.length-1);

// 2. OR you move the WMS down
// this is more succint
map.setLayerIndex(yourWMSLayer, map.layers.length-2);
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.