Javascript OpenLayers 2.11的测量段长度固定
当更改为OpenLayers 2.11并在测量线上显示每个线段的长度时,遇到了一个小问题 之前,在放置点A-->B、B-->C之后。线段A到B的长度将显示在这些点之间,同样,对于B到C,在结束该行之后,将显示总计 我的脚本在OpenLayers 2.10中运行良好,但在更改为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
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中,测量部分控制不会在路径结束时停用一次,因此实际上会恢复为空阵列,并在我结束行时擦除图层特征
资料来源:
有人能详细说明一下吗?以防有人想知道答案