Bagaimana cara mendefinisikan urutan lapisan dalam Openlayers?

28

Saya memiliki layer marker, dua layer vektor dan dua layer raster. Lapisan marker akan ditutupi oleh dua layer raster.

Apakah ada cara untuk memindahkan layer marker selalu di atas?

Diedit: Urutan indeks-Z bekerja dengan baik di lapisan vektor, tetapi ketika saya menambahkan lapisan raster WMS pada peta dengan indeks-Z yang lebih rendah, lapisan raster masih menutupi lapisan vektor.

Diedit: Adakah yang bisa menunjukkan perbedaan urutan render dalam hal "LayerIndex" dan "Z-Index" dari suatu Layer? Saya pikir indeks lapisan berurusan dengan urutan overlay dan penawaran Zindex dengan urutan fitur dalam layer vektor, apakah saya benar?

Terlihat
sumber
Saya pikir layerindex dan indeks-z adalah istilah yang dapat dipertukarkan dalam OpenLayers. Mereka digunakan dalam konteks yang sama dalam dokumentasi, mis: dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
Casey
Halo @Casey Saya menghargai contoh Anda. Namun, saya tidak berpikir layerindex dan indeks-z dapat dipertukarkan. Untuk pengalaman saya sendiri, setZindex tidak bekerja tetapi setIndex berfungsi. Saya perhatikan bahwa: 1. contoh Z-index dalam openlayer berfungsi untuk fitur dalam layer vektor, dan itu diaktifkan oleh rendererOptions: {zIndexing: true}. 2. Dari contoh Anda untuk layer gambar raster, Anda dapat melihat urutan layer render didasarkan pada apa yang Anda lihat pada kontrol peta, yang tergantung pada indeks layer (sebagai kode jawaban Anda). 3. Indeks layer diatur oleh urutan yang saya tambahkan pada layer baru (berdasarkan layer sebagai 0 ...)
Dilihat
1. Saya pikir Anda benar. 2 & 3. Benar, tetapi Anda bisa mengganti perilaku default dengan memanggil metode setLayerIndex, yang menyesuaikan indeks-z suatu layer. Ini akan mempengaruhi urutan lapisan dalam kontrol peta dan urutan gambar lapisan.
Casey

Jawaban:

24

Mengatur indeks-z untuk setiap lapisan akan membantu: http://www.openlayers.org/dev/examples/ordering.html

Diedit

Contoh yang saya tautkan awalnya tidak terlalu membantu. Anda ingin mengatur indexindex / z-indeks dari lapisan, bukan pembuat dalam lapisan (seperti contoh pemesanan menunjukkan). Saya mengumpulkan contoh (berdasarkan contoh ini ) yang menunjukkan pengindeksan lapisan kustom. Perhatikan bahwa ketika Anda mengaktifkan Canada Raster, layer Marker tetap di atas.

Berikut adalah kode yang relevan:

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

Dokumentasi untuk kode setLayerIndex ada di sini: http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex

Casey
sumber
contoh tautan ke malware.
Bazinga777
8

Anda dapat melakukannya, jika Anda ingin layer vektor Anda selalu teratas hanya dengan kode ...

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

Semoga itu mudah!

Aragon
sumber
4

tidak ada di atas yang berfungsi untuk saya, tetapi hanya melakukan ini setiap kali saya menambahkan lapisan baru berhasil memperlakukan untuk menjaga lapisan penanda saya di atas:

myMarkerLayer.setZIndex (1001);

ErichBSchulz
sumber
Ini adalah satu-satunya jawaban yang bekerja untuk saya juga. Tidak ada yang lain yang berfungsi.
Matthew Lock
3

Anda bisa memikirkan menambahkan layer ke peta sebagai meletakkan lembar baru di atas yang sudah ada. Jika lembar baru tidak transparan itu akan menyembunyikan semua yang di bawah.

Sayangnya OpenLayers tidak memiliki metode insertLayerAt , jadi Anda harus menyusun ulang layer Anda setelah dimasukkan. Solusinya kemudian menambahkan layer dan kemudian memindahkannya ke bawah tumpukan ke kedalaman yang diinginkan atau memindahkan yang Anda inginkan di atas kembali ke atas.

Anda dapat melakukannya sebagai berikut:

// 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);
unicoletti
sumber