如何用lat long计算laravel中的距离

时间:2018-05-22 10:57:23

标签: laravel laravel-5.5

如何使用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();

2 个答案:

答案 0 :(得分:1)

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

{{1}}

如果您希望以英里而不是公里为距离,请将6371替换为3959。

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

答案 1 :(得分:0)

最好用php代替mysql。在这里查看我的回复。 https://stackoverflow.com/a/50040011/1262144