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