Как искать пользователей с заданной широты / долготы с точностью до 3 км в laravel - PullRequest
0 голосов
/ 07 августа 2020

Я знаю, что такие вопросы задают, но не получают надлежащего решения.

У меня с собой моя широта / долгота. У меня также есть коллекция широты / долготы в моей базе данных. Я пытаюсь сделать следующее: когда я ввожу distance = 3, он покажет всех пользователей в пределах 3 километров от базы данных.

Вот мой код:

public function nearbyResults(Request $request)
    {
        $user_id = request('user_id');
        $latitude = request('latitude');
        $longitude = request('longitude');
        $distance = 3;

        $upper_latitude = $latitude + $distance;
        $lower_latitude = $latitude - $distance;
        $upper_longitude = $longitude + $distance;
        $lower_longitude = $longitude - $distance;

        $drivers = UsersDetail::whereBetween('latitude', [$lower_latitude, $upper_latitude])->whereBetween('longitude', [$lower_longitude, $upper_longitude])->get();

        return Response()->json([
            'status' => 'success',
            'data' => $drivers
        ], 200);
    }

1 Ответ

0 голосов
/ 07 августа 2020

Чтобы вычислить диапазон, вам нужно выполнить некоторые вычисления в точке, откуда вы рассчитываете диапазон.

$lat = $_GET['lat']; // latitude of centre of bounding circle in degrees 
$lon = $_GET['lon']; // longitude of centre of bounding circle in degrees 
$rad = $_GET['rad']; // radius of bounding circle in kilometers 
$R = 6371; // earth's mean radius, km // first-cut bounding box (in degrees) 
$maxLat = $lat + rad2deg($rad/$R); 
$minLat = $lat - rad2deg($rad/$R); 
$maxLon = $lon + rad2deg(asin($rad/$R) / cos(deg2rad($lat))); 
$minLon = $lon - rad2deg(asin($rad/$R) / cos(deg2rad($lat)));

Теперь вы можете использовать эти минимальные и максимальные широты в своем запросе для определения пользователей в радиус

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...