Редактирование мультимаршрута

Open in CodeSandbox

Ссылка на редактор маршрута находится в поле editor экземпляра класса multiRouter.MultiRoute.

Для включения/выключения режима редактирования мультимаршрута используются функции start() и stop() соответственно.

При включении режима редактирования функции start() могут быть переданы параметры редактирования. Список допустимых параметров приведен в комментариях в коде.

Обратите внимание, что параметры midPointsType (тип промежуточных точек, которые могут быть добавлены при редактировании) и drawOver (запрет на добавление точек поверх объектов карты) передаются в параметрах маршрутизатора с префиксом editor.

<!DOCTYPE html>

<html>
    <head>
        <title>Редактирование мультимаршрута</title>
        <meta
            http-equiv="Content-Type"
            content="text/html; charset=utf-8"
        />
        <!--
        Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
        Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
    -->
        <script
            src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=<ваш API-ключ>"
            type="text/javascript"
        ></script>
        <script src="multiroute_edit.js" type="text/javascript"></script>
        <style>
            html,
            body,
            #map {
                width: 100%;
                height: 100%;
                padding: 0;
                margin: 0;
            }
        </style>
    </head>

    <body>
        <div id="map"></div>
    </body>
</html>
function init() {
    /**
     * Создание мультимаршрута.
     * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRoute.xml
     */
    var multiRoute = new ymaps.multiRouter.MultiRoute(
        {
            referencePoints: ["Москва", "Тверь"],
        },
        {
            // Тип промежуточных точек, которые могут быть добавлены при редактировании.
            editorMidPointsType: "via",
            // В режиме добавления новых путевых точек запрещаем ставить точки поверх объектов карты.
            editorDrawOver: false,
        }
    );

    var buttonEditor = new ymaps.control.Button({
        data: { content: "Режим редактирования" },
    });

    buttonEditor.events.add("select", function () {
        /**
         * Включение режима редактирования.
         * В качестве опций может быть передан объект с полями:
         * addWayPoints - разрешает добавление новых путевых точек при клике на карту. Значение по умолчанию: false.
         * dragWayPoints - разрешает перетаскивание уже существующих путевых точек. Значение по умолчанию: true.
         * removeWayPoints - разрешает удаление путевых точек при двойном клике по ним. Значение по умолчанию: false.
         * dragViaPoints - разрешает перетаскивание уже существующих транзитных точек. Значение по умолчанию: true.
         * removeViaPoints - разрешает удаление транзитных точек при двойном клике по ним. Значение по умолчанию: true.
         * addMidPoints - разрешает добавление промежуточных транзитных или путевых точек посредством перетаскивания маркера, появляющегося при наведении курсора мыши на активный маршрут. Тип добавляемых точек задается опцией midPointsType. Значение по умолчанию: true
         * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRoute.xml#editor
         */
        multiRoute.editor.start({
            addWayPoints: true,
            removeWayPoints: true,
        });
    });

    buttonEditor.events.add("deselect", function () {
        // Выключение режима редактирования.
        multiRoute.editor.stop();
    });

    // Создаем карту с добавленной на нее кнопкой.
    var myMap = new ymaps.Map(
        "map",
        {
            center: [56.399625, 36.7112],
            zoom: 7,
            controls: [buttonEditor],
        },
        {
            buttonMaxWidth: 300,
        }
    );

    // Добавляем мультимаршрут на карту.
    myMap.geoObjects.add(multiRoute);
}

ymaps.ready(init);