Выборка точек в радиусе 3 км. от координат в MySQL
Есть таблица:
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| lat | double | NO | | NULL | |
| lon | double | NO | | NULL | |
+-------+---------+------+-----+---------+----------------+
Помогите сделать выборку данных, в радиусе 3км. от определенных координат.
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
поскольку расстояние не очень велико по сравнению с радиусом Земли, то можно использовать упрощённую формулу (вам же не с точностью до миллиметра?):
R = 6371
x = (lon2 - lon1) * cos((lat2 + lat1) / 2)
y = (lat2 - lat1)
d = R * sqrt(x * x + y * y)
http://www.movable-type.co.uk/scripts/latlong.html
сравнивать точнее квадраты, чем корни, поэтому
d^2 = R^2 * (x * x + y * y)
значит нужна такая формула для выборки
40589641 * ((lon_s - lon) * cos((lat_s + lat) / 2) * (lon_s - lon) * cos((lat_s + lat) / 2) + (lat_s - lat) * (lat_s - lat)) < 9
т.е. запрос будет типа такого:
SELECT
*
FROM
table
where
40589641 * ((@lon_s - lon) * COS((@lat_s + lat) / 2) * (@lon_s - lon) * COS((@lat_s + lat) / 2) + (lat_s - lat) * (lat_s - lat)) < 9