1

Je suis débutant dans Maps API, j'essaie d'obtenir la distance (en Km) de 2 adresse. Quel est le problème avec ce code?Comment utiliser computeDistanceBetween() correctement?

var mygc = new google.maps.Geocoder(); 

var locationOrigem; 
var locationDestino; 

var latOrigem = 0; 
var longOrigem = 0; 

var latDestino = 0; 
var longDestino = 0; 


mygc.geocode({'address' : 'Presidente Vargas 897, Centro RJ'}, function(results, status){ 

    locationOrigem = results[0].geometry.location; 
    latOrigem = results[0].geometry.location.lat(); 
    longOrigem = results[0].geometry.location.lng(); 

}); 

mygc.geocode({'address' : 'Abelardo Bueno 3000, Barra da Tijuca RJ'}, function(results, status){ 

    locationDestino = results[0].geometry.location; 
    latDestino = results[0].geometry.location.lat(); 
    longDestino = results[0].geometry.location.lng(); 

}); 

alert(google.maps.geometry.spherical.computeDistanceBetween(locationOrigem, locationDestino)); 

Par une raison inconnue, var locationOrigem et locationDestino sont "non défini" en dehors des fonctions anonymes ??? Pourquoi???

+0

Voir ma mise à jour. Est-ce que cela fonctionne pour vous maintenant? –

Répondre

5

Avez-vous inclus ce script?

<script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=geometry&sensor=false&language=en"></script> 

Que se passe-t-il lorsque vous exécutez votre code? Êtes-vous sûr que vos adresses ont été géocodées correctement? Êtes-vous sûr que ce problème est dans computeDistanceBetween. Essayez de vider toutes les variables.

UPDATE:

Demandes au Géocodeur sont exécutées de façon asynchrone. Ainsi, les demandes de calcul de distance ont été exécutées avant que vous ayez des données géocodées. C'est pourquoi vos variables étaient undefined. Vous devez utiliser des rappels pour vous assurer que la requête est terminée. Essayez ce code

var mygc = new google.maps.Geocoder(); 
var locationOrigem; 
var locationDestino; 
var latOrigem = 0; 
var longOrigem = 0; 
var latDestino = 0; 
var longDestino = 0; 

mygc.geocode({'address' : 'Presidente Vargas 897, Centro RJ'}, function(results, status){ 
    locationOrigem = results[0].geometry.location; 
    latOrigem = results[0].geometry.location.lat(); 
    longOrigem = results[0].geometry.location.lng(); 
    mygc.geocode({'address' : 'Abelardo Bueno 3000, Barra da Tijuca RJ'}, function(results, status){ 
     locationDestino = results[0].geometry.location; 
     latDestino = results[0].geometry.location.lat(); 
     longDestino = results[0].geometry.location.lng(); 
     console.log(locationOrigem); 
     console.log(locationDestino); 
     console.log(google.maps.geometry.spherical.computeDistanceBetween(locationOrigem, locationDestino)); 
    }); 
}); 

Aussi vous devez vérifier l'état de la réponse. Je n'ai pas inclus parce que ce n'est pas le sujet.

+0

oui j'ai! Mais je reçois cette erreur (firebug): Erro: a est indéfini Arquivo-fonte: http://maps.gstatic.com/cat_js/intl/pt_br/mapfiles/api-3/5/11/%7Bmain,geometry% 7D.js Linha: 42 – celsowm