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 (0)

Attach images by dragging & dropping or by selecting them.
The maximum file size for uploads is 1MB. Only gif,jpg,png files are allowed.
 
The maximum number of 1 allowed files to upload has been reached. If you want to upload more files you have to delete one of the existing uploaded files first.
The maximum number of 1 allowed files to upload has been reached. If you want to upload more files you have to delete one of the existing uploaded files first.
Posta come

    Commenti offerti da CComment