Obtenga resultados que caigan dentro de los radios de los marcadores de la base de datos

Actualización 16 de noviembre de 2012

Me gustaría volver a plantear esta pregunta, ofreciendo una nueva recompensa por una solución sólida y buena. Parece que sólo la solución (shubhanshrespuesta de) no funciona efectivamente ahora. Te explicaré por qué.

En primer lugar, este es el mapa en vivo que tengo con radios y personas, los radios están enred y la gente está enblue.

Como puedes ver, haytwo personas en este mapa coneight radios, básicamente estoy obteniendo sólo la persona que esPerson A, pero no estoy recibiendoPerson B, Supongo que el SQL no lo está captando correctamente, lo que necesito para que sea preciso y exacto del radio de la persona y los radios del marcador.

Parece que lo que se recoge está dentro de los radios, no aquellos que se superponen a un radio, lo necesito para poder obtener cualquier resultado de cualquier radio que se superponga entre sí.

Estoy buscando un SQL preciso y exacto que la respuesta de Shubhansh. Puede leer a continuación para leer exactamente cómo necesito la consulta para actuar y captar personas precisas.

Los datos,GENTE:

+-----------+-----------+--------+
| latitude  | longitude | radius |
+-----------+-----------+--------+
| 51.517395 | -0.053129 | 5.6    |
| 51.506607 | -0.116129 | 0.7    |
+-----------+-----------+--------+

Tenga en cuenta queradius Está en kilómetros.

+-----------+-----------+-----+
| latitude  | longitude | km  |
+-----------+-----------+-----+
| 51.502117 | -0.103340 | 0.3 |
| 51.498913 | -0.120850 | 0.7 |
| 51.496078 | -0.108919 | 0.7 |
| 51.496506 | -0.095873 | 0.7 |
| 51.503399 | -0.090723 | 0.7 |
| 51.508049 | -0.100336 | 0.7 |
| 51.508797 | -0.112610 | 0.7 |
| 51.505535 | -0.125227 | 0.7 |
| 51.502331 | -0.108061 | 0.7 |
+-----------+-----------+-----+

El actual SQL que uso:

SELECT ppl.latitude,
       ppl.longitude,
       ppl.radius
FROM 
(
    people ppl
),
(
    SELECT latitude, longitude 
    FROM radiuses
) AS radius
WHERE (POW((ppl.longitude - radius.longitude) * 111.12 * COS(ppl.latitude), 2) + POW((ppl.longitude - radius.longitude) * 111.12, 2)) <= 4
GROUP BY ppl.id

Los datos de MySQL que puede utilizar para probar su consulta,

INSERT INTO radiuses (id, latitude, longitude, km) VALUES ('1', '51.502117', '-0.103340', '0.3'), ('2', '51.498913', '-0.120850', '0.7'), ('3', '51.496078', '-0.108919', '0.7'), ('4', '51.496506', '-0.095873', '0.7'), ('5', '51.503399', '-0.090723', '0.7'), ('6', '51.508049', '-0.100336', '0.7'), ('7', '51.508797', '-0.112610', '0.7'), ('8', '51.505535', '-0.125227', '0.7'), ('9', '51.502331', '-0.108061', '0.7');

INSERT INTO people (id, latitude, longitude, radius) VALUES ('1', '51.517395', '-0.053129', '5.6'), ('2', '51.506607', '-0.116129', '0.7');
Antiguo resumen

Nota: Todas las latitudes y longitudes se hacen al azar.

Tengo un applet de mapas que un usuario puede colocar suradio de una ubicación lat / lng, con un radio de 1 km.

Ahora, hay otro usuario que puede poner suradios, en cualquier ubicación del mapa, cada una con un radio de 1 km (igual que el usuario anterior).

Me gusta estoUsuario A es rojo yUsuario B es azul.

BásicamenteUsuario A almacena sus radios en una mesa que se ve así:

+-----------+---------+-----------+-----------+
| radius_id | user_id | latitude  | longitude |
+-----------+---------+-----------+-----------+
|         1 |       1 | 81.802117 | -1.110035 |
|         2 |       1 | 81.798272 | -1.144196 |
|         3 |       1 | 81.726782 | -1.135919 |
+-----------+---------+-----------+-----------+

YUsuario B almacena su radio en otra tabla que se ve así: (nota: solo pueden almacenar 1 coordenadas por cuenta):

+---------+-----------+-----------+
| user_id | latitude  | longitude |
+---------+-----------+-----------+
|       6 | 81.444126 | -1.244910 |
+---------+-----------+-----------+

Quiero poder recoger a los usuarios que se encuentran dentro de los radios definidos, incluso si los círculos de radio están tocando, en la imagen del mapa. Solo marcadorC sería capaz de recoger el radio único, cuandoA yB no haga.

Estoy seguro de que esto es posible, pero no sé cómo crear este tipo de sistema en MySQL.

Encontré esto en el sitio de desarrolladores de Google, está cerca, pero no solo lo que realiza lo que necesito.

Creación de un localizador de tienda con PHP, MySQL y Google Maps

EDITAR: He encontrado uno mejor, esto está muy cerca, pero todavía no es lo que estoy buscando, ya que usa un límite de latitud y longitud cuando tengo múltiples en una tabla.

Seleccionar puntos de una base de datos por latitud / longitud dentro de un círculo delimitador

Respuestas a la pregunta(3)

Su respuesta a la pregunta