Maison  >  Article  >  base de données  >  Comment optimiser les requêtes géospatiales dans MySQL pour les adresses dans un rayon ?

Comment optimiser les requêtes géospatiales dans MySQL pour les adresses dans un rayon ?

DDD
DDDoriginal
2024-11-02 03:23:02271parcourir

How to Optimize GeoSpatial Queries in MySQL for Addresses Within a Radius?

MySQL dans une plage de requêtes géospatiales pour les cartes

Interroger des données géographiques à partir d'une grande base de données pour afficher des emplacements spécifiques dans une plage spécifiée est un défi courant dans les applications cartographiques. Cette question explore comment optimiser la récupération des adresses dans un rayon de 5 miles autour de la géolocalisation donnée par un utilisateur.

Formule Haversine pour le calcul de la distance

Pour déterminer la distance entre deux points à la surface de la Terre, la formule de Haversine est utilisée. Cette formule mathématique calcule la distance orthodromique, en tenant compte de la courbure de la Terre ainsi que des latitudes et longitudes des points.

Optimisation des requêtes avec la formule Haveline

Exploitation de la Formule Haversine, la requête MySQL fournie récupère uniquement les adresses qui se situent dans la plage souhaitée :

$sql = "SELECT *, (3959 * acos( cos( radians(" . $lat . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $lng . ") ) + sin( radians(" . $lat . ") ) * sin( radians( lat ) ) ) ) AS distance FROM your_table HAVING distance < 5";

Paramètres et variables

  • $lat **, **$lng: Coordonnées de la position actuelle de l'utilisateur.
  • lat, lng: Colonnes du tableau contenant les coordonnées de chaque adresse .
  • 3959 : Rayon de la Terre en miles (convertir en 6371 pour les kilomètres).
  • distance : Distance calculée entre l'emplacement de l'utilisateur et chaque adresse .

Résultat

La requête génère une liste d'adresses avec leurs distances calculées respectives. La clause HAVING garantit que seules les adresses situées dans le rayon de 5 miles spécifié sont récupérées, ce qui permet une sélection d'enregistrements plus efficace et plus ciblée. Cette approche réduit considérablement la quantité de données transférées et traitées, améliorant ainsi les performances globales de l'application cartographique.

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