2011-12-22 7 views
17

Eventuali duplicati:
MySQL latitude and Longitude table setupcalcolare la distanza dato 2 punti, latitudine e longitudine

So che questo problema è stato probabilmente chiesto molte volte, ho studiato molto e ho bisogno aiuto con cose specifiche.

Diciamo che ho un modulo e l'utente entra in longitudine e latitudine, e ho un database che ha una tabella contenente longitudini e latitudini, come potrei cercare un punto o punti in quella tabella che si trovano entro 15 miglia di raggio?

+4

Guarda le prime 10 collegamenti nella sezione "Related" a destra -> –

risposta

42

È possibile utilizzare la formula che calcola le distanze tra due punti. Per esempio:

function get_distance($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { 
    $theta = $longitude1 - $longitude2; 
    $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + 
       (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * 
       cos(deg2rad($theta))); 
    $distance = acos($distance); 
    $distance = rad2deg($distance); 
    $distance = $distance * 60 * 1.1515; 
    switch($unit) { 
     case 'Mi': 
      break; 
     case 'Km' : 
      $distance = $distance * 1.609344; 
    } 
    return (round($distance,2)); 
} 

Si può anche fare qualcosa di simile:

$query = "SELECT *,(((acos(sin((".$latitude."*pi()/180)) * 
      sin((`Latitude`*pi()/180))+cos((".$latitude."*pi()/180)) * 
      cos((`Latitude`*pi()/180)) * cos(((".$longitude."- `Longitude`)* 
      pi()/180))))*180/pi())*60*1.1515 
     ) as distance 
     FROM `MyTable` 
     HAVING distance >= ".$distance."; 
+0

mi dà una colonna Unknown 'distanza errore 'in' dove clausola ' – Grigor

+1

quale versione di mysql hai? Prova a cambiare DOVE AVERE. mysql 5.x ha alcuni problemi con la clausola where. http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html – claire

+2

Per tutte le tue informazioni, MySQL-Query calcola la distanza in miglia. Per determinare la distanza in km devi moltiplicarlo per 1.609344 (come nell'esempio PHP). – cldrr

3

Se si dispone del Lat/Lon di due punti, è possibile ottenere delta Lat e delta Lon e convertirlo a una distanza lungo la latitudine e una distanza lungo la longitudine e utilizzare il teorema di Pitagora.

Hai guardato pagine come http://www.movable-type.co.uk/scripts/latlong.html? Questo ha diversi modi di calcolare la distanza. Quindi, mentre passi dall'elenco dei punti, utilizzi la formula per calcolare la distanza da ciascun punto al punto di interesse e mantieni solo quelli che soddisfano R < 15 miglia.