trier une table en fonction d'une distance (lat et long)

Eléphant du PHP | 75 Messages

28 déc. 2010, 16:55

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

Mammouth du PHP | 1967 Messages

28 déc. 2010, 17:36

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 75 Messages

28 déc. 2010, 19:09

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));
Modifié en dernier par tom_nameless le 28 déc. 2010, 22:25, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

28 déc. 2010, 20:01

les données viennent d'une base SQL ?

Eléphant du PHP | 75 Messages

28 déc. 2010, 22:24

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

ViPHP
ViPHP | 5462 Messages

29 déc. 2010, 07:10

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 ?

Mammouth du PHP | 1967 Messages

29 déc. 2010, 09:49

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.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 75 Messages

29 déc. 2010, 10:53

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)²)

Eléphant du PHP | 75 Messages

29 déc. 2010, 12:18

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";
Modifié en dernier par tom_nameless le 29 déc. 2010, 12:37, modifié 1 fois.

Mammouth du PHP | 1967 Messages

29 déc. 2010, 12:34

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 ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 75 Messages

29 déc. 2010, 12:38

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 `