Javascript Openlayers 2。z轴并选择“控制”

Javascript Openlayers 2。z轴并选择“控制”,javascript,z-index,openlayers,Javascript,Z Index,Openlayers,我有两个向量层,一个是多边形,一个是直线。我们需要向附加到多边形的线层添加线(数据库过程需要多边形ID,这些ID存储在多边形的属性中) 因此,我在lineLayer上有一个drawFeature控件,在polygonLayer上有一个selectFeature(它在悬停时存储ID,而不仅仅是选择)。它实际上工作得很好,除了添加时linelayer的z轴较低,因此它显示在多边形下绘制的新线。宁愿让线显示在多边形上。我知道这是因为当selectFeature控件处于活动状态时,它将多边形层的z索引设

我有两个向量层,一个是多边形,一个是直线。我们需要向附加到多边形的线层添加线(数据库过程需要多边形ID,这些ID存储在多边形的属性中)

因此,我在lineLayer上有一个drawFeature控件,在polygonLayer上有一个selectFeature(它在悬停时存储ID,而不仅仅是选择)。它实际上工作得很好,除了添加时linelayer的z轴较低,因此它显示在多边形下绘制的新线。宁愿让线显示在多边形上。我知道这是因为当selectFeature控件处于活动状态时,它将多边形层的z索引设置为高于lineLayer。 我使用linelayer.setZIndex(800)或其他工具手动将linelayer的z索引设置为高于多边形层,这当然会使新线绘制在多边形上,但selectFeature事件不会触发。 我考虑过几种解决方案,包括将drawFeature添加到多边形层,然后在完成后将该功能移动到线条层,但它仍在多边形下渲染,我甚至在多边形层上的stylemap的“临时”样式上使用graphicZIndex。无效(我确实在多边形层上将渲染zindexing设置为true)

我可能从错误的角度来看待这个问题,所以我愿意接受建议。如果向量层上有一个函数,比如getFeatureByPosition(position),我可以获取SketchStart和SketchEnd事件上的位置并进行查询,但到目前为止我还找不到类似的函数


我现在不在我的开发箱里,以防有人想知道为什么没有代码。希望在工作中发布此消息,但基本网络在显示登录页时出现问题(我认为是由于ssl)

因此我的解决方案需要一些东西。首先,我需要从OL2.10升级到最新的2.13.1。这主要是因为需要在2.11(我想可能是2.12)中添加一个新事件。该事件是“featureover”,可以在地图级别捕获,因此将在所有层上触发,因此我不会使用选择的Z索引。我从多边形层中删除了选择控件,因为它不是必需的

var featureOverHandler = function(event){
    if (event.feature.layer.id == polygonLayer.id) {
        selectedPolygonId = event.feature.attributes.POLYGON_ID;
        console.log("Selected Polygon Id: " + selectedPolygonId);
        map.events.unregister('featureover',map,featureOverHandler);
        map.events.register('featureout',map,featureOutHandler);
    }
};
var featureOutHandler = function (event) {
    if (event.feature.layer.id == polygonLayer.id) {
        selectedPolygonId = 0;
        console.log("Cleared Selected Polygon ID ");
        map.events.unregister('featureout', map, featureOutHandler);
        map.events.register('featureover', map, featureOverHandler);
    }
};
这些将捕捉当前悬停在其上的多边形。然后我添加事件以捕捉行的开始和结束位置。由于从2.11开始,他们更改了“SketchStart”事件的工作方式,因此您不能再使用该事件来捕获添加第一个点时指针位于哪个多边形上。我在向量层上使用了点回调

var vDrawOptions = {
    callbacks: {
        "point": function (p) {
            if (p.parent.components.length == 2) {
                console.log("First Point added");
                startingPolygonId = selectedPolygonId;
            }
        }
    }
}
vectorAddControl = new OpenLayers.Control.DrawFeature(vectorLayer, OpenLayers.Handler.Path,vDrawOptions);
但是,“SketchComplete”仍然可以用于捕获终点(从而捕获多边形)

希望这将有助于其他人,在类似的情况下

function vSketchComplete(evt) {
    endingPolygonId = selectedPolygonId;
};
vectorLayer.events.register('sketchcomplete', vectorLayer, vSketchComplete);