Maison  >  Article  >  base de données  >  ## Comment interroger avec précision les lignes MySQL dans un rayon de milles spécifié ?

## Comment interroger avec précision les lignes MySQL dans un rayon de milles spécifié ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 12:33:03599parcourir

## How to Accurately Query for MySQL Rows Within a Specified Mile Radius?

Requête mySQL de longitude et de latitude pour les lignes dans un rayon de X Mile

Dans une grande base de données contenant des données géospatiales, il est souvent nécessaire de récupérer des lignes qui se situent dans un rayon spécifique d’un emplacement donné. Ceci est généralement réalisé en utilisant la géométrie sphérique pour calculer la distance entre deux points sur une sphère.

Une telle requête permettant de rechercher des lignes dans un rayon de 25 miles autour d'un point central renvoie des résultats inexacts, avec des distances allant de 86 à 800 milles du but. Voici la requête d'origine :

<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>

Pour résoudre ce problème, modifions la requête en fonction d'une solution qui a été implémentée avec succès dans une application de localisation de magasin :

<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>

Dans cette version révisée requête :

  • :lat et :long représentent la latitude et la longitude du point central passé en paramètres.
  • lat et long sont les valeurs de latitude et de longitude stockées dans la base de données.
  •  : la distance est un paramètre de distance défini par l'utilisateur et transmis à la requête.
  • 6371 est le rayon de la Terre en miles.

En utilisant cette requête mise à jour, vous pouvez récupérer efficacement les lignes qui se trouvent dans un rayon de milles spécifié autour d'un emplacement central donné.

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