Скажем, у меня есть Таблица строк, которые содержат координаты.
Каков был бы лучший способ вытянуть только строки координат, которые находятся в радиусе другой координаты?
Для упрощения моего вопроса я даю следующий пример:
Table like:
Columns: Latitude, Longitude.
Row1: 23.44444 24.55555
Row2: 32.44444 28.22222
Row3: 35.11111 32.12345
В SQL-операторе, как я получаю строки координат, которые находятся в радиусе Row3, например?
В этом сообщении показано, как это сделать в 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
выглядит так, как будто формула расстояния выглядит так:
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
в точку 1 формы данных Я не знаю, как это сделать при доступе. Но этот путь и медленный, и прямой.
Что вы имеете в виду, говоря в радиусе? Вы хотите проехать на расстоянии, скажем, 5 миль, и найти все ряды в пределах 5 миль от ряда x?
Проверьте это, если да http://www.microsoft.com/sqlserver/2008/en /us/spatial-data.aspx