【问题标题】:how can i find the near places by long and lat by laravellaravel 如何通过 long 和 lat 找到附近的地方
【发布时间】:2019-03-03 00:30:23
【问题描述】:

我的数据库:

|----|------|------|
| id | lat  | long |
|----|------|------|

当我使用这段代码时:

public function near($lat ,$lng)
{

    $cities = map::select(DB::raw('*, ( 6367 * acos( cos( radians('.$lat.') ) * cos( radians( lat ) ) * cos( radians( long ) - radians('.$lng.') ) + sin( radians('.$lat.') ) * sin( radians( lat ) ) ) ) AS distance'))
                ->where('distance', '<', 25)
                ->orderBy('distance')
                ->get();
    return response($cities);
}

它给了我错误:

SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行附近使用的正确语法,以在 'long ) - radians(5) ) + sin( radians(28) ) * sin( radians( lat ) ) ) ) AS distan' 附近(SQL: select *, ( 6367 * acos( cos( 弧度(28) ) * cos( 弧度( lat ) ) * cos( 弧度( long ) - 弧度(5) ) + sin( 弧度(28) ) * sin(弧度( lat ) ) ) ) AS 距离maps 其中distance distance asc)

【问题讨论】:

标签: laravel


【解决方案1】:

你可以使用别名来获取距离

$dist = "(6371 * acos(cos(radians($location->latitude)) 
                     * cos(radians(model.latitude)) 
                     * cos(radians(model.longitude) 
                     - radians($location->longitude)) 
                     + sin(radians($location->latitude)) 
                     * sin(radians(model.latitude))))";
     return $query
        ->select() //pick the columns you want here.
        ->selectRaw("{$dist} AS distance")
        ->whereRaw("{$dist} < 25");

【讨论】:

  • 它返回给我的距离相同:[ { "id": 2, "long": "-108.6595174215", "lat": "54.1725240238", "user_id": 37, "distance “:5078.346610130264 },{“id”:3,“long”:“37.5555555555”,“lat”:“28.2448236452”,“user_id”:181,“距离”:5078.346610130264}]
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多