Як визначити порядок шарів у Openlayers?


28

У мене є маркерний шар, два векторних шари та два растрові шари. Маркерний шар покривається двома растровими шарами.

Чи є спосіб перемістити шар маркера завжди зверху?

Відредаговано: Порядок Z-індексів добре працює у векторному шарі, але коли я додаю ще один растровий шар WMS на карті з нижчим Z-індексом, растровий шар все ще покриває векторний шар.

Відредаговано: Чи може хтось вказати на різницю порядку відтворення в термінах "LayerIndex" та "Z-Index" шару? Я думаю, що індекс шару відповідає порядку накладення, а Zindex займається порядком функцій у векторному шарі, я прав?


Я думаю, що layerindex і z-індекс є взаємозамінними термінами у OpenLayers. Вони використовуються в тому ж контексті в документації, наприклад: dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…
Casey

Привіт @Casey Я ціную твій приклад. Однак я не думаю, що шар-індекс та z-індекс взаємозамінні. На мій власний досвід setZindex не працює, але setIndex працює. Я зауважую, що: 1. Приклад Z-індексу в openlayer працює для функції в векторному шарі, і це вмикається за допомогою rendererOptions: {zIndexing: true}. 2.З вашого прикладу для шару зображення растрового зображення ви можете бачити порядок відображення шару, що базується на тому, що ви бачите на контролі карти, що залежить від індексу шару (як вашого коду відповіді). 3. Індекс шару встановлюється в порядку, який я додаю на новий шар (на основі шару як 0 ...)
відвідано

1. Я думаю, ти маєш рацію. 2 і 3. Правильно, але ви можете змінити поведінку за замовчуванням, викликавши метод setLayerIndex, який коригує z-індекс шару. Це вплине на порядок шарів у контролі карти та порядок малювання шарів.
Кейсі

Відповіді:


24

Встановлення z-індексу для кожного шару повинно допомогти: http://www.openlayers.org/dev/examples/ordering.html

ВИДАЛЕНО

Приклад, до якого я спочатку посилався, не надто корисний. Ви хочете встановити layerindex / z-індекс шарів, а не виробники всередині шарів (як показав приклад впорядкування). Я зібрав приклад (заснований на цьому прикладі ), який показує індексацію користувацького рівня. Зауважте, що коли ви вмикаєте програму Canada Raster, шар Marker залишається зверху.

Ось відповідний код:

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 знаходиться тут: http://dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex


приклад посилань на шкідливе програмне забезпечення.
Bazinga777

8

Ви можете це зробити, якщо ви хочете, щоб ваш векторний шар завжди перекривався просто кодом ...

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

Нехай це буде легко!


4

ніщо з вищезгаданого не працювало для мене, але просто роблячи це кожен раз, коли я додавав новий шар, працювало частування, щоб тримати шар маркера зверху:

myMarkerLayer.setZIndex (1001);


Це була єдина відповідь, яка працювала і для мене. Ніхто з інших не працював.
Метью Лок

3

Ви можете подумати про додавання шару до карти, як укладання нового аркуша поверх існуючих. Якщо новий аркуш не прозорий, він приховає всі нижче.

На жаль, у OpenLayers немає методу insertLayerAt , тому вам доведеться переупорядкувати шари після вставки. Вирішення полягає в тому, щоб додати шар, а потім перемістити його вниз по стеку на потрібну глибину або перемістити той, який ви хочете, зверху назад до верху.

Це можна зробити так:

// 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.