Maison  >  Article  >  base de données  >  Comment rechercher efficacement des adresses dans une plage spécifique dans MySQL à l'aide de la formule Haversine ?

Comment rechercher efficacement des adresses dans une plage spécifique dans MySQL à l'aide de la formule Haversine ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-01 18:20:30422parcourir

How to Efficiently Query for Addresses Within a Specific Range in MySQL using the Haversine Formula?

Requête MySQL pour sélectionner des coordonnées dans une plage spécifiée

Dans votre base de données, vous avez un grand nombre d'adresses, chacune avec sa propre latitude et la longitude. Vous cherchez à afficher uniquement les adresses situées dans un rayon de 8 km autour de l'emplacement d'un utilisateur spécifié sur une carte à l'aide de l'API Google Maps.

Pour éviter de récupérer inutilement tous les enregistrements et d'effectuer des calculs de distance en Java, ce qui serait inefficace, pensez à utiliser la formule Haversine dans votre requête MySQL. Cette formule calculera la distance entre deux points de la surface de la Terre. Voici la requête modifiée :

<code class="sql">SELECT *, (3959 * acos(cos(radians(?)) * cos(radians(lat)) * cos(radians(lng) - radians(?)) + sin(radians(?)) * sin(radians(lat)))) AS distance
FROM your_table
HAVING distance < 5</code>

Dans cette requête, remplacez les points d'interrogation (?) par les valeurs de latitude et de longitude pour l'emplacement de l'utilisateur ($lat et $lng de votre code Java). La colonne de distance stockera la distance entre chaque adresse et l'emplacement de l'utilisateur.

En utilisant cette requête, vous récupérerez uniquement les adresses qui se trouvent dans la plage spécifiée, optimisant ainsi les performances de votre requête.

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