如何使用经纬度计算 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。在这里检查我的回复。
如何使用 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。在这里检查我的回复。