在OpenLayers中,让1层保持在另一层之上。 (Z轴)

时间:2011-08-04 12:18:29

标签: javascript html openlayers

我有这张地图,我在其上显示了一些红色标记,每当从列表中选择一个位置时,当前标记就会被绘制为蓝色,并且地图以它为中心

我通过2层来实现这一目标 - 一个用于在开始时绘制的红色标记,另一个用于从列表中选择一个点时重绘。 enter image description here

我想定义红色标记图层始终显示在蓝色标记图层上方。有效隐藏“当前标记”指示。 (原因很复杂)

This link是一个以我不想要的方式工作的页面。蓝色层位于红色层的顶部。 我试图通过为向量和graphicZIndex函数定义layers.addFeature属性来反转顺序。

我显然做错了什么,也许有人可以指出我是什么。 我定义z轴的方式:

        currentPointLayer = new OpenLayers.Layer.Vector("Selected Point Layer", {
            style : {
                externalGraphic : 'marker-blue.png',
                graphicHeight : 15,
                graphicWidth : 15,
                graphicZIndex : 1
            },
            rendererOptions: { zIndexing: true }
        });

再次,我想隐藏红色标记图层后面的蓝色标记。

3 个答案:

答案 0 :(得分:2)

您可以按照ilia所说的方式更改图层的顺序。

或者,如果要使用zIndexing,则必须将所有要素放入一层,因为zIndexing仅在单个图层中完成。

查看this simple example关于样式的内容,它也使用zIndexing。它随机在地图中创建一些点。如果你缩小,两个圆圈重叠的可能性很大,如果你翻过一个圆圈,它将被突出显示并放在顶部。

答案 1 :(得分:2)

因此,只要选择了一个点,您想要突出显示不同颜色的标记吗?用2层管理它实在是太过分了。您应该能够使用如下样式定义矢量图层:

var currentPointLayer = new OpenLayers.Layer.Vector("Selected Point Layer", {
    styleMap: new OpenLayers.StyleMap({
        externalGraphic : '${markerUrl}',
        pointRadius: 20
})});
map.addLayer(currentPointLayer);

然后你必须将每个特征(即feature.attributes.markerUrl)的属性'markerUrl'设置为'marker-red.png' - 这将是所有特征的初始状态。

然后,只要选择了要素,就可以将所选要素的markerUrl属性更改为'marker-blue.png'和(重要)调用

  

currentPointLayer.redraw();

显然,当选择新功能时,您还必须将之前选择的功能设置为'marker-red.png'。

答案 2 :(得分:1)

在您的init_map()功能中,您将在蓝色标记图层之前添加红色标记图层。尝试切换它们。

preparePointsOnMap(map, points); //red marker

if (!map.getCenter()) {
    map_set_center(lon, lat, mZoom); //blue marker
}