Maison > base de données > tutoriel mysql > le corps du texte

## Comment optimiser les requêtes MySQL pour des recherches de géolocalisation précises en utilisant la latitude et la longitude ?

Patricia Arquette
Libérer: 2024-10-25 19:52:02
original
342 Les gens l'ont consulté

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

Optimisation des requêtes MySQL pour les recherches de géolocalisation à l'aide de la latitude et de la longitude

Dans MySQL, la récupération de données en fonction de la proximité géographique est une tâche courante. Lorsque vous travaillez avec des valeurs de longitude et de latitude, il est essentiel d'utiliser des requêtes efficaces pour éviter des résultats inattendus.

Considérez la requête suivante qui tente de trouver des lignes dans un rayon de 25 miles autour d'une latitude et d'une longitude centrale :

<code class="sql">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` <= 25 ORDER BY `distance` ASC</code>
Copier après la connexion

Bien que cette requête fonctionne généralement, elle peut produire des résultats inexacts pour certaines lignes, les affichant beaucoup plus loin du rayon spécifié.

Pour améliorer la précision, envisagez la requête optimisée suivante :

<code class="sql">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` < :distance
ORDER BY
    `distance`
LIMIT
    25</code>
Copier après la connexion

Dans cette requête, les paramètres :lat et :long représentent la latitude et la longitude du point central, et :distance représente le rayon en miles.

La principale différence entre les deux requêtes est l'utilisation de 6371 comme facteur de conversion pour convertir les radians en miles. Ce facteur est plus précis que 3959, utilisé dans la requête d'origine. De plus, la requête optimisée utilise une formule plus stricte pour calculer la distance en fonction de la latitude et de la longitude.

En mettant en œuvre ces optimisations, vous pouvez améliorer considérablement la précision de vos requêtes MySQL lorsque vous effectuez des recherches de géolocalisation à l'aide de valeurs de latitude et de longitude, en veillant à ce que les résultats soient toujours dans la distance de rayon spécifiée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!