"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > ## Como otimizar consultas MySQL para pesquisas precisas de geolocalização usando latitude e longitude?

## Como otimizar consultas MySQL para pesquisas precisas de geolocalização usando latitude e longitude?

Publicado em 2024-11-14
Navegar:214

## How to Optimize MySQL Queries for Accurate Geolocation Searches Using Latitude and Longitude?

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.

Tutorial mais recente Mais>

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