Получить результаты, которые попадают в радиус маркеров из базы данных

Update 16th November 2012

Я хотел бы снова поднять этот вопрос, предлагая новую награду за солидное, хорошее решение. Кажется, что только решение (shubhansh's answer) не работает эффективно сейчас. Я объясню почему.

Во-первых, у меня есть карта в реальном времени с радиусами и людьми, радиусы вred и люди вblue.

enter image description here

Как видите, естьtwo люди на этой карте сeight радиусы, в основном я получаю только человека, которыйPerson A, но я не получаюPerson BЯ предполагаю, что SQL не правильно его подхватывает, и мне нужно, чтобы он был точным и точным, исходя из радиуса человека и радиуса маркера.

Похоже, что они находятся внутри радиусов, а не тех, которые перекрывают радиус, мне нужно, чтобы он мог получать любые результаты для любых радиусов, которые перекрывают друг друга.

Я ищу точный и точный SQL, чем ответ Шубханша. Вы можете прочитать ниже, чтобы прочитать, как именно мне нужен запрос, чтобы действовать и подбирать точных людей.

Данные,PEOPLE:

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

Обратите внимание, чтоradius в километрах.

+-----------+-----------+-----+
| 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 |
+-----------+-----------+-----+

Текущий SQL я использую:

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

Данные для MySQL, которые вы можете использовать для проверки вашего запроса,

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');
Old summary

Note: все широты и долготы сделаны случайным образом.

У меня есть апплет карты, который пользователь может разместитьradius широта / долгота, с радиусом 1 км.

Теперь есть другой пользователь, который может поставить свойradiuses, в любом месте на карте, каждое с радиусом 1 км (так же, как пользователь выше).

Как этоUser A красный иUser B синий.

enter image description here

В принципеUser A хранит его радиусы в таблице, которая выглядит следующим образом:

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

А такжеUser B сохраняет его радиус в другой таблице, которая выглядит следующим образом - (примечание: они могут хранить только 1 координату на учетную запись):

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

Я хочу иметь возможность выбирать тех пользователей, которые попадают в определенные радиусы, даже если радиусы соприкасаются, на рисунке карты. Только маркерC сможет подобрать единый радиус, когдаA а такжеB не делайте.

Я уверен, что это возможно, но я не знаю, как создать такую систему в MySQL.

Я нашел это на сайте разработчиков Google, он близок, а не только то, что он мне нужен.

Creating a Store Locator with PHP, MySQL & Google Maps

EDIT: Я нашел лучший вариант, это очень близко, но все еще не то, что я ищу, поскольку он использует 1 границу координат широты и долготы, когда у меня есть несколько в таблице.

Select points from a database by latitude/longitude within a bounding circle

Ответы на вопрос(3)

Ваш ответ на вопрос