如何使用经纬度计算 laravel 中的距离

How to Calculate Distance in laravel using lat long

如何使用 SQL 查询计算 laravel5.5 中的距离? 我的代码在下面提到。

$specialProducts = Products::select('products.id', 'products.name', 'products.product_img', 'products.slug', 'products.price','products.lat','(3959 * ACOS(COS(RADIANS($lat))* COS(RADIANS(22.2765097))* COS(RADIANS(70.792523) - RADIANS(70.7583265))+ SIN(RADIANS(22.2897874))* SIN(RADIANS(22.2765097)))) AS distance')
            ->join('subcategories', 'subcategories.id', '=', 'products.sub_category_id')
            ->join('categories', 'categories.id', '=', 'subcategories.category_id')
            ->join('store', 'store.id', '=', 'products.store_id')
            ->where('products.status', 1)
            ->where('products.special', 1)

            ->orderBy('products.created_at', 'DESC')
            ->get();

如果您的数据库中有纬度和经度的值,那么您可以使用 SQl 查询获取它们之间的距离,如下例中使用原始 SQL 和 DB:raw().

$lat = 41.118491 // user's latitude
$lng = 25.404509 // user's longitude

SELECT *, 
( 6371 * acos( cos( radians($lat) ) 
* cos( radians( latitude ) ) 
* cos( radians( longitude ) - radians($lng) ) + sin( radians($lat) ) 
* sin( radians( latitude ) ) ) ) 
AS calculated_distance 
FROM settings as T 
HAVING calculated_distance <= (SELECT distance FROM settings WHERE sid=T.sid) 
ORDER BY distance_calc

如果您想获得以英里而不是公里为单位的距离,请将 6371 替换为 3959。

计算过程可能需要很长时间,所以您可能希望缓存结果以备下次使用。

最好用 php 代替 mysql。在这里检查我的回复。