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 :

logique fonction asynchrone G.Maps [Google Maps]


Sujet :

APIs Google

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 9
    Points
    9
    Par défaut logique fonction asynchrone G.Maps
    Bonjour,
    je suis en train de développer un script de localisation de point d'intérêts les plus proches avec google maps.
    Pour le moment, je suis ok sur la géolocalisation, j'ai récupéré des coordonnées depuis une base de données, et la je bloque sur une étape :

    je veux faire une boucle sur tous mes points d'intérêts (500 pour l'instant) et calculer la distance en mètres entre notre position (géolocalisée) et la position du point.
    Je ne comprend pas tout à fait la logique des requêtes asynchrones de G.maps... Si quelqu'un pouvait m'éclairer un peu ...

    la partie du code en question :
    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
    // Comparaison des données GPS -> Calculs des distances
    			for(var j=0; j<NbPoints; j++){
    				var directionsService = new google.maps.DirectionsService();
    				var requeteItineraire = {
    					origin: MyLatLng,
    					destination: PointLatLng[j],
    					region: "fr",
    					travelMode: google.maps.DirectionsTravelMode.DRIVING
    				};
    				// Calculs des distances
    				directionsService.route(requeteItineraire, function(response, status) {
    					if (status == google.maps.DirectionsStatus.OK) {
    						 // récupération de la distance totale du trajet en mètres
    						 distance = response.routes[0].legs[0].distance.value;
    // si la distance est inférieure au rayon de recherche
    						 if(distance <= rayon){
    							PointDistance[j] = "1";
    							nb_Point_ok++;
    							alert("ok"+j);
    							// Ajout d'un marker
    							var truc = new google.maps.Marker({
    								position: PointLatLng[j], 
    								map: map,
    								title:"Point found at : "+distance+"m !"
    							}); 
    						 }
    						 else{
    							PointDistance[j] = "0";
    						 }
    					}
    				 });	
    			}
    (avec ce code je vois bien que la boucle se déroule avant la fonction route.
    le alert s'éxécute 12 fois et me donne ok500 à chaque fois...)
    Je pense qu'il me faut ajouter une fonction callback, mais je ne vois pas comment modifier la structure de ma boucle...

    Quelqu'un peut me conseiller ?

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 9
    Points
    9
    Par défaut
    Problème résolu !
    reste un peu d'optimisation, mais c'est bon j'ai trouvé comment boucler.
    la modif :
    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
    // Calcul des distances
    var j = 0
    function calcDistances(tmp){
    	var directionsService = new google.maps.DirectionsService();
    	// Définition du trajet à calculer
    	var requeteItineraire = {
    		origin: MyLatLng,
    		destination: PointLatLng[j],
    		region: "fr",
    		travelMode: google.maps.DirectionsTravelMode.DRIVING
    	};
    	directionsService.route(requeteItineraire, function(response, status) {
    		if (status == google.maps.DirectionsStatus.OK) {
    			 // récupération de la distance totale du trajet en mètres
    			 distance = response.routes[0].legs[0].distance.value;
    			 if(distance <= rayon){
    				PointDistance[j] = distance;
    				nb_Point_ok++;
    				// Ajout d'un marker dans la file
    				addMarker(PointLatLng[j]);
    			 }
    			 else{
    				PointDistance[j] = "0";
    			 }
    			 // Rappel de la fonction
    			 if(j < (NbPoints - 1) ){
    				 j++;
    				calcDistances(j);	 
    			 }
    			 // Sinon on est arrivé au bout, on display les marqueurs
    			 else{
    				showOverlays(); 
    			 }
    		}
    	 });	
    }
    donc en fait, au sein du callback (if status ok), je rappelle ma fonction, et ainsi de suite tant que je n'ai pas testé tous mes points d'interêts

    oui c'était en fait tout bête

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Attendre la fin d'une fonction asynchrone
    Par JustyDark dans le forum NodeJS
    Réponses: 6
    Dernier message: 18/05/2015, 23h11
  2. Mode d'exécution des fonctions asynchrones
    Par unoomad dans le forum NodeJS
    Réponses: 4
    Dernier message: 23/05/2014, 16h06
  3. Fonctions asynchrones et sockets en .Net
    Par ram-0000 dans le forum Réseaux
    Réponses: 0
    Dernier message: 03/04/2013, 10h40
  4. Fonction asynchrone d'export de données
    Par PatStan17 dans le forum C#
    Réponses: 1
    Dernier message: 28/01/2011, 17h05
  5. Savoir la fin d'execution d'une fonction asynchrone
    Par winnyzeboss1 dans le forum C++
    Réponses: 9
    Dernier message: 20/03/2009, 14h46

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