Page 1 sur 1
trier une table en fonction d'une distance (lat et long)
Posté : 28 déc. 2010, 16:55
par tom_nameless
Bonjour
j'ai une table avec des adresses et des données GPS (latitude et longitude)
j'aimerai savoir comment peut on faire pour trier la table en fonction de la distance, du plus près géographiquement au plus loin..
ou sinon faire comme dans l'exemple ci-dessous, en fonction d'un rayon de x km :
http://www.campingandcaravanningclub.co ... ityIds=164
Re: trier une table en fonction d'une distance (lat et long)
Posté : 28 déc. 2010, 17:36
par Spols
C'est de la géométrie, tu peux considérer la terre comme une sphère de 6400 km mais le calcul n'est pas évident.
tu peux aussi considérer une surface plane si tu est limité à un pays comme la france par exemple (pour un continent tu pourrais avoir des ratés, mais pas neccéssairement important)
une distance d calcul entre 2 points A et B qui ont chacun une coordonnée x et y (longitude et lattitude)
d = racine((Ax - Bx)² + (Ay - Ay)²)
ensuite un tri croissant est possible
Re: trier une table en fonction d'une distance (lat et long)
Posté : 28 déc. 2010, 19:09
par tom_nameless
merci pour ta réponse et tes explications.
Je n'avais pas pensé à comparer la distance.. c'est une bonne méthode.
Comment on peut faire ce calcule en PHP ?
d = racine((Ax - Bx)² + (Ay - Ay)²)
$valeur1 = (Ax - Bx);
$valeur2 = (Ay - Ay);
$distance = sqrt( pow($valeur1, 2) + pow($valeur2, 2));
Re: trier une table en fonction d'une distance (lat et long)
Posté : 28 déc. 2010, 20:01
par stealth35
les données viennent d'une base SQL ?
Re: trier une table en fonction d'une distance (lat et long)
Posté : 28 déc. 2010, 22:24
par tom_nameless
les données viennent d'une base SQL ?
je dois comparer une latitude et longitude issue d'un formulaire aux coordonnées (lat et long) enregistrées de ma bdd
Re: trier une table en fonction d'une distance (lat et long)
Posté : 29 déc. 2010, 07:10
par stealth35
les données viennent d'une base SQL ?
je dois comparer une latitude et longitude issue d'un formulaire aux coordonnées (lat et long) enregistrées de ma bdd
donc oui ?
Re: trier une table en fonction d'une distance (lat et long)
Posté : 29 déc. 2010, 09:49
par Spols
C'est de la géométrie, tu peux considérer la terre comme une sphère de 6400 km mais le calcul n'est pas évident.
tu peux aussi considérer une surface plane si tu est limité à un pays comme la france par exemple (pour un continent tu pourrais avoir des ratés, mais pas neccéssairement important)
une distance d calcul entre 2 points A et B qui ont chacun une coordonnée x et y (longitude et lattitude)
d = racine((Ax - Bx)² + (Ay - Ay)²)
ensuite un tri croissant est possible
Dans ton code, Ax etc. ne sont pas des variables. Tu dois biensur remplacer par tes longitude / latitude.
Re: trier une table en fonction d'une distance (lat et long)
Posté : 29 déc. 2010, 10:53
par tom_nameless
une distance d calcul entre 2 points A et B qui ont chacun une coordonnée x et y (longitude et lattitude)
d = racine((Ax - Bx)² + (Ay - Ay)²)
C'est normal qu'il y ait 2 fois Ay dans (Ay - Ay)² ? ?
j'imagine que c'est :
d = racine((Ax - Bx)² + (Ay -
By)²)
Re: trier une table en fonction d'une distance (lat et long)
Posté : 29 déc. 2010, 12:18
par tom_nameless
j'ai trouvé une formule pour lister des données situées à x km d'un lieu..
$formule="(6366*acos(cos(radians($latitude))*cos(radians(`lat`))*cos(radians(`lon`) -radians($longitude))+sin(radians($latitude))*sin(radians(`lat`))))";
$sql="SELECT ville,$formule AS dist FROM ville WHERE $formule<='$_GET[distance]' ORDER by dist ASC";
Re: trier une table en fonction d'une distance (lat et long)
Posté : 29 déc. 2010, 12:34
par Spols
Oui sorry une faute de frappe pour le By
Concernant ton erreur, $formule est défini comme un string avec les double quote
Est-ce normale ?
Re: trier une table en fonction d'une distance (lat et long)
Posté : 29 déc. 2010, 12:38
par tom_nameless
Oui sorry une faute de frappe pour le By
Concernant ton erreur, $formule est défini comme un string avec les double quote
Est-ce normale ?
j'ai trouvé mon erreur.. un problème de
' à la place de
`