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

numerodix

WRInaute discret
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:
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:
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 !
 

jcaron

WRInaute accro
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.
 

numerodix

WRInaute discret
Merci pour vos réponses !
Finalement, j'ai fais comme ça :
Code:
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:
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 !
 

numerodix

WRInaute discret
Code:
directions = new GDirections();
					directions.load("from:"+adresse[1]+" to:"+magasin1.adresse);
					alert(directions.getDuration.seconds);

L'alert me renvoie "undefined"...
 

numerodix

WRInaute discret
J'ai presque réussit !
Code:
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 passionné
ta variable iti doit être déclarée de façon globale > il ne faut par mettre
Code:
var iti=...
mais
Code:
iti=...

sinon tu peux ajouter un listener sur le chargement

Code:
GEvent.addListener(directions, "load", onGDirectionsLoad);

qui te te permet de balancer la fonction

Code:
	function onGDirectionsLoad()
		{
	ce que tu veux
		}
 

numerodix

WRInaute discret
J'ai enlevé le var de iti et ça me fait la même chose...
Code:
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 discret
J'arrive a avoir mon alerte !
Mais iti est vide...

Code:
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 passionné
c'est quoi ça ?

Code:
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:
duree = directions.getDuration().html;
rend "duree" disponible à l'extérieur.
 

numerodix

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

Code:
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);
 

Discussions similaires

Haut