Google Map : Tester l'existence d'un point + calcul distance

Consultez la formation Google Maps, News, Images de WebRankInfo / Ranking Metrics

numerodix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 106
Inscription: Jeu Déc 13, 2007 15:41

Google Map : Tester l'existence d'un point + calcul distance

Message le Mar Oct 14, 2008 16:07

Bonjour a tous !
Je galère un peu avec l'API google Map...
J'ai un formulaire, l'utilisateur rentre son adresse. Ensuite, je veux calculer son itinéraire vers un point fixe.
Le probleme, c'est que lorsqu'il entre une adresse inexistante, la carte buggue. Du coup je veux tester l'existe du point avant de calculer l'itinéraire...

Code: Tout sélectionner
var geocoder = new GClientGeocoder();
// Ma fonction sensée tester l'existence du point
    function testpoint(address){
       geocoder.getLatLng(address,
         function(point){
            if (!point){
               alert(address + " n'a pas été trouvé.");
               return 0;
            }
            else
               return 1;
            });
   }



Et pour tester l'existence du point :

Code: Tout sélectionner
if(testpoint(adresse)){
     // Mon calcul d'itinéraire, et tout...
}



Le probleme vient bien de ma fonction testpoint() car si je remplace if(testpoint(adresse)) par if(1), ça fonctionne...
Merci d'avance pour votre aide !
Dernière édition par numerodix le Mer Oct 15, 2008 9:22, édité 1 fois.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1137
Inscription: Ven Fév 13, 2004 20:33

Message le Mar Oct 14, 2008 16:12

getLatLng ne renvoie rien, et certainement pas ce que renvoie ton callback.

Il faut que ton callback affecte une valeur à une variable globale (ou à quelque chose dans un objet que tu lui passerais en paramètre), et que tu vérifies cette valeur.

Jacques.

jeroen
WRInaute accro
WRInaute accro
 
Messages: 2383
Inscription: Ven Aoû 30, 2002 13:35

Message le Mar Oct 14, 2008 17:52


numerodix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 106
Inscription: Jeu Déc 13, 2007 15:41

Message le Mer Oct 15, 2008 8:33

Merci pour vos réponses !
Finalement, j'ai fais comme ça :
Code: Tout sélectionner
var geocoder2 = new GClientGeocoder();
      geocoder2.getLatLng(adresse, function(point){
            if (!point){
               alert(adresse + " n'existe pas.");
            }
            else{
               // Mon calcul d'itinéraire...
            }
         });


Par contre, j'ai un autre soucis maintenant...
J'ai une liste de marqueurs (en dur). J'ai mon formulaire ou l'utilisateur entre sa ville.
Une fois sa ville récupérée, je calcule les itinéraires vers tous les points.
Ils s'affichent tous sur la carte. Et justement, je ne souhaite afficher que le plus court...
Voici mon code :

Code: Tout sélectionner
directionsPanel = document.getElementById("route");
               directions = new GDirections(map,directionsPanel);
               directions.load("from:"+adresse+" to:"+magasin1.adresse);
               directions2 = new GDirections(map,directionsPanel);
               directions2.load("from:"+adresse+" to:"+magasin2.adresse);
               directions3 = new GDirections(map,directionsPanel);
               directions3.load("from:"+adresse+" to:"+magasin3.adresse);

est-il possible de calculer la duree du trajet, sans l'afficher ?
J'ai trouvé cette fonction mais je n'arrive pas à l'appliquer : getDuration().seconds;

Merci d'avance !

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1137
Inscription: Ven Fév 13, 2004 20:33

Message le Mer Oct 15, 2008 10:09

C'est pourtant tout marqué dans la doc:

http://code.google.com/apis/maps/docume ... Directions

Il suffit de créer l'objet GDirections sans lui donner de map ou de panel, et il ne l'affichera pas. Et ensuite a priori tu fais un directions.getDistance.meters ou directions.getDuration.seconds et hop.

(ceci dit je n'ai jamais essayé)

Jacques.

numerodix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 106
Inscription: Jeu Déc 13, 2007 15:41

Message le Mer Oct 15, 2008 10:27

Code: Tout sélectionner
directions = new GDirections();
               directions.load("from:"+adresse[1]+" to:"+magasin1.adresse);
               alert(directions.getDuration.seconds);


L'alert me renvoie "undefined"...

numerodix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 106
Inscription: Jeu Déc 13, 2007 15:41

Message le Mer Oct 15, 2008 10:58

J'ai presque réussit !
Code: Tout sélectionner
directions = new GDirections();
               directions.load("from:"+adresse[1]+" to:"+magasin1.adresse);               
               GEvent.addListener(directions,"load", function() {
                  var mesure = directions.getDistance().meters;
                  var duree = directions.getDuration().seconds;
                  var iti = new dist(mesure,duree);
                  alert("Distance en metres : "+iti.distance+"\nTemps en secondes : "+iti.duree);   
                  });

L'alerte m'affiche les bonnes valeurs.
Le soucis c'est que je veux exploiter ces données à l'extérieur du GEvent.addListener().
Mais si je fais un alert(iti.distance); par exemple, il ne m'affiche rien...

jeroen
WRInaute accro
WRInaute accro
 
Messages: 2383
Inscription: Ven Aoû 30, 2002 13:35

Message le Mer Oct 15, 2008 11:32

ta variable iti doit être déclarée de façon globale > il ne faut par mettre
Code: Tout sélectionner
var iti=...

mais
Code: Tout sélectionner
iti=...


sinon tu peux ajouter un listener sur le chargement

Code: Tout sélectionner
GEvent.addListener(directions, "load", onGDirectionsLoad);


qui te te permet de balancer la fonction

Code: Tout sélectionner
   function onGDirectionsLoad()
      {
   ce que tu veux
      }

numerodix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 106
Inscription: Jeu Déc 13, 2007 15:41

Message le Mer Oct 15, 2008 13:25

J'ai enlevé le var de iti et ça me fait la même chose...
Code: Tout sélectionner
directions = new GDirections();
directions.load("from:"+adresse[1]+"to:"+magasin1.adresse);
GEvent.addListener(directions,"load", function() {
     mesure = directions.getDistance().html;
     duree = directions.getDuration().html;
     mesure = mesure.replace(" "," ");
     iti = new dist(mesure,duree);   
});
alert("Trajet : Votre domicile - "+magasin1.nom+"\nDistance : "+iti.distance+"\nTemps de trajet : "+iti.duree);

numerodix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 106
Inscription: Jeu Déc 13, 2007 15:41

Message le Mer Oct 15, 2008 14:29

J'arrive a avoir mon alerte !
Mais iti est vide...

Code: Tout sélectionner
function dist(distance,duree){
   this.distance = distance;
   this.duree = duree;
}

var iti = new dist('','');
directions = new GDirections();
directions.load("from:"+adresse[1]+" to:"+magasin1.adresse);               
GEvent.addListener(directions,"load", function() {
   var mesure = directions.getDistance().html;
   var duree = directions.getDuration().html;
   mesure = mesure.replace(" "," ");
   iti.distance = mesure;
   iti.duree = duree;
});            
alert("Trajet : Votre domicile - "+magasin1.nom+"\nDistance : "+iti.distance+"\nTemps de trajet : "+iti.duree);   

jeroen
WRInaute accro
WRInaute accro
 
Messages: 2383
Inscription: Ven Aoû 30, 2002 13:35

Message le Mer Oct 15, 2008 14:39

c'est quoi ça ?

Code: Tout sélectionner
var iti = new dist('','');
var mesure = directions.getDistance().html;
var duree = directions.getDuration().html;
mesure = mesure.replace(" "," ");
iti.distance = mesure;
iti.duree = duree;


perso je viens de faire un test,
Code: Tout sélectionner
duree = directions.getDuration().html;

rend "duree" disponible à l'extérieur.

numerodix
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 106
Inscription: Jeu Déc 13, 2007 15:41

Message le Mer Oct 15, 2008 14:53

Duree et mesure ne sont pas disponibles a l'extérieur pour moi... :/

Code: Tout sélectionner
directions = new GDirections();
directions.load("from:"+adresse[1]+"to:"+magasin1.adresse);
GEvent.addListener(directions,"load", function() {
   mesure = directions.getDistance().html;
   duree = directions.getDuration().html;
   mesure = mesure.replace(" "," ");
});      
iti = new dist(mesure,duree);      
alert("Trajet : Votre domicile - "+magasin1.nom+"\nDistance : "+iti.distance+"\nTemps de trajet : "+iti.duree);


Formation recommandée sur ce thème :

Formation Google Maps, Google News et Google Images : apprenez comment optimiser le référencement de votre site pour la recherche universelle et notamment Google Maps, Google Actualités et Google Images. Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités