6 votos

Herramienta de medición OpenLayers: medición instantánea

Necesito utilizar la herramienta de medida para medir distancias ( medición instantánea ) en mi aplicación. Se puede encontrar un ejemplo de medición instantánea aquí . Pero el problema principal es que cuando uso la herramienta de medición instantánea e intento medir la distancia, suma todas las piezas y muestra la suma. Así que la pregunta: ¿cómo puedo mostrar instantáneamente sólo la distancia de la pieza actual (me refiero a no sumar todas las distancias de las piezas)?

5voto

Daniel Hilgarth Puntos 118

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 + '&nbsp;&nbsp;&nbsp;';

    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));
    }
});

1 votos

¿Tienes el mismo método para los polígonos? Este sólo funciona para líneas.

0 votos

Problema resuelto.

0 votos

¡Santo cielo, eres un gurú! Resuelve mi problema también. Por cierto, 900913 significa "google".

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X