public function nearby()
{
$user = auth()->user();
$lat = auth()->user()->latitude;
$lon = auth()->user()->longitude;
$radius = 3; // km => converted to meter
$angle_radius = (float)$radius / ( 111 * cos( (float)$lat ) ); // Every lat|lon degree° is ~ 111Km
$min_lat = (float)$lat - (float)$angle_radius;
$max_lat = (float)$lat + (float)$angle_radius;
$min_lon = (float)$lon - (float)$angle_radius;
$max_lon = (float)$lon + (float)$angle_radius;
$persons = User::where('status', STATUS::ACTIVE)
->where('id', '!=', $user->id)
->whereBetween('latitude', [$min_lat, $max_lat])
->whereBetween('longitude', [$min_lon, $max_lon])
->get();
$persons->each(function($person) {
/* auth user coordinate vs user's coordinates */
$point1 = array('lat' => auth()->user()->latitude, 'long' => auth()->user()->longitude);
$point2 = array('lat' => $person->latitude, 'long' => $person->longitude);
$distance = $person->getDistanceBetweenPoints($point1['lat'], $point1['long'], $point2['lat'], $point2['long']);
$person['distance'] = $distance;
});
return $persons;
}
Я ищу пользователей в радиусе 3 км, основываясь на длинном / латах пользователя.Я сравниваю auth long / lat с соседним пользователем long / lat.Он возвращает коллекции пользователя с расстоянием.
Теперь у меня проблемы с сортировкой по расстоянию.
Если я добавляю orderBy ('distance', 'desc'), конечно, это приведет к ошибке, потому что у меня нет столбца расстояния в моей БД.
Это способ сортировки и разбивки на страницы.