Могу ли я MySQL выбрать, где координаты строки <х миль от целевых координат? (поиск близости mysql) - PullRequest
1 голос
/ 24 июня 2010

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

Я ищу, чтобы выбрать строки из БД, которые находятся в пределах xмили цели.

пример столбцов таблицы:

| city_name(varchar) | lat(decimal) | lon(decimal) |

эффект запроса, который я ищу (используя php или mysql)

$target_lat = ;
$target_lon = ;
"SELECT table.city_name WHERE (table.lat,table.lon) LESS THAN 20 MILES FROM ($target_lat,$target_lon")

Очевидно, я не ожидаю, что запрос займет эту структуру!(я никогда не использовал Pi и т. д. в mysql ...)

Ответы [ 4 ]

3 голосов
/ 24 июня 2010

Похоже, вы ищете геопространственный пакет для mySql.Здесь есть функция, которая позволяет проверять расстояние между двумя точками широты и долготы.Просто помните, что обычный расчет расстояния не будет работать с широтой / долготой из-за кривизны Земли.=)

http://forge.mysql.com/wiki/GIS_Functions

1 голос
/ 25 июня 2010

Я нашел это блестящее и действительно простое для понимания

http://code.google.com/apis/maps/articles/phpsqlsearch.html

0 голосов
/ 24 июня 2010

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

C^2 = A^2 + B^2
C = SQRT(A^2 + B^2)

В этом случае длины других сторон определяются разницей ваших значений lat и long. На коротких расстояниях это даст вам довольно хорошее приближение. Однако это по-прежнему не дает вам миль , что является гораздо более сложным преобразованием, поскольку нет фиксированной связи между широтой / долготой и милями. Вместо этого расстояние между долготами изменяется как функция широты.

0 голосов
/ 24 июня 2010

вы найдете много фрагментов кода в Google, которые ищут "поиск по радиусу mysql"

они слишком длинные для копирования здесь.

Редактировать: http://spinczyk.net/blog/2009/10/04/radius-search-with-google-maps-and-mysql/

...