Как рассчитать расстояние в laravel используя lat long - PullRequest
0 голосов
/ 22 мая 2018

Как я могу рассчитать расстояние в 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 ]

0 голосов
/ 22 мая 2018

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

0 голосов
/ 22 мая 2018

Если у вас есть значения для широты и долготы в вашей БД, то вы можете получить расстояние между ними, используя запрос SQl, как в примере ниже, используя raw 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.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...