Pour résoudre ce problème, vous devez comprendre l'équation du cercle, qui ressemble à ceciPour que tout point (x, y) tombe dans un cercle avec le centre (x1, y1) et le rayon r unités est
(x-x1)^2 + (y - y1)^2 <= r^2
where a^b = a to the power b
Ici, dans votre cas, les utilisateurs B (latitude, longitude) sont le centre du cercle, les utilisateurs A (latitude, longitude) sont les points (x, y) et le rayon =2 km.
Mais le problème de base est de changer les degrés de latitudes en longitudes, alors voici la solution, 1 degré =111,12 km. Donc, pour garder les mêmes unités des deux côtés de l'équation, nous allons le convertir en Kms
Donc notre équation finale devient :
((x-x1)*111.12)^2 + ((y-y1)*111.12)^2 = 4 (=2^2)
L'instruction SQL pour la même chose devrait ressembler à ceci
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
/* **Edit** Here I have used (A.longitude - B.longitude)*111.12, for more accurate results one can replace it with (A.longitude - B.longitude)*111.12*cos(A.latitude)) or (A.longitude - B.longitude)*111.12*cos(B.latitude))
And, as i have suggested in the comments that first filter some records based on approximation, so whether one uses A.latitude or B.latitude it will not make much difference */
J'espère que cela vous aidera...