Определите, находится ли одна координата в радиусе другого
Скажем, у меня есть таблица строк, содержащих координаты.
Каким будет лучший способ вывести только строки координат, находящиеся в радиусе другой координаты?
Чтобы упростить мой вопрос, я приведу следующий пример:
Table like:
Columns: Latitude, Longitude.
Row1: 23.44444 24.55555
Row2: 32.44444 28.22222
Row3: 35.11111 32.12345
В инструкции SQL, как мне получить строки координат, которые находятся в радиусе Row3, например?
Ответы
Ответ 1
Этот post показывает, как это сделать в SQL Server.
И вот как это сделать в MySQL:
SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) +
COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon - lon) *
PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance
FROM members
HAVING distance<='10' ORDER BY distance ASC
Ответ 2
выглядит как формула расстояния:
D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) +
cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi / 180)
) * 180 / pi)
где Y и Z - точки каждой строки, которую вы хотите проверить, а y и z - точки строки примера.
чтобы вы могли сделать такую вещь:
- выберите каждую строку в таблице и получите ее
lon
и lat
.
- примените запрос из этого, изменив
$lon
и $lat
на пункт 1 формы данных.
Я не знаю, как сделать это доступным. Но этот путь такой же медленный, как медленный.
Ответ 3
Что вы подразумеваете под радиусом? Вы хотите пройти на расстоянии, скажем 5 миль, и найти все строки в пределах 5 миль от строки x?
Проверьте это, если так http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx