R
R
rasul2662021-06-20 01:08:31
JavaScript
rasul266, 2021-06-20 01:08:31

To calculate the cost of delivery of concrete, I use api Yandex maps. How to cancel building a route if you have specified an address further than 50 km from the factory?

I use this script, you need to make sure that the route is not built at all if the address is further than 50 km

<script>
        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
                    }
                }),
                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 () {

                    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('Ошибка');
                            }
                        );
                    }
                });

            });

           
        }

    </script>

Answer the question

In order to leave comments, you need to log in

1 answer(s)
P
Pavel, 2021-06-20
@Asokr

You have a distance, I don’t know what it is measured in, but something like a simple condition:

var length = route.getActiveRoute().properties.get("distance");

if (length.value > 50000) {
balloonContentLayout = ymaps.templateLayoutFactory.createClass(
                                '<span>Вы находитесь слишком далеко от завода- Вам придется приехать</span><br/>');
} else {
balloonContentLayout = ymaps.templateLayoutFactory.createClass(
                                '<span>Расстояние от завода: ' + length.text + '.</span><br/>' +
                                '<span style="font-weight: bold; font-style: italic">'+price+'</span>');
}

Well, then exit the function somewhere so that the route is not built ...

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question