Поиск ближайщих точек гаолокации

Есть БД с отелями и у каждого отеля есть геолокация. Когда пользователь отправляет свою геолоакцию нужно найти ближайшие отели в радиусе примерно 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`
→ Ссылка