【问题标题】:find nearest location using lat and long in laravel query bulider [duplicate]在laravel查询构建器中使用lat和long查找最近的位置[重复]
【发布时间】:2020-06-15 17:58:26
【问题描述】:
$lat = isset($request->lat) ? $request->lat : '';
$lng = isset($request->lng) ? $request->lng : '';


$query = Vehicle::query();
$query->whereHas('vendor', function($q) use($lat, $lng){
   $q->where('vendor_status', 1);
   if((isset($lat) && $lat !== '') && (isset($lng) && $lng !== '')){
     //vendor table have two column like vendor_lat and vendor_lng
   }
 });

我想找到距离拉特长 50 公里最近的供应商。

【问题讨论】:

标签: mysql sql laravel laravel-query-builder


【解决方案1】:

分别考虑两个 lat long 18.5789 和 73.7707,vechiles 表中的经度和经度列定义如下,半径为 50 公里

SELECT id, ( 6371 * acos( cos( radians(18.5789) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(73.7707) ) + sin( radians(18.5789) ) * sin( radians( latitude ) ) ) ) AS distance FROM vechiles HAVING distance < 50 ORDER BY distance ;

note 6371 是以公里为单位的地球半径,使用 3,963 来获得以英里为单位的距离。

上面的代码可以写成

 Vehicle::select(DB::raw("id, ( 3959 * acos( cos( radians('$latitude') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('$longitude') ) + sin( radians('$latitude') ) * sin( radians( latitude ) ) ) ) AS distance"))->havingRaw('distance < 50')->orderBy('distance')
        ->get();         

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2013-09-27
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多