Problème calcul distance Google map API
cammy16
-
Tim -
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.
.
J'ai fait beaucoup de recherches sans succès :(
Je vous remercie d'avance.
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:
- Google map distance
- Google maps satellite - Guide
- Google maps - Guide
- Dns google - Guide
- Google photo - Télécharger - Albums photo
- Créer un compte google - Guide
3 réponses
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
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
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
});
}
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
});
}
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 ...
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 ...
<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>