V
V
Vasily2020-12-23 19:46:52
Yandex maps
Vasily, 2020-12-23 19:46:52

How to add a zone to Yandex Maps api?

Hello! Please tell me how to add a zone to the Yandex map, so that if the user selects an address in the city, then the tariff is 5, and if outside the Ring Road (St. Petersburg), then 60 rubles per km are added to the base tariff (5,000 rubles)?

js code

ymaps.ready(init);

function init() {
  
    // Стоимость за километр.
    var DELIVERY_TARIFF = 60,
    // Минимальная стоимость.
        MINIMUM_COST = 5000,
        myMap = new ymaps.Map('map', {
            center: [59.939095, 30.315868],
            zoom: 9,
            controls: []
        }),
    
    
    
    // Создадим панель маршрутизации.
        routePanelControl = new ymaps.control.RoutePanel({
            options: {
                // Добавим заголовок панели.
                showHeader: true,
                title: 'Расчёт доставки'
            }
        }),
        zoomControl = new ymaps.control.ZoomControl({
            options: {
                size: 'small',
                float: 'none',
                position: {
                    bottom: 145,
                    right: 5310
                }
            }
        });
 
    // Пользователь сможет построить только автомобильный маршрут.
    routePanelControl.routePanel.options.set({
        types: {auto: true}
    });

     routePanelControl.routePanel.state.set({
        fromEnabled: false,
        from: 'Санкт-Петербург, Рабочая улица, 14к1'
     });

    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();
            }
        });
 
    });

    // Функция, вычисляющая стоимость доставки.
    function calculate(routeLength) {
        return Math.max(routeLength * DELIVERY_TARIFF + MINIMUM_COST);
    }
}

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