Optimización de consultas MySQL para búsquedas de geolocalización utilizando latitud y longitud
En MySQL, recuperar datos basados en la proximidad geográfica es una tarea común. Cuando se trabaja con valores de longitud y latitud, es esencial utilizar consultas eficientes para evitar resultados inesperados.
Considere la siguiente consulta que intenta buscar filas dentro de un radio de 25 millas de un centro de latitud y longitud:
SELECT *,(((acos(sin(($lat*pi()/180)) * sin((`latitude`*pi()/180)) cos(($lat*pi()/180))
* cos((`latitude`*pi()/180)) * cos((($lon - `longitude`)*pi()/180))))*180/pi())*60*1.1515)
AS `distance` FROM `geo_locations` HAVING `distance` Si bien esta consulta generalmente funciona, puede producir resultados inexactos para algunas filas, mostrándolas mucho más alejadas de lo especificado radio.
Para mejorar la precisión, considere la siguiente consulta optimizada:
SELECT
`id`,
(
6371 *
acos(
cos( radians( :lat ) ) *
cos( radians( `lat` ) ) *
cos(
radians( `long` ) - radians( :long )
)
sin(radians(:lat)) *
sin(radians(`lat`))
)
) `distance`
FROM
`location`
HAVING
`distance` En esta consulta, los parámetros :lat y :long representan la latitud y longitud del punto central, y :distance representa el radio en millas.
La diferencia clave entre las dos consultas es el uso de 6371 como factor de conversión para convertir radianes a millas. Este factor es más preciso que 3959, que se utiliza en la consulta original. Además, la consulta optimizada utiliza una fórmula más estricta para calcular la distancia en función de la latitud y la longitud.
Al implementar estas optimizaciones, puede mejorar significativamente la precisión de sus consultas MySQL al realizar búsquedas de geolocalización utilizando valores de latitud y longitud. asegurando que los resultados estén siempre dentro de la distancia del radio especificado.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3