如何从给定的纬度/经度搜索用户,在laravel中搜索3公里



我知道有人问过这种类型的问题,但没有得到任何正确的解决方案。

我随身携带我的纬度/经度。我的数据库中还有纬度/经度的集合。我想做的是,当我输入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);
}

要计算范围,需要对计算范围的点进行一些计算。

$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)));

现在,您可以在查询中使用这些最小和最大Lat-long来确定半径中的用户

最新更新