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

Javascript 在OpenLayers中,使一层保持在另一层之上。(Z轴),javascript,html,openlayers,Javascript,Html,Openlayers,我有这张地图,我在上面显示了一些红色标记,每当从列表中选择一个位置时,当前标记被涂成蓝色,地图围绕着它 我通过有两层来实现这一点——一层用于开始时绘制的红色标记,另一层用于每当从列表中选择一个点时重新绘制。 我想定义红色标记层将始终出现在蓝色标记层之上。有效隐藏“当前标记”指示。(原因很复杂) 是一个我不想要的页面。蓝色层在红色层的顶部。 我试图通过为向量和layers.addFeature函数定义graphicZIndex属性来颠倒顺序 我显然做错了什么,也许有人能告诉我这是什么。 我定义z

我有这张地图,我在上面显示了一些红色标记,每当从列表中选择一个位置时,当前标记被涂成蓝色,地图围绕着它

我通过有两层来实现这一点——一层用于开始时绘制的红色标记,另一层用于每当从列表中选择一个点时重新绘制。

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

是一个我不想要的页面。蓝色层在红色层的顶部。 我试图通过为向量和
layers.addFeature
函数定义
graphicZIndex
属性来颠倒顺序

我显然做错了什么,也许有人能告诉我这是什么。 我定义z轴的方式:

        currentPointLayer = new OpenLayers.Layer.Vector("Selected Point Layer", {
            style : {
                externalGraphic : 'marker-blue.png',
                graphicHeight : 15,
                graphicWidth : 15,
                graphicZIndex : 1
            },
            rendererOptions: { zIndexing: true }
        });
再次,我想将蓝色标记隐藏在红色标记层后面。

init_map()
函数中,将红色标记层添加到蓝色标记层之前。试着换一下

preparePointsOnMap(map, points); //red marker

if (!map.getCenter()) {
    map_set_center(lon, lat, mZoom); //blue marker
}
init_map()
函数中,您将在蓝色标记层之前添加红色标记层。试着换一下

preparePointsOnMap(map, points); //red marker

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

你可以改变你的层次顺序,如伊利亚·切利所说

或者,如果您想使用zIndexing,您必须将所有功能放在一个层中,因为zIndexing只在一个层中完成


看看样式,那也用zIndexing。它会在地图中随机创建一些点。如果你缩小,两个圆圈重叠的可能性很大,如果你在其中一个上面胡佛,它将突出显示并放在顶部。

你可以按照伊利亚·切利的说法改变图层的顺序

或者,如果您想使用zIndexing,您必须将所有功能放在一个层中,因为zIndexing只在一个层中完成


看看样式,那也用zIndexing。它会在地图中随机创建一些点。如果缩小,两个圆重叠的可能性很大,如果将其覆盖在一个圆上,它将高亮显示并放在顶部。

因此,每当选择一个点时,您希望高亮显示具有不同颜色的标记吗?用两层来管理它真是太过分了。您应该能够使用以下样式定义向量层:

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”

因此,您希望在选择点时使用不同的颜色高亮显示标记吗?用两层来管理它真是太过分了。您应该能够使用以下样式定义向量层:

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”

多谢各位。这特别取代了顺序,但我正在寻找一种解决方案,它不是基于图层的放置顺序,而是基于z轴(graphicZIndex)特性。如果不存在这样的解决方案,我会将您的答案标记为解决方案。谢谢。这特别取代了顺序,但我正在寻找一种解决方案,它不是基于图层的放置顺序,而是基于z轴(graphicZIndex)特性。如果不存在这样的解决方案,我会将您的答案标记为解决方案。Tnx!我选择实施您的解决方案。因为它没有明确回答这个问题,所以我无法将其标记为解决方案(但我添加了:-)),如果我使用一个包含所有标记的功能,或者我必须为地图上的每个标记创建一个功能,这是否适用?如果我有一个特征,我如何为每个标记应用样式?除非我在向量中使用多点。。。没关系,我将代码更改为使用每个功能点。。(tnx)tnx!我选择实施您的解决方案。因为它没有明确回答这个问题,所以我无法将其标记为解决方案(但我添加了:-)),如果我使用一个包含所有标记的功能,或者我必须为地图上的每个标记创建一个功能,这是否适用?如果我有一个特征,我如何为每个标记应用样式?除非我在向量中使用多点。。。没关系,我将代码更改为使用每个功能点。。(tnx)