Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Distance entre 2 villes, proximité

3/5 (23 avis)

Snippet vu 112 437 fois - Téléchargée 22 fois


Contenu du snippet

le but est de rechercher pour une ville donnée les villes les plus proches, la base de donnée des villes avec les coordonnées latitude et longitude (en degré décimal) peut être trouvé sur le net
- http://www.heavens-above.com
- http://www.astromedia.org/atlas/index.php LIEN HS
- http://gnswww.nga.mil/geonames/GNS/index.jsp
- http://earth-info.nga.mil/gns/html/cntry_files.html,
ou alors, demandez moi,
car j'ai eu beaucoup de mal à trouver un fichier assez complet
Le seul inconvénient c'est que ça ne donne pas le code postal (si quelqu'un trouve une telle base, qu'il me le fasse savoir, ça m'interresse)

Source / Exemple :


SELECT `ville`.`FULL_NAME_ND`,
(6366*acos(cos(radians($LAT))*cos(radians(`ville`.`LAT`))*cos(radians(`ville`.`LONG`)-radians($LONG))+sin(radians($LAT))*sin(radians(`ville`.`LAT`))))
as Proximite
from `ville` where `ville`.`CC1`='$pays'
order by Proximite
limit 1,5;

explications (derrière --)
--commande de sélection
SELECT 
--nom complet de la ville
`ville`.`FULL_NAME_ND`,
--formule de calcul (optimisée) de la distance entre la ville d'origine ($LAT et $LONG) et la ville dans la base (`ville`.`LAT` et `LONG`)
(6366*acos(cos(radians($LAT))*cos(radians(`ville`.`LAT`))*cos(radians(`ville`.`LONG`)-radians($LONG))+sin(radians($LAT))*sin(radians(`ville`.`LAT`))))
--on nomme le résultat "proximité"
as Proximite
--dans quelle table
from `ville` 
--condition
where 
--on sélectionne au moins le pays car ma base simplifiée contient quelques 3 500 000 villes du monde..
`ville`.`CC1`='$pays'
--trie par distance de la plus proche à la plus éloignée
order by Proximite
--on limite le résultat à 5 villes pour accélérer la requete
limit 1,5;

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.