Maison > Article > base de données > Comment puis-je effectuer efficacement des recherches de rayon dans une base de données de données géospatiales ?
Requêtes de base de données pour les recherches de rayon géospatial
Dans ce contexte, nous visons à identifier les individus dont les emplacements se situent dans des zones de rayon défini représentées par des marqueurs sur une carte.
Calcul du rayon
Pour déterminer si un point (x, y) se trouve dans un cercle centré en (x1, y1) avec un rayon de r, nous employons la formule suivante :
(x - x1)^2 (y - y1)^2 <= r^2
Conversion des degrés en kilomètres
Pour garantir des unités cohérentes des deux côtés de l'équation, nous convertissons les degrés de latitude et de longitude en kilomètres en utilisant le facteur de conversion 111,12 km/degré.
Formule modifiée
Avec la conversion appliquée, la formule modifiée devient :
((x - x1) * 111.12)^2 ((y - y1) * 111.12)^2 <= 4
où 4 représente le rayon carré de 2 kilomètres.
Implémentation SQL
Pour implémenter cette formule dans MySQL, nous construisons une requête qui associe chaque marqueur (Utilisateur A ) avec le point central de l'utilisateur à localiser (Utilisateur B) :
<code class="sql">SELECT A.user_id, A.radius_id, A.latitude, A.longitude FROM UserA AS A JOIN (SELECT user_id, latitude, longitude FROM UserB WHERE user_id = 8) AS B ON (POW((A.latitude - B.latitude) * 111.12, 2) + POW((A.longitude - B.longitude) * 111.12, 2)) <= 4</code>
Amélioration de la précision
Pour des résultats plus précis, la formule peut être modifiée pour prendre en compte les différences latitude-longitude par rapport à la latitude :
((x - x1) * 111.12 * cos(B.latitude))^2 ((y - y1) * 111.12)^2 < = 4
ou par rapport à la longitude :
((x - x1) * 111.12 * cos(A.latitude))^2 ((y - y1) * 111.12)^2 < ;= 4
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!