Otimizando consultas MySQL para pesquisas de geolocalização usando latitude e longitude
No MySQL, recuperar dados com base na proximidade geográfica é uma tarefa comum. Ao trabalhar com valores de longitude e latitude, é essencial usar consultas eficientes para evitar resultados inesperados.
Considere a seguinte consulta que tenta encontrar linhas dentro de um raio de 40 quilômetros de uma latitude e longitude central:
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` Embora esta consulta geralmente funcione, ela pode produzir resultados imprecisos para algumas linhas, mostrando-as muito mais distantes do especificado radius.
Para melhorar a precisão, considere a seguinte consulta otimizada:
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` Nesta consulta, os parâmetros :lat e :long representam a latitude e longitude do ponto central e :distance representa o raio em milhas.
A principal diferença entre as duas consultas é o uso de 6371 como fator de conversão para converter radianos em milhas. Esse fator é mais preciso que 3959, usado na consulta original. Além disso, a consulta otimizada usa uma fórmula mais rigorosa para calcular a distância com base na latitude e longitude.
Ao implementar essas otimizações, você pode melhorar significativamente a precisão de suas consultas MySQL ao realizar pesquisas de geolocalização usando valores de latitude e longitude, garantindo que os resultados estejam sempre dentro da distância do raio especificado.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3