Ecco la query che utilizzo sullo store locator con cui lavoro:
SELECT
`id`,
(
6371 *
acos(
cos( radians( :lat ) ) *
cos( radians( `lat` ) ) *
cos(
radians( `long` ) - radians( :long )
) +
sin(radians(:lat)) *
sin(radians(`lat`))
)
) `distance`
FROM
`location`
HAVING
`distance` < :distance
ORDER BY
`distance`
LIMIT
25
:lat
e :long
sono i punti passati dall'utente dove lat
e long
sono i punti memorizzati nel database.
La :distanza è misurata in miglia, nella versione funzionante del codice la :distanza è effettivamente tirata da un menu a discesa che va da 10-50 miglia
È possibile modificare il codice in modo che funzioni con i chilometri modificando 3959 (la distanza dal centro della terra alla sua superficie in miglia) in 6371 (3959 miglia convertite in chilometri) grazie a joshhendo per quella soluzione.