2011-12-22 22 views
17

Duplicar posible:
MySQL latitude and Longitude table setupcalcular la distancia dados 2 puntos, latitud y longitud

Sé que esta pregunta probablemente se ha hecho muchas veces, he investigado mucho y necesito ayuda con algo específico.

Digamos que tengo un formulario y el usuario ingresa longitud y latitud, y tengo una base de datos que contiene tablas con longitudes y latitudes, ¿cómo buscaría un punto o puntos en esa tabla que estén dentro de las 15 millas de radio?

+4

mirada a los 10 mejores enlaces en la sección "relacionada" a la derecha -> –

Respuesta

42

Puede usar la fórmula que calcula las distancias entre dos puntos. Por ejemplo:

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)); 
} 

También puede hacer algo como:

$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

me da una Desconocido columna de 'distancia de error 'in' where cláusula ' – Grigor

+1

¿qué versión de mysql tienes? Intenta cambiar DONDE TENER. mysql 5.x tiene algunos problemas con where clause. http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html – claire

+2

Para toda su información, MySQL-Query calcula la distancia en millas. Para determinar la distancia en km, debe multiplicarla por 1.609344 (como en el ejemplo de PHP). – cldrr

3

Si tiene Lat/Lon de dos puntos, puede obtener delta Lat y delta Lon y convertir esto a una distancia a lo largo de la latitud y una distancia, y usar el teorema de Pitágoras.

¿Ha mirado páginas como http://www.movable-type.co.uk/scripts/latlong.html? Esto tiene varias formas de calcular la distancia. A medida que avanza en su lista de puntos, usa la fórmula para calcular la distancia desde cada punto hasta el punto de interés y solo guarda los que satisfacen R < 15 millas.

Cuestiones relacionadas