2010-08-20 3 views
11

J'ai une base de données mysql et 2 tables disons clients et écoles. Maintenant, chaque table a des colonnes de latitude et de longitude. Et je dois faire un SELECT par exemple de la deuxième table où les écoles sont dans un rayon donné d'un enregistrement de la première table. Les calculs doivent être faits en fonction de la latitude et de la longitude. PS: J'utilise PHP.Obtenir les résultats de mysql basé sur latitude longitude

+2

En plus de la réponse de Piskvor, ce tutoriel est assez bonne: [Geo Distance Rechercher avec MySQL] (http://www.scribd.com/doc/2569355/Geo-Distance- Search-with-MySQL), bien que j'ai trouvé que la page ne se chargeait pas très bien. Comme alternative, la présentation PowerPoint peut être trouvée [ici] (http://www.mysqlconf.com/mysql2008/public/schedule/detail/347). – Mike

Répondre

9

Vous pouvez calculer une distance en utilisant un Spherical law of cosines:

SELECT DEGREES(ACOS(SIN(RADIANS(clients.latitude)) * SIN(RADIANS(schools.latitude)) + 
        COS(RADIANS(clients.latitude)) * COS(RADIANS(schools.latitude)) 
                * COS(RADIANS(clients.longitude 
                   – schools.longitude)))) 
     * 60 * 1.1515 * 1.609344 AS distance 
FROM clients, schools HAVING distance < $radius 

RADIANS(X) - degrés à radians
ACOS(X) - le cosinus d'arc de X, qui est la valeur dont le cosinus est X
DEGREES(X) - radians degrés

60 - minutes dans un degré
1.1515 - miles dans un nautical mile
1,609344 - kilomètres dans un mile

+0

Merci, je vais essayer maintenant et accepter si ça marche. – Centurion

+1

Donc, si mon rayon est en kilomètres, la requête sera comme vous écrivez ou je devrais le changer? merci – Centurion

+0

Mysql donne une erreur: Colonne inconnue 'clients.longitude-schools.longitude' dans 'liste des champs' ..., quel est le sens du signe '-' ici? – Centurion

Questions connexes