Maison > base de données > tutoriel mysql > ## 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
Libérer: 2024-10-26 12:33:03
original
682 Les gens l'ont consulté

## 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>
Copier après la connexion

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>
Copier après la connexion

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!

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