2010-08-20 34 views
11

Tengo una base de datos MySQL y 2 tablas, digamos clientes y escuelas. Ahora cada tabla tiene columnas de latitud y longitud. Y necesito hacer un SELECCIONAR, por ejemplo, de la segunda tabla, donde las escuelas se encuentran en un radio dado de un registro de la primera tabla. Los cálculos deben hacerse en función de la latitud y la longitud. PD: Estoy usando PHP.Obtener resultados de mysql basado en la longitud de latitud

+2

Además de la respuesta de Piskvor, este tutorial es bastante bueno: [Geo Distance Search with MySQL] (http://www.scribd.com/doc/2569355/Geo-Distance- Search-with-MySQL), aunque encontré que la página no se cargaba muy bien. Como alternativa, la presentación de PowerPoint se puede encontrar [aquí] (http://www.mysqlconf.com/mysql2008/public/schedule/detail/347). – Mike

Respuesta

9

Se puede calcular una distancia usando 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) - grados a radianes
ACOS(X) - el arco coseno de X, es decir, el valor cuyo coseno es X
DEGREES(X) - radianes a grados

60 - minutos en un grado
1.1515 - millas en un nautical mile
1.609344 - kilómetros en una milla

+0

Gracias, intentaré ahora y acepto si funciona. – Centurion

+1

Entonces, si mi radio está en kilómetros, ¿la consulta será como la que escribe o debería cambiarla? gracias – Centurion

+0

Mysql da un error: columna desconocida 'clients.longitude-schools.longitude' en 'lista de campo' ..., ¿cuál es el significado de '-' firmar aquí? – Centurion

Cuestiones relacionadas