Поиск ближайщих точек гаолокации
Есть БД с отелями и у каждого отеля есть геолокация. Когда пользователь отправляет свою геолоакцию нужно найти ближайшие отели в радиусе примерно 1 км. Можно ли сделать это с функционалом языка? Например php or python
Ответы (2 шт):
Автор решения: Ivan
→ Ссылка
Можно. Примерно такую же задачу пришлось решать очень давно Вот пример запроса на Yii1
Yii::app()->db->createCommand()
->select('geo_blocks.location, SQRT(POW((:lon - longitude), 2) + POW((:lat - latitude),2)) as S')
->from('geo_blocks')
->where('geo_blocks.location IN (' .$strCitiesId. ')')
->having('S < (:distance/111)')
->order('S ASC')
->bindValues(array(
':lon' => $items['longitude'], //координаты от пользователя
':lat' => $items['latitude'],//координаты от пользователя
':distance' => 30, //расстояние в км
))
->queryRow();
Автор решения: bellator001
→ Ссылка
Нашел вот такой вариант.
$radius = 1/111; //В системе координат один градус равен 111 км
$lat = '41.324311';
$long = '43.535852';
SELECT * FROM `markers` WHERE
SUBSTRING_INDEX(`point`, ',', 1)
BETWEEN $lat - $radius
AND $lat + $radius
AND SUBSTRING_INDEX(`point`, ',', -1)
BETWEEN $long - $radius
AND $long + $radius
ORDER BY `name`