Определите, находится ли одна координата в радиусе другой

StackOverflow https://stackoverflow.com/questions/1896213

Вопрос

Допустим, у меня есть таблица строк, содержащих координаты.

Каков был бы наилучший способ извлечь только те строки координат, которые находятся в радиусе другой координаты?

Чтобы упростить свой вопрос, я привожу следующий пример:

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 - точки строки примера.

значит, вы могли бы сделать такую вещь:

  1. выделите каждую строку в таблице и получите ее lon и lat.
  2. применить запрос из это, меняющий $lon и $lat к пункту 1 формы данных.

Я не знаю, как сделать это в access.Но этот путь столь же прост, сколь и медленен.

Что значит в радиусе?Хотите пройти расстояние, скажем, 5 миль, и найти все строки в пределах 5 миль от строки x?

Проверьте это, если так http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top