Ogni utente nel mio database ha la latitudine e la longitudine memorizzato in due campi (lat, lon)ordinamento query MySQL dalla latitudine/longitudine
Il formato di ogni campo è:
lon | -1.403976
lat | 53.428691
Se un utente ricerche per altri utenti all'interno, dicono 100 miglia, mi esibisco il seguente al fine di calcolare l'intervallo di lat/lon appropriato ($ lat e lon $ sono i valori degli utenti correnti)
$R = 3960; // earth's mean radius
$rad = '100';
// first-cut bounding box (in degrees)
$maxLat = $lat + rad2deg($rad/$R);
$minLat = $lat - rad2deg($rad/$R);
// compensate for degrees longitude getting smaller with increasing latitude
$maxLon = $lon + rad2deg($rad/$R/cos(deg2rad($lat)));
$minLon = $lon - rad2deg($rad/$R/cos(deg2rad($lat)));
$maxLat=number_format((float)$maxLat, 6, '.', '');
$minLat=number_format((float)$minLat, 6, '.', '');
$maxLon=number_format((float)$maxLon, 6, '.', '');
$minLon=number_format((float)$minLon, 6, '.', '');
posso quindi eseguire una quer y quali:
$query = "SELECT * FROM table WHERE lon BETWEEN '$minLon' AND '$maxLon' AND lat BETWEEN '$minLat' AND '$maxLat'";
Questo funziona bene, e utilizzare una funzione per Calulate e visualizzare la distanza effettiva tra gli utenti in fase di uscita, ma vorrei poter ordinare i risultati diminuendo o aumentando la distanza alla fase di ricerca.
C'è un modo per farlo?
Grazie Blaze, sembra funzionare - ce ne sono uno o due fuori posto ma non è un dealbreaker (a meno che non si pensi a come posso aggirarlo). Praticamente a prescindere. Grazie – Dan
Sono davvero fuori posto in base alla distanza al quadrato? O pensi che la distanza al quadrato sia stata calcolata in modo errato? – Blazemonger
Quella query non tiene conto del fatto che la longitudine è misurata est-ovest dal meridiano di Greenwich, quindi restituirà distanze molto lunghe per due luoghi vicini l'uno all'altro e vicino al 180 ° meridiano. – nitro2k01