[Résolu] Trouver la position géographique la plus proche

Eléphant du PHP | 256 Messages

28 déc. 2011, 17:06

Bonjour,

Comme vous me semblez très en verve en cette fin d'année (!), peut-être pourrez-vous (encore) m'aider.

J'ai une liste de points d'intérêt géographique dont je connais la latitude et la longitude.

Exemple...
Point 1, 44 0
Point 2, 45 0
Point 3, 46 0
Point 4, 47 0
Point 5, 48 0
...


Je connais la latitude et la longitude de mon visiteur, puisque ma page le localise...

44.75 0.5

Comment indiquer à mon visiteur les trois points d'intérêt le plus proche de lui ?

Bien entendu, il n' y a pas cinq points d'intérêt, mais 150, et ils peuvent être proches.

Auriez-vous un commencement d'idée ?

Initialement, je pensais calculer les distances avec une règle de trigonométrie (formule de Haversine, je crois), mais je pense que ce calcul est long et inutile.

J'ai voulu utiliser array_serach(), mais cette fonction ne m'a apporté grand chose.

Merci. :mrgreen:

Gaspard
Modifié en dernier par Castor Gaspard le 03 janv. 2012, 17:39, modifié 1 fois.

ViPHP
ViPHP | 2577 Messages

28 déc. 2011, 17:16

Il me semble que (latitude1 - latitude0)^2 + (longitude1 - longitude0)^2 pourrai convenir (avec un modulo 360 sur chaque différence)

Le calcul est à faire directement en base avec un order sur le calcul et un limit 1,5

Mammouth du PHP | 1967 Messages

28 déc. 2011, 18:11

(avec un modulo 360 sur chaque différence)
Je ne pense pas qu'il soit necéssaire ton modulo
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 déc. 2011, 18:24

Comme quoi, le théorème de Pythagore pouvait vraiment servir à quelque chose ;)
(avec un modulo 360 sur chaque différence)
Je ne pense pas qu'il soit necéssaire ton modulo
Tout dépend du système de coordonnées utilisées. En coordonnées géographiques, il faut bien un contrôle pour que 2 poi situés à des longitudes de -170° et +170° ne soient pas considérés à 340° l'un de l'autre, mais bien à 20° :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 256 Messages

28 déc. 2011, 18:48

Merci Messieurs. :)

Je vais méditer cette suggestion, afin d'en tirer la substantifique moelle.

Cordialement,

Gaspard

Mammouth du PHP | 1967 Messages

29 déc. 2011, 17:29

Comme quoi, le théorème de Pythagore pouvait vraiment servir à quelque chose ;)
(avec un modulo 360 sur chaque différence)
Je ne pense pas qu'il soit necéssaire ton modulo
Tout dépend du système de coordonnées utilisées. En coordonnées géographiques, il faut bien un contrôle pour que 2 poi situés à des longitudes de -170° et +170° ne soient pas considérés à 340° l'un de l'autre, mais bien à 20° :)
Un modulo 180 serait plus adapter en longitude et en lattitude, tu te heurtera vite à un problème de pole (mais ca dépends si le père noël est inscrit ou non sur ton site)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 256 Messages

03 janv. 2012, 17:37

Bonjour,

Pardon d'avoir laissé en déshérence ce sujet.

J'ai trouvé une classe qui calcule les distances selon, au choix, la formule d'Haversine, de Vincenty, et la Distance du Grand Cercle :
https://github.com/treffynnon/Geographi ... ons-in-PHP

Voilà pour les archives de Php France. :)

Cordialement,

V.