Aquí está el copy-paste de una de mis antiguas aplicaciones. EDIT: He modificado getCustomLength, por lo que debería funcionar con diferentes sistemas de coordenadas. Fiddle: http://jsfiddle.net/A78Zu/
measureControl = new OpenLayers.Control.Measure(
OpenLayers.Handler.Path,
{
immediate: true,
persist: true
}
);
measureControl.getCustomLength = function(evt, onlySum) {
var idx = evt.geometry.components.length;
if (idx < 2)
return '';
var geom = new OpenLayers.Geometry.LineString([
evt.geometry.components[idx - 2],
evt.geometry.components[idx - 1]
]);
var lastLengthArr = this.getBestLength(geom);
var str = '';
if (idx > 2 || onlySum)
str += 'Total: ' + (evt.units === 'km' ? evt.measure.toFixed(3) : evt.measure.toFixed(1)) + ' ' + evt.units + ' ';
if (!onlySum)
str += 'Last segment: ' + (lastLengthArr[1] === 'km' ? lastLengthArr[0].toFixed(3) : lastLengthArr[0].toFixed(1)) + ' ' + lastLengthArr[1];
return str;
}
map.addControl(measureControl);
// Update content in .foo div
measureControl.events.on({
'measure': function(evt) {
$('.foo').html(measureControl.getCustomLength(evt, true));
},
'measurepartial': function(evt) {
$('.foo').html(measureControl.getCustomLength(evt, false));
}
});