Problème calcul distance Google map API

Fermé
Signaler
-
 Tim -
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.


3 réponses

Messages postés
15
Date d'inscription
lundi 30 avril 2012
Statut
Membre
Dernière intervention
1 mai 2012

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
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
205
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
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
205
dans cette exemple seule la destination change ..
Ca fait un peut pigeon voyageur mais bon ...
A toi de l adapter...
0
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
205
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
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019
205
    <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
>
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019

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
>
Messages postés
2295
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
22 juillet 2019

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