5 Stimmen

Rückgabewert von GEvent.addListener in Google Maps API?

Ich versuche einfach, die Entfernung von 2 Punkten auf einer Karte mithilfe der Google Maps API zu ermitteln. Mit GDirections. Das Problem ist, dass die Entfernung nach Beendigung der Funktion immer null ist. Ich weiß, dass dies daran liegt, dass das Ereignis "load" erst nach Beendigung der Funktion aufgerufen wird. Der Event Listener gibt auch keine Werte zurück, also bin ich ratlos!

Weiß jemand, wie ich diese Funktion dazu bringen kann, die Entfernung zurückzugeben? Vielleicht gibt es einen besseren Weg, um die Entfernung zwischen 2 Punkten in Google Maps API zu erhalten?

function getDistance(fromAddr, toAddr) {    
var distance;
var directions;

directions = new GDirections(null, null);
directions.load("from: " + fromAddr + " to: " + toAddr);

GEvent.addListener(directions, "load", function() {
    distance = directions.getDistance().html;
    distance = distance.replace(/&.*/, '');
});

return distance; //outputs null
}

3voto

RedBlueThing Punkte 40761

GDirektionen laden ist asynchron. Sie können die Ergebnisse Ihrer Ladeanforderung erst verwenden, wenn die laden Ereignis ausgelöst wird. Das bedeutet, dass Ihr getDistance Funktion richtet lediglich die GDirektionen laden Anfrage, kann er die Ergebnisse der Anfrage nicht synchron (sofort) abrufen. Die GDI-Korrekturen Objekt muss eine HTTP-Anfrage an Google stellen, damit es die Entfernung zwischen den beiden Punkten ermitteln kann.

Was Sie tun müssen, ist, Ihren Code, der den Abstand verwendet, in die Rückruf Funktion, die Sie an die Ladeanforderung übergeben haben:

GEvent.addListener(directions, "load", function() {
            // this is a callback function that is called after 
            // the getDistance function finishes.
            var distance = directions.getDistance().html;

            // Have a distance now, need to do something with it.
            doSomethingWithTheDistanceWeGotBack (distance);
    });

Hier ist ein Beispiel für die Verwendung GDirektionen laden (Es geht um die Fahrzeit, nicht um die Entfernung, aber das Prinzip ist dasselbe):

http://www.cannonade.net/geo.php?test=geo6

Sie können die Quelle hier finden:

http://www.cannonade.net/geo6.js

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X