2009-11-29 2 views
4

J'essaie simplement d'obtenir la distance de 2 points sur une carte en utilisant l'API Google Maps. Utilisation de GDirections Le problème est qu'après la fin de la fonction, la distance est toujours nulle. Je sais que c'est parce que l'événement "load" n'est appelé qu'après la fin de la fonction. L'écouteur d'événement ne renvoie pas non plus de valeurs, donc je suis perplexe!Renvoyez la valeur de GEvent.addListener dans l'API Google Maps?

Est-ce que quelqu'un sait comment je peux faire que cette fonction retourne la distance? Peut-être existe-t-il un meilleur moyen d'obtenir la distance entre 2 points dans l'API Google Maps?

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 
} 

Répondre

2

GDirections charge est asynchrone. Vous ne pourrez pas utiliser les résultats de votre demande de chargement tant que l'événement load ne sera pas déclenché. Cela signifie que votre getDistance fonction configure simplement la demande GDirections load, il ne sera pas en mesure d'obtenir les résultats de la demande de manière synchrone (immédiatement). L'objet GDIrections doit partir et envoyer une requête HTTP à Google pour qu'il puisse calculer la distance entre les deux points.

Ce que vous devez faire est de mettre votre code qui utilise la distance dans la fonction de rappel que vous avez passé à la demande de charge:

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

Voici un exemple d'utilisation GDirections charge (MONTEE la durée de conduite, pas la distance, mais le principe est le même):

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

Vous pouvez trouver la source h :

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