Creare una tabella con l'aggiunta di due campi "lat" e "lng" che siano di tipo FLOAT(10,6)
La precisione di 6 numeri dopo la virgola è più che sufficiente.
Il separatore di decimali dovrà essere il punto, non la virgola.
Metodo 1
Query semplificata che considera la terra come se fosse piatta, va bene per le piccole distanze
SELECT *
FROM table
ORDER BY ((lat-$user_lat)*(lat-$user_lat)) + ((lng - $user_lng)*(lng - $user_lng)) ASC
Metodo 2
Query complessa che considera la terra tonda
La clausola "HAVING distance < 30" è necessaria solo se si vuole considerare un raggio (es: 30)
SELECT
id, (
6371 * acos (
cos ( radians($user_lat) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians($user_lng) )
+ sin ( radians($user_lat) )
* sin( radians( lat ) )
)
) AS distance
FROM table
HAVING distance < 30
ORDER BY distance
LIMIT 0 , 20;
Commenti (0)
Commenti offerti da CComment