@inviziblll

Как в Битрикс можно реализовать расчет стоимости доставки в зависимости от расстояния от интернет-магазина?

Есть интернет-магазин по доставке еды, при оформлении заказа покупатель указывает адрес и район куда нужно доставить товары. Необходимо сделать возможность чтобы стоимость доставки зависела от расстояния от магазина до покупателе и вычислялась когда покупатель вводит свои данные в поле адрес.

Как в Битрикс можно реализовать расчет стоимости доставки в зависимости от расстояния от интернет-магазина?

Возможно есть есть модуль, который позволяет рассчитывать стоимость доставки в зависимости от расстояния. Например в административном разделе указывается адрес интернет-магазина и далее указываются расстояния в километрах и стоимость доставки в зависимости от расстояния. Если до 1 км то 50 руб, если от 1 км до 5 км - 100 и больше 5 - 250 км руб.
  • Вопрос задан
  • 435 просмотров
Пригласить эксперта
Ответы на вопрос 1
@anton99zel Куратор тега 1С-Битрикс
29а класс средней школы №7
Вариант более точный, по маршруту
Яндекс.Карты API
5f649208bd125374415469.jpeg
Второй вариант - по радиусу:
// Радиус земли
define('EARTH_RADIUS', 6372795);
 
/*
* Расстояние между двумя точками
* $φA, $λA - широта, долгота 1-й точки,
* $φB, $λB - широта, долгота 2-й точки
* Написано по мотивам http://gis-lab.info/qa/great-circles.html
* Михаил Кобзарев <mikhail@kobzarev.com>
*
*/
function calculateTheDistance ($φA, $λA, $φB, $λB) {
 
// перевести координаты в радианы
$lat1 = $φA * M_PI / 180;
$lat2 = $φB * M_PI / 180;
$long1 = $λA * M_PI / 180;
$long2 = $λB * M_PI / 180;
 
// косинусы и синусы широт и разницы долгот
$cl1 = cos($lat1);
$cl2 = cos($lat2);
$sl1 = sin($lat1);
$sl2 = sin($lat2);
$delta = $long2 - $long1;
$cdelta = cos($delta);
$sdelta = sin($delta);
 
// вычисления длины большого круга
$y = sqrt(pow($cl2 * $sdelta, 2) + pow($cl1 * $sl2 - $sl1 * $cl2 * $cdelta, 2));
$x = $sl1 * $sl2 + $cl1 * $cl2 * $cdelta;
 
//
$ad = atan2($y, $x);
$dist = $ad * EARTH_RADIUS;
 
return $dist;
}
$lat1 = 77.1539;
$long1 = -139.398;
$lat2 = -77.1804;
$long2 = -139.55;
 
echo calculateTheDistance($lat1, $long1, $lat2, $long2) . " метров";
// Вернет "17166029 метров"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы