Как рассчитать расстояние между двумя точками широты и долготы? - PullRequest
1 голос
/ 24 февраля 2020

Прежде всего, при регистрации по футзалу моя система запрашивает местоположение и сохраняет широту и долготу этого футзала в базе данных. И когда пользователь посещает мою систему, он запрашивает местоположение пользователя и сохраняет широту и долготу в сеансе.

с помощью этого футзала и широты и местоположения пользователя, я хочу вычислить расстояние между ними в КМ и показать в целевая страница.

Я пробовал

$lat = $request->session()->get("latitude");
$long = $request->session()->get("longitude");
$data['futsals'] = DB::table("users")
            ->where('is_futsal',1)
            ->select("*",
            DB::raw("6371  * acos(cos(radians(".$lat."))
            * cos(radians(users.latitude))
            * cos(radians(users.longitude) - radians(".$long."))
            + sin(radians(".$lat."))
            * sin(radians(users.latitude))) AS distance"))
            ->get();

Это дает мне расстояние, но когда я хочу показать расстояние между пользователем и мини-футболом, расстояние меняется. Я зарегистрировал футзал и авторизовался как пользователь из того же места. что означает, что расстояние между ними должно быть 0, но иногда оно дает мне 0, и это дает мне 1,9 км или 3,5 км

1 Ответ

0 голосов
/ 24 февраля 2020

Попробуйте это демо

$latitudeFrom = '22.574864';
$longitudeFrom = '88.437915';

$latitudeTo = '22.568662';
$longitudeTo = '88.431918';

//Calculate distance from latitude and longitude
$theta = $longitudeFrom - $longitudeTo;
$dist = sin(deg2rad($latitudeFrom)) * sin(deg2rad($latitudeTo)) +  cos(deg2rad($latitudeFrom)) * cos(deg2rad($latitudeTo)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;

$distance = ($miles * 1.609344).' km';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...