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 找到附近的地方的主要内容,如果未能解决你的问题,请参考以下文章