Как рассчитать расстояние в laravel с помощью lat long

bizz website спросил: 28 апреля 2018 в 09:17 в: laravel

Как я могу рассчитать расстояние в laravel5.5 с SQL-запросом? Мой код упоминается ниже.

$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 ответа

Есть решение
katsarov ответил: 28 апреля 2018 в 10:05

Лучше сделать это с помощью php вместо mysql. Проверьте мой ответ здесь. https://stackoverflow.com/a/50040011/1262144

suzan ответил: 28 апреля 2018 в 09:45

Если у вас есть значения для широты и долготы в вашей БД, вы можете получить расстояние между ними, используя запрос SQl, как в приведенном ниже примере, используя необработанный SQL с DB: raw ().

$lat = 41.118491 // user's latitude
$lng = 25.404509 // user's longitudeSELECT *, 
( 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.

Процесс вычисления может занять много времени, поэтому вам может понадобиться кэшировать результат для следующее использование.