在laravel中使用谷歌地图和mysql进行radius搜索

在laravel中使用谷歌地图和mysql进行radius搜索,mysql,laravel,laravel-5.2,Mysql,Laravel,Laravel 5.2,如何在laravel controller中编写此查询 SELECT *, ACOS( SIN( RADIANS( lat ) ) * SIN( RADIANS( $lat ) ) + COS( RADIANS( lat ) ) * COS( RADIANS( $lat )) * COS( RADIANS( lon ) - RADIANS( $long )) ) * 6380 AS distance FROM places WHERE ACOS( SIN( RAD

如何在laravel controller中编写此查询

SELECT *, ACOS( SIN( RADIANS( lat ) ) * SIN( RADIANS( $lat ) ) + 
       COS( RADIANS( lat ) ) * COS( RADIANS( $lat )) * COS( RADIANS( lon ) -
       RADIANS( $long )) ) * 6380 AS distance 
FROM places
WHERE ACOS( SIN( RADIANS( lat ) ) * SIN( RADIANS( $lat ) ) + 
  COS( RADIANS( lat ) ) * COS( RADIANS( $lat )) * COS( RADIANS( lon ) - 
  RADIANS( $long )) ) * 6380 < 10 
ORDER BY distance
10是以公里为单位的半径 $lat和$long是中心还是圆环
lat和lon是属性,如果您的表

只是在这里实现哈弗森公式。他是一个快速的范围,你可以附加到模型

public function scopeCloseTo($query, $location, $radius = 25)
{

    /**
     * In order for this to work correctly, you need a $location object
     * with a ->latitude and ->longitude.
     */
    $haversine = "(6371 * acos(cos(radians($location->latitude)) * cos(radians(latitude)) * cos(radians(longitude) - radians($location->longitude)) + sin(radians($location->latitude)) * sin(radians(latitude))))";
    return $query
        ->select(['comma','separated','list','of','your','columns'])
        ->selectRaw("{$haversine} AS distance")
        ->whereRaw("{$haversine} < ?", [$radius]);
}
最后,调用它:

$hairdressers = Hairdresser::closeTo($location, 10);

这将找到距离您$location 10公里内的所有理发师。

这是我的函数公共函数范围,靠近$query、$lat、$lon、$radius{$haversine=ACOS SIN RADIANS lat*SIN RADIANS$lat+COS RADIANS lat*COS RADIANS$lat*COS RADIANS lon-RADIANS$lon*6380;return$query->join'profiles'、'users.id'、'='、'profiles.user_id'->选择['users.name'、'users.email'、'profiles.*]->selectRaw{$haversine}作为距离->whereRaw{$haversine}<?,[$radius];}这没有给我任何结果。我做错了什么。laravel 5.2中存在whereraw和selectraw吗?我的表名是places。我的模型名是place。它的属性是lat和lon@JunaidMasood这些方法肯定存在于Laravel 5.2中,我们选择了上面使用whereRaw和selectRaw的方法,以避免与分页发生冲突ion和其他工厂不作为旁注开箱即用-这将在Laravel 5.3中修复。您的haversine实现与我的不同,但是,您的表名lat和lon不正确。它应该是place.lat和place.lon,并且您还应该在->select中选择这些列[…,place.lon,place.lat,….users.name,users.email这里没有返回任何东西,这是我使用它的方式$haversine=6371*acoscradians$lat*cosradians\u lat*cosradians\u long-radians$long+sinradians$lat*sinradians\u lat;return$query->选择'email'->选择raw{$haversine}作为距离->whereRaw{$haversine}<,[$radius];我的表名是drivers,列是c_lat,c_long@Sama不要替换实际的单词latitude或longitude。只替换$location->latitude和`$location->longitude`
$hairdressers = Hairdresser::closeTo($location, 10);