[php] ¿Cómo encontrar la ubicación más cercana usando latitud y longitud desde la base de datos sql?


Answers

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

Esta es la mejor consulta

Question

Quiero encontrar una ubicación más cercana de la siguiente tabla de la base de datos

Address                            Latitude                longitude 

Kathmandu 44600, Nepal              27.7                   85.33333330000005
Los, Antoniterstraße                37.09024               -95.71289100000001
Sydney NSW, Australia               49.7480755             8.111794700000019
goa india                           15.2993265             74.12399600000003

He obtenido todos estos datos de los mapas de Google. Aquí tengo que encontrar la ubicación más cercana de un lugar. Supongamos que estoy en el lugar Surkhet, su latitud es 28.6 y la longitud es 81.6, ¿cómo puedo encontrar el lugar más cercano desde el lugar Surkhet?




Cuando el método debe funcionar, es mejor primero filtrar en latitud y longitud, y luego calcular la distancia cuadrada aproximativa. Para los países nórdicos, será alrededor del 0.3 por ciento de descuento dentro de los 1000 km.

Entonces, en lugar de calcular la distancia como:

dist_Sphere = r_earth * acos ( sin (lat1) * sin (lat2) + cos(lat1)*cos(lat2)*cos(lon 2 - lon 1)

uno puede calcular el valor aproximado (suponiendo que lat = lat 1 está cerca de lat 2) como

const cLat2 = cos lat ^ 2
const r_earth2 = r_earth ^ 2
dist_App ^2 = r_earth2 * ((lat 2 - lat 1) ^2 + clat2 *(lon 2 - lon 1) ^2)

Ordene por Dist_App 2, y luego simplemente tome la raíz cuadrada del resultado.




El SQL tiene un problema. En la tabla como:

`ubicacion` (
  `id_ubicacion` INT(10) NOT NULL AUTO_INCREMENT ,
  `latitud` DOUBLE NOT NULL ,
  `longitud` DOUBLE NOT NULL ,
  PRIMARY KEY (`id_ubicacion`) )

La id_ubicacion cambia cuando se usa:

SELECT  `id_ubicacion` , ( 3959 * ACOS( COS( RADIANS( 9.053933 ) ) * COS( RADIANS( latitud ) ) * COS( RADIANS( longitud ) - RADIANS( - 79.421215 ) ) + SIN( RADIANS( 9.053933 ) ) * SIN( RADIANS( latitud ) ) ) ) AS distance
FROM ubicacion
HAVING distance <25
ORDER BY distance
LIMIT 0 , 20



Related