Maison  >  Article  >  base de données  >  Comment récupérer des résultats dans un rayon de marqueur à partir d'une base de données : une approche SQL pour un calcul précis de la distance

Comment récupérer des résultats dans un rayon de marqueur à partir d'une base de données : une approche SQL pour un calcul précis de la distance

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-01 05:40:02251parcourir

How to Retrieve Results Within a Marker Radius from a Database: A SQL Approach to Accurate Distance Calculation

Comment récupérer des résultats dans les rayons de marqueurs à partir d'une base de données : calcul précis de la distance

Pour déterminer avec précision les résultats qui se situent dans les rayons de marqueurs spécifiés à partir de une base de données, il est crucial de considérer l'équation d'un cercle :

(x-x1)^2 + (y - y1)^2 = r^2

où (x,y) représente un point dans le cercle, (x1, y1) est le centre du cercle et r est son rayon .

Dans le contexte de cette question, le centre du cercle est l'emplacement du marqueur de l'utilisateur (latitude et longitude), tandis que les correspondances ou résultats potentiels sont représentés par des points à l'intérieur du cercle. Le rayon est fixé à 1 kilomètre.

Pour résoudre le problème des différentes unités (degrés pour la latitude et la longitude par rapport aux kilomètres pour le rayon), l'équation est modifiée comme suit :

((x-x1)*111.12)^2 + ((y-y1)*111.12)^2 = 4 (where 2 is the radius in kilometers and 111.12 represents the conversion factor from degrees to kilometers)

Sur la base de cette équation, l'instruction SQL permettant de récupérer les résultats qui croisent les cercles marqueurs peut s'écrire :

SELECT A.user_id, A.radius_id, A.latitude, A.logitude
FROM UserA AS A,
     (SELECT user_id, latitude, longitude
       FROM UserB
       WHERE user_id = 8) AS B
WHERE (POW((A.latitude-B.latitude)*111.12, 2) + POW((A.longitude - B.longitude)*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!

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