Maison >base de données >tutoriel mysql >## Comment améliorer la précision des recherches de localisation basées sur le rayon dans MySQL ?

## Comment améliorer la précision des recherches de localisation basées sur le rayon dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 04:58:01643parcourir

## How to Improve the Accuracy of Radius-Based Location Searches in MySQL?

Amélioration de la précision dans les requêtes de longitude et de latitude MySQL pour la recherche basée sur le rayon

Lors de l'exécution de recherches de localisation basées sur le rayon dans MySQL, un problème courant obtient des résultats qui s'écartent considérablement du rayon spécifié. Cet écart résulte souvent d'erreurs dans la formule de calcul de distance, conduisant à des mesures de distance inexactes.

Pour remédier à ce problème, considérons une requête affinée qui utilise une méthode de calcul de distance légèrement différente :

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

Dans cette requête :

  • :lat et :long représentent les coordonnées définies par l'utilisateur.
  • lat et long désignent les coordonnées stockées dans la base de données.
  •  : la distance correspond au rayon spécifié, mesuré en miles (ou en kilomètres si 3959 est remplacé par 6371).

Cette formule calcule la distance sur la base de la formule Haversine, qui fournit des résultats plus précis que la formule utilisée dans votre requête d'origine. En incorporant cette formule révisée, vous pouvez affiner votre fonctionnalité de recherche de rayon, en vous assurant que les résultats renvoyés respectent la plage 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!

Déclaration:
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