@puadi

Как выбрать точки заданные в геолокации по определенному радиусу в боте телеграм?

Есть поставленные точки в боте телеграмм ( при регистрации, клиент указывает адрес оказания услуги) пользователь отправляет свою локацию и выбирает радиус поиска, бот должен показать точки соответствующие заданному радиусу.
Везде уже искал, никак не могу найти ответ, может кто подскажет? Язык php
  • Вопрос задан
  • 221 просмотр
Решения вопроса 1
kawabanga
@kawabanga
В зависимости от кол-ва точек. Если у вас их там мало, и нет проблем просчитать, то используйте функцию расчета расстояния. К примеру примеру, у меня представлена для POINT значений функция, перепишите себе под lat long.
И далее через foreach проверяете необходимые условия.
static function distance($point1, $point2, $unit = 2 ) {
 
        if (!$point2) return null;
        if (!$point1) return null;

        $point1 = explode(',', $point1);
        $lon1 = $point1[0];
        $lat1 = $point1[1];

        $point2 = explode(',', $point2);
        $lon2 = $point2[0];
        $lat2 = $point2[1];

        if ($lon1 == 0 || $lon2 == 0) {
            return null;
        }

        $theta = $lon1 - $lon2;
        $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
        $dist = acos($dist);
        $dist = rad2deg($dist); 
        $miles = $dist * 60 * 1.1515;

        switch ($unit) {
            case(self::UNIT_KM) :
                $out = $miles * 1.609344;
                break;
            case(self::UNIT_MI) :
                $out = $miles;
                break;
            case(self::UNIT_NA) :
                $out = $miles * 0.8684;
                break;
        }
        return $out;
    }


Если же у вас через базу, то гуглите gis функции для вашей базы. там еще элементарнее, вплоть до радиуса.

Так же можете грубо обрезать lat/lng, чтобы показать необходимые точки, обычным вычитанием. будет грубо, но иногда этого хватает для задачи.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы