📅  最后修改于: 2023-12-03 15:37:23.256000             🧑  作者: Mango
在 Laravel 中,我们可以轻松地从经度和纬度获取附近的地点。这可以作为一个非常有用的功能,例如为了在一个商场的应用程序中获取附近的商店,或者为了在一个电话簿的应用程序中找到附近的人。
以下是实现此功能的步骤:
scopeNearby
我们将在模型中定义一个 scopeNearby
,它将接受一个经纬度和半径作为参数,并返回一个排序的集合,其中最靠近给定位置的项目将排在最前面。
public function scopeNearby($query, $lat, $lng, $radius = 25)
{
$haversine = "(6371 * acos(cos(radians($lat))
* cos(radians(latitude))
* cos(radians(longitude) - radians($lng))
+ sin(radians($lat))
* sin(radians(latitude))))";
return $query->select('*')
->selectRaw("{$haversine} AS distance")
->whereRaw("{$haversine} < ?", [$radius])
->orderBy('distance', 'ASC');
}
该函数使用 Haversine 公式计算经纬度之间的距离。 $lat
和 $lng
是查询的中心点, $radius
是半径,默认为25 公里。 函数返回一个包括所需附近地点的集合。
假设我们有一张名为 locations
的表,其中包括 latitude
和 longitude
列。 以下是我们如何使用 scopeNearby
从该表中获取附近地点的示例代码。
$locations = Location::nearby(51.509865, -0.118092)->get();
这将返回一个包括距离给定经纬度最近的位置的集合。 如果我们想要更改默认半径,只需要将半径作为第三个参数传入 nearby
函数。
现在我们知道了如何在 Laravel 中从经度和纬度获取附近。 该功能对于需要与位置相关的应用程序非常有用,例如商店查找应用程序,电影院查找应用程序,电话簿查找应用程序等等。
以上就是完整的介绍。