При переходе на OpenLayers 2.11 возникла небольшая проблема с отображением длины каждого сегмента на измерительной линии.
Ранее после размещения точек A -> B, B -> C. Длинаотрезок от А до В будет отображаться между этими точками, также с 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
});
}
}
2011-11-28
После небольшого исследования я пришел к выводу, что в OpenLayers 2.11 частичное управление мерой активируется, как только нажимается кнопка.Ранее в OpenLayers 2.10 частичное управление мерой было активировано, когда карта щелкалась и заканчивалась одновременно с окончанием пути, поэтому раньше он работал потому, что массив textnodes будет пустым только в начале новой строки, нов 2.11 частичное управление мерой не деактивируется один раз в конце пути, поэтому фактически возвращается к пустому массиву и стирает элементы слоя, когда я заканчиваю линию.
Источник: http://trac.osgeo.org/openlayers/ticket/3315
Может ли кто-нибудь подробнее рассказать об этом?