R
R
rasul2662021-06-21 16:14:41
JavaScript
rasul266, 2021-06-21 16:14:41

To calculate the cost of delivery, I use the ready-made Yandex map api. How to cancel building a route if the delivery address is more than 50 km away?

It is necessary that in general the route on the map is not built if the address is further than 50 km.

ymaps.ready(init);

        function init() {
            // Стоимость за километр.
            var DELIVERY_TARIFF = 400,
                // Минимальная стоимость.
                MINIMUM_COST = 2400,

                SUMM = 0,
                myMap = new ymaps.Map('map1',{
                    center: [55.189660, 36.650437],
                    zoom: 11,
                    controls: []
                }),
                // Создадим панель маршрутизации.
                routePanelControl = new ymaps.control.RoutePanel({
                    options: {
                        // Добавим заголовок панели.
                        showHeader: true,
                        title: 'Расчет стоимости доставки',
                        maxWidth: '300px',
                        autofocus:true,
                        radius:50
                    }

                }),
                zoomControl = new ymaps.control.ZoomControl({
                    options: {
                        size: 'small',
                        float: 'none',
                        position: {
                            bottom: 145,
                            right: 5
                        }
                    }
                });
            // Пользователь сможет построить только автомобильный маршрут.
            routePanelControl.routePanel.options.set({
                types: {auto: true},

            });

            // Если вы хотите задать неизменяемую точку "откуда", раскомментируйте код ниже.
            routePanelControl.routePanel.state.set({
                fromEnabled: false,
                from: ' Лермонтова 16А'

            });

            myMap.controls.add(routePanelControl).add(zoomControl);
            // Получим ссылку на маршрут.
            routePanelControl.routePanel.getRouteAsync().then(function (route) {

                // Зададим максимально допустимое число маршрутов, возвращаемых мультимаршрутизатором.
                route.model.setParams({results: 1}, true);

                // Повесим обработчик на событие построения маршрута.
                route.model.events.add('requestsuccess', function (event) {

                    var activeRoute = route.getActiveRoute();

                    if (activeRoute) {
                 
                        // Получим протяженность маршрута.
                        var length = route.getActiveRoute().properties.get("distance"),
                            // Вычислим стоимость доставки.
                            price = calculate(Math.round(length.value / 1000)),

                            // Создадим макет содержимого балуна маршрута.

                            balloonContentLayout = ymaps.templateLayoutFactory.createClass(
                                '<span>Расстояние от завода: ' + length.text + '.</span><br/>' +
                                '<span style="font-weight: bold; font-style: italic">'+price+'</span>');

                        // Зададим этот макет для содержимого балуна.
                        route.options.set('routeBalloonContentLayout', balloonContentLayout);
                        // Откроем балун.
                        activeRoute.balloon.open();

                        var adr = routePanelControl.routePanel.state.get("to");
                        var myCoordsfrom = [adr];
                        var myGeocoder = ymaps.geocode(myCoordsfrom);
                        myGeocoder.then(
                            function (res) {
                                var nearest = res.geoObjects.get(0);
                                var name = nearest.properties.get('text');
                                document.querySelector('#address').value = name;
                            },
                            function (err) {
                                alert('Ошибка');
                            }
                        );
                    }
                });

            });
        }

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question