laravel 如何通过 long 和 lat 找到附近的地方

Posted

技术标签:

【中文标题】laravel 如何通过 long 和 lat 找到附近的地方【英文标题】:how can i find the near places by long and lat by laravel 【发布时间】: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)

【问题讨论】:

显示你的模型图 Haversine and 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]

以上是关于laravel 如何通过 long 和 lat 找到附近的地方的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Solrj注释索引Lat / Long

如何通过 lat long 进行有效的多搜索点

如何在AppDelegate获取位置,并将lat和long传递给另一个VC并加载webview

Android 如何获取Lat() 和获取Long()

如何在 KML URL 上传递多个 Lat 和 Long?

根据 lat 和 long 得到错误的排序距离