📌  相关文章
📜  在 laravel 中从经度和纬度获取附近 - PHP(1)

📅  最后修改于: 2023-12-03 15:37:23.256000             🧑  作者: Mango

在 Laravel 中从经度和纬度获取附近

在 Laravel 中,我们可以轻松地从经度和纬度获取附近的地点。这可以作为一个非常有用的功能,例如为了在一个商场的应用程序中获取附近的商店,或者为了在一个电话簿的应用程序中找到附近的人。

步骤

以下是实现此功能的步骤:

步骤1:在模型中定义 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 公里。 函数返回一个包括所需附近地点的集合。

步骤2:获取附近地点

假设我们有一张名为 locations 的表,其中包括 latitudelongitude 列。 以下是我们如何使用 scopeNearby 从该表中获取附近地点的示例代码。

$locations = Location::nearby(51.509865, -0.118092)->get();

这将返回一个包括距离给定经纬度最近的位置的集合。 如果我们想要更改默认半径,只需要将半径作为第三个参数传入 nearby 函数。

结论

现在我们知道了如何在 Laravel 中从经度和纬度获取附近。 该功能对于需要与位置相关的应用程序非常有用,例如商店查找应用程序,电影院查找应用程序,电话簿查找应用程序等等。

以上就是完整的介绍。