我有一个标记层,两个矢量层和两个栅格层。
标记层被两个栅格层覆盖。

是否有办法始终将标记层移动到顶部?

编辑:Z索引的顺序在矢量层中很好用,但是当我添加另一个WMS时Z索引较低的地图上的栅格图层,栅格图层仍覆盖矢量图层。

编辑:任何人都可以指出“ LayerIndex”和“ Z”方面的渲染顺序差异层的“索引​​”?我认为图层索引处理矢量图层中的叠加顺序,而Zindex处理矢量图层中的要素顺序,对吗?

评论

我认为layerindex和z-index是OpenLayers中的可互换术语。它们在文档的相同上下文中使用,例如:dev.openlayers.org/releases/OpenLayers-2.11/doc/apidocs/files/…

您好@Casey我感谢您的榜样。但是,我认为layerindex和z-index是不可互换的。以我自己的经验,setZindex不起作用,但是setIndex有效。我注意到:1. openlayer中的Z-index示例适用于矢量层中的功能,并且由rendererOptions:{zIndexing:true}启用。 2.从您的栅格图像图层示例中,您可以看到图层渲染顺序是基于您在地图控件上看到的,它取决于图层索引(作为您的答案代码)。 3.层索引由我在新层上添加的顺序设置(基于层为0 ...)

1.我认为你是对的。 2和3。对,但是您可以通过调用setLayerIndex方法来覆盖默认行为,该方法会调整图层的z-index。这将影响地图控件中图层的顺序和图层的绘制顺序。

#1 楼

为每个图层设置z-index应该会有所帮助:http://www.openlayers.org/dev/examples/ordering.html

EDITED

我最初链接的示例不太有用。您要设置图层的layerindex / z-index,而不是图层内的制造商(如订购示例所示)。我放了一个示例(基于该示例),显示了自定义图层索引。请注意,当您打开“加拿大栅格”时,“标记”层将保持在顶部。

以下是相关代码:

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/版本/OpenLayers-2.11/doc/apidocs/files/OpenLayers/Map-js.html#OpenLayers.Map.setLayerIndex

评论


该示例链接到恶意软件。

–Bazinga777
18年11月28日在9:29

#2 楼

如果您希望向量层始终以简单的代码位于顶部,就可以这样做...

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


这可能很简单!

#3 楼

上面的方法都不适合我,但是只要我添加一个新层就可以做到这一点,这可以使我的标记层保持在顶部:

myMarkerLayer.setZIndex(1001);

评论


这也是对我有用的唯一答案。其他都不起作用。

–马修·洛克(Matthew Lock)
18年1月24日在7:44

#4 楼

您可以考虑在地图上添加一层,就像在现有页面之上放置一张新图纸一样。如果新工作表不是透明的,则将隐藏所有下面的内容。

不幸的是,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);