IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Calculer distance entre deux villes


Sujet :

APIs Google

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut Calculer distance entre deux villes
    Bonjour,

    Je voudrais bien calculer la distance qui existe entre deux villes.

    Le script que j'ai mis en place marche lors de la première exécution mais lorsque je veux changer la ville de départ ou de destination le script affiche la valeur NaN et parfois il m'affiche une valeur non significatif à l'ordre de 5438...

    Ma page Html est la suivante :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <head>
    	<title>	Calculer trajet </title>
    	<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    	<meta charset="utf-8">
    	<link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500">
    	<!-- Appel des fonctions javascript -->
    	<script type="text/javascript" src="js/calcul.js"></script>
    	<script src="https://maps.googleapis.com/maps/api/js?key=ma cle à moi &libraries=places&callback=initAutocomplete"
            async defer></script>
    </head>
    <body>
    	<div style="margin-top:20%">
            	<input id="autocomplete" placeholder="Enter your address" style="width:99%" name="autocomplete"   type="text"></input>
    		 </br></br></br>
    		<input id="autocompletedestination" placeholder="Entrer l'adresse de destination" style="width:99%" name="autocompletedestination"  type="text"></input>
    		 <br/><br/>
    		<button onclick="calculer()">Calculer</button>
    	</div>
    </body>

    Mon fichier js est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    //Déclarer deux variables autocomplete pour l'origine et la destination
    var autocomplete, autocompletedestination;
     
    function initAutocomplete() {
     
    	autocomplete = new google.maps.places.Autocomplete(   
    		(document.getElementById('autocomplete')),
    		{types: ['geocode']});
     
    	autocompletedestination = new google.maps.places.Autocomplete(   
    		(document.getElementById('autocompletedestination')),
    		{types: ['geocode']});
     
    }
     
    //Foncton pour convertir le degré en radian.Cette fonction va servir pour le calcul de la distance
    function deg2rad(deg) {
      return deg * (Math.PI/180)
    }
     
    //Fonction pour calculer la distance en KM entre deux villes
    function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
     
      var R = 6371; // Radius of the earth in km
      var dLat = deg2rad(lat2-lat1);  // deg2rad below
      var dLon = deg2rad(lon2-lon1); 
      var a = 
        Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
        Math.sin(dLon/2) * Math.sin(dLon/2)
        ; 
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
      var d = R * c; // Distance in km
      return d;
    }
     
    function calculer() {    
     
    	var latitudeorigin=0;
    	var longitudeorigin=0;
    	var latitudedestination=0;
    	var longitudedestination=0;
     
     
    			//recupérer les informations de la position d'origine
                var geocoder = new google.maps.Geocoder();
                var address = document.getElementById("autocomplete").value;
                geocoder.geocode({ 'address': address }, function (results, status) {
                    if (status == google.maps.GeocoderStatus.OK) {
     
                         latitude = results[0].geometry.location.lat();
                         longitude = results[0].geometry.location.lng();
     
    					 latitudeorigin = latitude;
    					 longitudeorigin = longitude;
    					// alert(latitudeorigin);
    					 //alert(longitudeorigin);
     
                    } else {
                        alert("Veuillez vérifier l'origine");
                    }
                });
     
     
    			//recupérer les informations de la destination et calculer le trajet à la fin
    			var geocoderdestination = new google.maps.Geocoder();
                var addressdestination = document.getElementById("autocompletedestination").value;
                geocoderdestination.geocode({ 'address': addressdestination }, function (resultsdestination, statusdestination) {
                    if (statusdestination == google.maps.GeocoderStatus.OK) {
     
     
                         latitudee = resultsdestination[0].geometry.location.lat();
                         longitudee = resultsdestination[0].geometry.location.lng();
     
    					 latitudedestination = latitudee;
    					 longitudedestination = longitudee;
     
    					 var x = getDistanceFromLatLonInKm(latitudeorigin,longitudeorigin,latitudedestination,longitudedestination);
     
    					 //Prendre trois chiffres après la virgule
    					 var conversion = x.toFixed(3);
     
    					 window.alert("la distance en km est " + conversion);
    					 x = 0;
     
                    } else {
                        alert("Veuillez vérifier la destination");
                    }
                });	
    };
    Est-ce-qu'il y a un problème avec la déclaration des variables ? est-ce-qu'il faut déclarer les variable en float ?

    Est-ce-qu'il manque une déclaration d'une librairie dans le head ?

    Merci.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 089
    Points : 44 660
    Points
    44 660
    Par défaut
    Bonjour,
    Attention les fonctions sont des fonctions asynchrones en callBack donc rien ne te garantie que lorsque tu fais ton calcul les 2 résultats soient de retour et disponibles.

Discussions similaires

  1. Calcul de distance entre deux villes avec villes étapes
    Par terrycalme dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/01/2016, 14h11
  2. Distance entre deux villes
    Par mister3957 dans le forum Services
    Réponses: 3
    Dernier message: 13/09/2007, 10h05
  3. distance entre deux ville à partir de longitude/latitude
    Par sami_c dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 09/02/2007, 20h57
  4. calcul distance entre deux villes
    Par alexfrei04 dans le forum Access
    Réponses: 2
    Dernier message: 08/01/2007, 21h49
  5. calcul délais entre deux dates avec plages horaires
    Par leila eco dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 03/01/2007, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo