ymaps.ready(init); function init() { // Стоимость за километр. var DELIVERY_TARIFF = 108, // Минимальная стоимость. MINIMUM_COST = 1500, myMap = new ymaps.Map('map', { center: [59.933243, 30.344218], 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: 10 } } }); // Пользователь сможет построить только автомобильный маршрут. routePanelControl.routePanel.options.set({ types: {auto: true} }); 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( 'Расстояние: ' + length.text + '.
' + 'Стоимость поездки составит примерно: ' + price + ' р.'); // Зададим этот макет для содержимого балуна. route.options.set('routeBalloonContentLayout', balloonContentLayout); // Откроем балун. activeRoute.balloon.open(); } }); }); // Функция, вычисляющая стоимость доставки. function calculate(routeLength) { return Math.max(routeLength * DELIVERY_TARIFF, MINIMUM_COST); } }