---
metadata:
  - name: generator
    content: Diplodoc Platform v5.39.1
alternate:
  - https://yandex.com.tr/dev/jsapi-v2-1/doc/en/v2-1/examples/cases/deliveryCalculator.md
  - https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/v2-1/examples/cases/deliveryCalculator.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com.tr/dev/jsapi-v2-1/doc/ru/llms.txt

# Расчёт стоимости доставки

<iframe id="LIVE-EXAMPLE" style="width:100%;height: 400px;border-radius: 8px;border: 1px solid rgba(92, 94, 102, 0.14);" frameBorder="0" src="https://yastatic.net/s3/front-maps-static/maps-front-jsapi-v2-1/examples/2/out/s3-cases/ru/deliveryCalculator/index.html" allow="fullscreen"></iframe>

<a target="_blank" rel="noopener noreferrer" style="display: inline-block;margin-top: 10px;cursor: pointer;border-radius: 4px;padding: 9px 12px;background: #151515;color: white;text-decoration: none;font-weight: 500" href="https://codesandbox.io/p/sandbox/w2k9w6?file=index.html">Open in CodeSandbox</a>

<div id="references">
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/ready">ready</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/Map">Map</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/map.GeoObjects">map.GeoObjects</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/control.ZoomControl">control.ZoomControl</a>,
    <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/control.RoutePanel">control.RoutePanel</a>
</div>
<p>
Данный пример показывает, как можно автоматически строить маршрут и рассчитывать стоимость поездки или доставки. Если кликнуть в любое место на карте или вбить нужный адрес в соответствующих полях панели маршрутизации, то на карте отобразится маршрут. В балун маршрута добавится информация о стоимости поездки (доставки).
</p>
<p>
    Чтобы отметить начальную и конечную точки, достаточно кликнуть в нужных местах на карте либо ввести адреса в соответствующих полях панели маршрутизации.
</p>
<p>
    При клике на метке начальной точки откроется балун с информацией о маршруте и стоимости доставки.
</p>

{% list tabs %}

-   index.html

    ```html
    <!DOCTYPE html>
    <html>
        <head>
            <title>Расчет стоимости доставки</title>
            <meta
                http-equiv="Content-Type"
                content="text/html; charset=utf-8"
            />
            <!--
            Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
            Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
        -->
            
            
            
        </head>
        <body>
            <div id="map"></div>
        </body>
    </html>
    ```

-   deliveryCalculator.js

    ```js
    ymaps.ready(init);

    function init() {
        // Стоимость за километр.
        var DELIVERY_TARIFF = 20,
            // Минимальная стоимость.
            MINIMUM_COST = 500,
            myMap = new ymaps.Map("map", {
                center: [60.906882, 30.067233],
                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 },
        });

        // Если вы хотите задать неизменяемую точку "откуда", раскомментируйте код ниже.
        /*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();
                }
            });
        });
        // Функция, вычисляющая стоимость доставки.
        function calculate(routeLength) {
            return Math.max(routeLength * DELIVERY_TARIFF, MINIMUM_COST);
        }
    }
    ```

{% endlist %}
