2010-08-20 19 views
11

Ho un database mysql e 2 tabelle diciamo clienti e scuole. Ora ogni tabella ha colonne di latitudine e longitudine. E ho bisogno di fare una SELECT per esempio dal secondo tavolo in cui le scuole si trovano in un dato raggio di un record dalla prima tabella. I calcoli dovrebbero essere fatti in base alla latitudine e alla longitudine. PS: sto usando PHP.Ottieni risultati da mysql in base alla latitudine longitudine

+2

In aggiunta alla risposta di Piskvor, questo tutorial è abbastanza buono: [Ricerca Geo Distance con MySQL] (http://www.scribd.com/doc/2569355/Geo-Distance- Search-with-MySQL), anche se ho trovato che la pagina non si caricava molto bene. In alternativa, è possibile trovare la presentazione di PowerPoint [qui] (http://www.mysqlconf.com/mysql2008/public/schedule/detail/347). – Mike

risposta

9

È possibile calcolare la distanza utilizzando 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) - gradi in radianti
ACOS(X) - l'arcocoseno di X, cioè il valore il cui coseno è X
DEGREES(X) - radianti a gradi

60 - minuti in un grado
1.1515 - miglia in un nautical mile
1.609344 - chilometri in un miglio

+0

Grazie, proverò ora e accetto se funziona. – Centurion

+1

Quindi se il mio raggio è in chilometri la query sarà come se scrivessi o dovrei cambiarlo? grazie – Centurion

+0

Mysql restituisce un errore: colonna sconosciuta 'clients.longitude-schools.longitude' in 'lista campi' ..., qual è il significato di '-' firmare qui? – Centurion

Problemi correlati