Problème calcul distance Google map API

Fermé
cammy16 - 28 avril 2012 à 18:42
 Tim - 1 avril 2015 à 14:44
Bonjour,

J'ai un soucis avec l'API de google Map. Je souhaite transformer deux adresses en coordonnées pour ensuite calculer la distance entre ses points.

Mon problème est lorsque j'essaye de récupérer le résultat de transformAdress avec un return dans la variable, il est undefined, alors que dans la fonction, il affiche le bon truc.

Est ce que c'est mon return qui ne va pas ? ou le type de la variable ? Mais je pensais qu'il n'y avait pas de type en javascript.


.
var pointA = transformAdress("Paris"); 
alert(pointA); // Retourne undefined

function transformAdress(address) {
	var coord;	
	geocoder.geocode( { 'address': address}, function(results, status) {
		 if (status == google.maps.GeocoderStatus.OK) {	
				coord1 = results[0].geometry.location;
				alert(coord); //affiche les coordonnées
				return coord;
		}
	});
}
		
function calculDistance(point1,point2) {
	var distanceKm = google.maps.geometry.spherical.computeDistanceBetween(point1, point2)/1000;
	 alert(distanceKm); 
}


J'ai fait beaucoup de recherches sans succès :(
Je vous remercie d'avance.


A voir également:

3 réponses

Apiarnaud Messages postés 15 Date d'inscription lundi 30 avril 2012 Statut Membre Dernière intervention 1 mai 2012
1 mai 2012 à 11:15
Bonjour,

attention, coord est un array, c'est dans ta fonction que ça coince.
Tu devrais debugguer avec alert() dans ta fonction transformAddress() c'est là dedans qu'il y a une erreur.

Bon courage
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
10 mai 2012 à 18:00
function get_figthPlan(dest) {
if (!geocoder) { geocoder = new google.maps.Geocoder(); }
geocoder.geocode( { 'address': dest}, function(results, status) {
/* Si l'adresse a pu être géolocalisée */
if (status == google.maps.GeocoderStatus.OK) {
/* Récupération de sa latitude et de sa longitude */
lati.push(results[0].geometry.location.lat()/180*Math.PI);
long.push(results[0].geometry.location.lng()/180*Math.PI);
flightPlanCoordinates.push(results[0].geometry.location);
// flightPlanCoordinates.push(new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng()));
var flightPath = new google.maps.Polyline({
path: flightPlanCoordinates,
strokeColor: "#BBACAC", //Touterelle
strokeOpacity: 1.0,
strokeWeight: 2
});
flightPath.setMap(maper);
if (lati.length==2){
var dla = (lati[1] - lati[0]) / 2;
var dlo = (long[1] - long[0]) / 2;
a = (Math.sin(dla) * Math.sin(dla)) + Math.cos(lati[0]) * Math.cos(lati[1]) * (Math.sin(dlo) * Math.sin(dlo));
d = 2 * Math.atan(Math.sqrt(a)/Math.sqrt(1 - a));
var earth_radius = 6378137; // Terre = sphère de 6378km de rayon
var distanceDiv = document.getElementById('distance');
distanceDiv.innerHTML += "Distance vol d oiseau:  "+ Math.round(earth_radius * d/10)/100+" km <br>";
} //fin de if
} //fin de if
});
}
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
10 mai 2012 à 18:02
dans cette exemple seule la destination change ..
Ca fait un peut pigeon voyageur mais bon ...
A toi de l adapter...
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
Modifié par Fallentree le 16/05/2012 à 14:39
Probleme de retrour de fonction ...
Lorsque la fonction transformAdress est appelée, il lui faut un certain temps pour renvoyer les coordonnées.

Il faut adapter ton code pour que le traitement se fasse...

C'est a dire calculer la distance lorsque deux points sont retournés ...
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 208
16 mai 2012 à 14:50
    <script type="text/javascript"
      src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=geometry"></script>

<script >

function transformAdress(address) {
        geocoder = new google.maps.Geocoder(); 
       geocoder.geocode( { 'address': address}, function(results, status) {
     if (status == google.maps.GeocoderStatus.OK) { 
        coord = results[0].geometry.location;
        coord1 = results[0].geometry.location.lng();    
        coord2 = results[0].geometry.location.lat();
        alert(coord1+","+coord2); //affiche les coordonnées
        point.push(coord);
        if (point.length==2) {calculDistance(point.pop(),point.pop());}
    }
  });
}
    
function calculDistance(point1,point2) {
        alert(point1.toString()+","+point2.toString());
  var distanceKm = google.maps.geometry.spherical.computeDistanceBetween(point1, point2);
   alert(distanceKm/1000);
}
var point = [];
 transformAdress("Paris");
 transformAdress("Londre");

</script>
0
Tim > Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019
1 avril 2015 à 09:02
This is what I was looking for,...to enter the names of the places or aerodroms and to calculate great circle distance from marker to marker,...THANK YOU !!!!
Tim
0
Tim > Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019
1 avril 2015 à 14:44
Great coding, as I said,..but how to move the name of the city from html box to:
transformAdress("Londre"); ??
And can you revise code to show how to calcukate gcd between more than 2 cities ,..3 / 4 ,..or n ?
Would be great to see it !
0