gpt4 book ai didi

javascript - 强制 OpenLayers Markers 图层在顶部绘制,并在下方选择图层

转载 作者:可可西里 更新时间:2023-11-01 02:08:44 24 4
gpt4 key购买 nike

我有一个 OpenLayers map ,其中依次包含栅格基础层、矢量图层和标记层。它们显示良好,顺序正确,标记位于矢量顶部,非常棒。

但是当我添加一个 SelectFeature 控件并将其指向矢量图层时,它突然被绘制在标记层上方,尽管所有努力都提高了标记层或设置了 Z 索引。 SelectFeature 控件似乎覆盖了所有绘图顺序设置。这是设计使然,还是我可以通过某种方式克服它?

图层定义:

var baselayer = new OpenLayers.Layer.WMS('Norden', 
'http://{myarcgisserver}/ArcGIS/services/mylayer/MapServer/WMSServer', {
layers :'1,2',
transparent :false,
width :'auto',
height :'auto',
filter :null
}, {
isBaseLayer: true,
singleTile :true,
ratio :1,
alpha :false,
transitionEffect :'resize'
});

var vectorLayer = new OpenLayers.Layer.Vector("Work orders", {
projection: new OpenLayers.Projection("EPSG:2400"),
strategies: [new OpenLayers.Strategy.Fixed(), refresh],
protocol: new OpenLayers.Protocol.HTTP({
url: "/WorkOrder/WorkOrders.ashx?output=geojson",
format: new OpenLayers.Format.GeoJSON()
})
});

var markerlayer = new OpenLayers.Layer.Markers("Markers", {
projection: new OpenLayers.Projection("EPSG:2400"),
displayInLayerSwitcher: false
}
);

控件定义:

var selectctrl = new OpenLayers.Control.SelectFeature(
vectorLayer,
{
clickout: true,
toggle: false,
multiple: false,
hover: false,
toggleKey: "ctrlKey", // ctrl key removes from selection
multipleKey: "shiftKey", // shift key adds to selection
box: false
}
);

激活:(没有这个,层按正确的顺序绘制)

map.addControl(selectctrl);

selectctrl.activate();

编辑:在 OpenLayers.Handler.Feature 中发现了这个,其中“moveLayerToTop”感觉像是罪魁祸首......将尝试克服它,但如果有人知道这是不可能的,请告诉我!

/**
* Method: activate
* Turn on the handler. Returns false if the handler was already active.
*
* Returns:
* {Boolean}
*/
activate: function() {
var activated = false;
if(OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
this.moveLayerToTop();
this.map.events.on({
"removelayer": this.handleMapEvents,
"changelayer": this.handleMapEvents,
scope: this
});
activated = true;
}
return activated;
},

最佳答案

答案 - 如果可以调用它就在我上面提到的激活函数中。我试图覆盖它并删除了对 moveLayerToTop 的调用,它就像一个魅力。

编辑:我最终将这段代码添加到 OL 代码库之外的一个 js 文件中,覆盖了处理程序激活函数。这是因为我会在更新 OpenLayers 代码库时丢失更改。

OpenLayers.Handler.Feature.prototype.activate = function() {
var activated = false;
if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
//this.moveLayerToTop();
this.map.events.on({
"removelayer": this.handleMapEvents,
"changelayer": this.handleMapEvents,
scope: this
});
activated = true;
}
return activated;
};

关于javascript - 强制 OpenLayers Markers 图层在顶部绘制,并在下方选择图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4728852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com