Logo Informatizzati

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;

Tags

Commenti offerti da CComment