Javascript OpenLayers 2.11的测量段长度固定

Javascript OpenLayers 2.11的测量段长度固定,javascript,openlayers,Javascript,Openlayers,当更改为OpenLayers 2.11并在测量线上显示每个线段的长度时,遇到了一个小问题 之前,在放置点A-->B、B-->C之后。线段A到B的长度将显示在这些点之间,同样,对于B到C,在结束该行之后,将显示总计 我的脚本在OpenLayers 2.10中运行良好,但在更改为OpenLayers 2.11后,只要我结束这一行,向量层中的线段值就会消失 我理解这个问题,但我在逻辑上有困难 以下是我正在使用的脚本: line: new OpenLayers.Control.Measure(O

当更改为OpenLayers 2.11并在测量线上显示每个线段的长度时,遇到了一个小问题

之前,在放置点A-->B、B-->C之后。线段A到B的长度将显示在这些点之间,同样,对于B到C,在结束该行之后,将显示总计

我的脚本在OpenLayers 2.10中运行良好,但在更改为OpenLayers 2.11后,只要我结束这一行,向量层中的线段值就会消失

我理解这个问题,但我在逻辑上有困难

以下是我正在使用的脚本:

    line: new OpenLayers.Control.Measure(OpenLayers.Handler.Path, {
    persist: true,
    handlerOptions: {
        layerOptions: {
            renderers: renderer,
            styleMap: styleMap
        }
    },
    textNodes: null,
    callbacks:{
        create:
        function(){
            this.textNodes = [];
            vlayer.destroyFeatures(vlayer.features); /*-- figured this area is the problem */
            mouseMovements = 0;
        },
        modify:
        function(point, line){
            if(mouseMovements++ < 5){
                return;
            }
            var len = line.geometry.components.length;
            var from = line.geometry.components[len -2];
            var to = line.geometry.components[len -1];
            var ls = new OpenLayers.Geometry.LineString([from, to]);
            var dist = this.getBestLength(ls);
            if(!dist[0]){
                return;
            }
            var total = this.getBestLength(line.geometry);
            var label = dist[0].toFixed(3) + " " + dist[1];
            var textNode = this.textNodes[len -2] || null;
            if(textNode && !textNode.layer){
                this.textNodes.pop();
                textNode = null;
            }
            if(!textNode){
                var c = ls.getCentroid();
                textNode = new OpenLayers.Feature.Vector(
                new OpenLayers.Geometry.Point(c.x, c.y), {}, {
                    label: "",
                    fontColor: "#800517",
                    fontSize: "12px",
                    fontFamily: "Tahoma",
                    fontWeight: "bold",
                    labelAlign: "cm"
                });
                this.textNodes.push(textNode);
                vlayer.addFeatures([textNode]);
            }
            textNode.geometry.x = (from.x + to.x) / 2;
            textNode.geometry.y = (from.y + to.y) / 2;
            textNode.style.label = label;
            textNode.layer.drawFeature(textNode);
            this.events.triggerEvent("measuredynamic", {
                measure: dist[0],
                total: total[0],
                units: dist[1],
                order: 1,
                geometry: ls
            });
        }
    }
line:newopenlayers.Control.Measure(OpenLayers.Handler.Path{
坚持:对,,
handlerOptions:{
分层:{
渲染器:渲染器,
styleMap:styleMap
}
},
textNodes:null,
回调:{
创建:
函数(){
this.textNodes=[];
vlayer.destroyFeatures(vlayer.features);/*--我认为这是问题所在*/
鼠标移动=0;
},
修改:
功能(点、线){
如果(鼠标移动+++<5){
返回;
}
var len=line.geometry.components.length;
var from=line.geometry.components[len-2];
var to=线.几何体.组件[len-1];
var ls=new OpenLayers.Geometry.LineString([from,to]);
var dist=此.getBestLength(ls);
如果(!dist[0]){
返回;
}
var total=此.getBestLength(line.geometry);
var label=dist[0]。toFixed(3)+“”+dist[1];
var textNode=this.textNodes[len-2]| | null;
if(textNode&!textNode.layer){
this.textNodes.pop();
textNode=null;
}
如果(!textNode){
var c=ls.getCentroid();
textNode=new OpenLayers.Feature.Vector(
新OpenLayers.Geometry.Point(c.x,c.y),{}{
标签:“,
fontColor:#800517“,
字体大小:“12px”,
丰特家族:“塔荷马”,
fontWeight:“粗体”,
labelAlign:“cm”
});
this.textNodes.push(textNode);
addFeatures([textNode]);
}
textNode.geometry.x=(从.x+到.x)/2;
textNode.geometry.y=(从.y+到.y)/2;
textNode.style.label=标签;
textNode.layer.drawFeature(textNode);
this.events.triggerEvent(“MeasuredDynamic”{
度量值:dist[0],
总计:总计[0],
单位:dist[1],,
订单:1,
几何图形:ls
});
}
}
2011年11月28日

经过一点研究,我得出结论,在OpenLayers 2.11中,只要点击按钮,测量部分控件就会被激活。之前在OpenLayers 2.10中,测量部分控件是在地图被点击并在路径结束的同时结束时被激活的,所以它以前起作用的原因是文本Nodes阵列仅在新行开始时为空,但在2.11中,测量部分控制不会在路径结束时停用一次,因此实际上会恢复为空阵列,并在我结束行时擦除图层特征

资料来源:


有人能详细说明一下吗?

以防有人想知道答案