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

# Программная работа с маршрутами
    
Мультимаршрут позволяет строить составные маршруты — маршруты по трем точкам и более. С помощью этого класса можно получать информацию о маршруте, изменять внешний вид и программно переставлять точки маршрута.

[Общие сведения](#about)

[Построение маршрута на карте](#how-to-build-route)

[Настройки маршрута](#route-settings)

[Включение режима редактирования](#how-to-enable-editing)

[Получение информации о маршруте](#route-get-info)

[Решение типовых задач](#faq)

## Общие сведения {#about}

Класс [multiRouter.MultiRoute](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.MultiRoute.md) позволяет [строить](#how-to-build-route) составные маршруты — маршруты по трем точкам и более. С помощью этого класса можно получать информацию о маршруте, изменять внешний вид и переставлять точки маршрута. [Подробнее о настройках маршрута](#route-settings)

{% include notitle [patner-code](../../_includes/router/multiRouter/partner-code-c3b2ea8eb4c3.md#map1) %}


{% note alert %}

Запросы к маршрутизации [тарифицируются](https://yandex.ru/maps-api/products/js-api#tariffs).

{% endnote %}


## Построение маршрута на карте {#how-to-build-route}

Чтобы построить маршрут с помощью класса [multiRouter.MultiRoute](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.MultiRoute.md), создайте экземпляр этого класса и добавьте его на карту:

```javascript
// Построение маршрута.
// По умолчанию строится автомобильный маршрут.
var multiRoute = new ymaps.multiRouter.MultiRoute({   
    // Точки маршрута. Точки могут быть заданы как координатами, так и адресом. 
    referencePoints: [
        'Москва, метро Смоленская',
        'Москва, метро Арбатская',
        [55.734876, 37.59308], // улица Льва Толстого.
    ]
}, {
      // Автоматически устанавливать границы карты так,
      // чтобы маршрут был виден целиком.
      boundsAutoApply: true
});

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

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% note info %}

Маршрут с большим количеством промежуточных точек может работать нестабильно. Работа маршрутизации в JS API гарантируется для 10 точек. Для более сложных маршрутов используйте [другие API](https://tech.yandex.ru/routing/).

{% endnote %}

{% endcut %}

{% note alert %}

Для точек, которые задаются в виде строки, будут отправляться дополнительные запросы в Геокодер. При этом каждая точка — это отдельный запрос. Кроме того, включение опции [reverseGeocoding](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/IMultiRouteParams.md#reverseGeocoding) также приведет к дополнительным запросам в Геокодер. Следует иметь в виду, что запросы на геокодирование [тарифицируются](https://yandex.ru/maps-api/products/js-api#tariffs).

{% endnote %}

По умолчанию точки маршрута нельзя двигать. Чтобы пользователи смогли перемещать точки, удалять их и создавать новые, необходимо [включить режим редактирования](#how-to-enable-editing).

## Настройки маршрута  {#route-settings}

Маршруту можно задать различные настройки. Например, переключить тип маршрутизации, изменить внешний вид или переставить точки местами.

Настройки могут быть заданы двумя способами: при создании маршрута через конструктор, а также через метод `setParams()`. Ниже на конкретных примерах показано, как управлять настройками маршрута.

[Выбор типа маршрутизации](#set-routing-mode)

[Построение маршрута с учетом пробок](#how-to-avoid-traffic)

[Добавление транзитных точек](#how-to-add-transit)

[Настройка внешнего вида маршрута](#how-to-set-view)

[Включение режима редактирования ](#how-to-enable-editing)

В разделе [Решение типовых задач](#faq) приведены решения других распространенных задач.

## Выбор типа маршрутизации {#set-routing-mode}

Тип маршрутизации задается в параметре [routingMode](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/IMultiRouteParams.md). Доступны следующие типы маршрутизации:
- "auto" (по умолчанию) — на автомобиле;
- "masstransit" — на общественном транспорте;
- "pedestrian" — пешеходный маршрут;
- "bicycle" — маршрут на велосипеде.

Пример:

```javascript
// Построение маршрута на общественном транспорте.

// Создание экземпляра маршрута.
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
        'метро Смоленская',
        'метро Арбатская'
    ],
    params: {
      // Тип маршрута: на общественном транспорте.
      routingMode: "masstransit"  
    }
}, {
      // Автоматически устанавливать границы карты так,
      // чтобы маршрут был виден целиком.
      boundsAutoApply: true
});

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

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

Изменить тип маршрутизации можно также после того, как маршрут был построен:

```javascript
// Второй способ изменить тип маршрутизации: через метод setParams().
multiRoute.model.setParams({
    routingMode: 'bicycle'
});
```

При изменении параметра `routingMode` маршрут будет перестроен.

## Построение маршрута с учетом пробок {#how-to-avoid-traffic}

Чтобы построить маршрут с учетом пробок, нужно задать параметр `avoidTrafficJams: true`.

```javascript
// Построение маршрута с учетом пробок.
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
        "Москва, Парк Победы",
        "Москва, Лосиный остров"
    ],
    params: {
        avoidTrafficJams: true
    }
}, {
        // Автоматически устанавливать границы карты так,
        // чтобы маршрут был виден целиком.
        boundsAutoApply: true
    });

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

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

Включить/выключить учет пробок можно также после того, как маршрут был добавлен на карту:

```javascript
// Выключение учета пробок через метод setParams().
multiRoute.model.setParams({
    avoidTrafficJams: false
});
```

При изменении параметра `avoidTrafficJams` маршрут будет перестроен.

В песочнице приведен [интерактивный пример](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_driving), в котором учет пробок включается/выключается по кнопке.

## Добавление транзитных точек {#how-to-add-transit}

[Транзитные точки](*transitpoint) задаются через параметр `viaIndexes`. Например:
```javascript
// Создание маршрута по трем точкам.
// Вторая точка будет транзитной.
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
      'метро Парк Культуры',
      'метро Смоленская',
      'метро Арбатская'
    ],
    params: {
      // Установим вторую точку маршрута ('метро Смоленская')
      // в качестве транзитной.
      viaIndexes: [1]
    }
}, {
    boundsAutoApply: true
});
// Добавление маршрута на карту.
myMap.geoObjects.add(multiRoute);
```

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

{% include notitle [patner-code](../../_includes/router/multiRouter/partner-code-c3b2ea8eb4c3.md#map2) %}


{% note info %}

Транзитные точки доступны только для автомобильных маршрутов.

{% endnote %}


## Настройка внешнего вида маршрута {#how-to-set-view}

Внешний вид маршрута можно изменить при его создании, через конструктор. Опции отображения передаются конструктору вторым аргументом:

```javascript
// Создание маршрута.
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
        [55.734470, 37.58000],
        [55.734336, 37.51218],
        [55.724102, 37.19912]
    ]
}, {
    // Внешний вид путевых точек.
    wayPointStartIconColor: "#FFFFFF",
    wayPointStartIconFillColor: "#B3B3B3",
    // Внешний вид линии активного маршрута.
    routeActiveStrokeWidth: 8,
    routeActiveStrokeStyle: 'solid',
    routeActiveStrokeColor: "#002233",
    // Внешний вид линий альтернативных маршрутов.
    routeStrokeStyle: 'dot',
    routeStrokeWidth: 3,
    boundsAutoApply: true
});
// Добавление маршрута на карту.
myMap.geoObjects.add(multiRoute);
```

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

{% include notitle [patner-code](../../_includes/router/multiRouter/partner-code-c3b2ea8eb4c3.md#map4) %}

- В песочнице можно посмотреть более подробный пример — [Настройка отображения мультимаршрута](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_view_options)[Настройка отображения мультимаршрута](https://tech.yandex.com/maps/jsbox/2.1/multiroute_view_options)[Настройка отображения мультимаршрута](https://tech.yandex.com.tr/maps/jsbox/2.1/multiroute_view_options).
- В разделе «Решение типовых задач» показано, [как изменять внешний вид маршрута при наведении на него указателя мыши](#how-to-change-view-onmouse).

## Включение режима редактирования  {#how-to-enable-editing}

При добавлении маршрута на карту режим редактирования выключен — точки маршрута являются неактивными и пользователи не могут их двигать.

Включить режим редактирования можно с помощью метода [start()](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.EditorAddon.md#event-start):

```javascript
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
        "Москва, метро Сокол",
        "Москва, метро Павелецкая"
    ]
});
// Включение режима редактирования.
multiRoute.editor.start();
// А вот так можно отключить режим редактирования.
// multiRoute.editor.stop();

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

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

{% include notitle [patner-code](../../_includes/router/multiRouter/partner-code-c3b2ea8eb4c3.md#map6) %}

## Режим редактирования с добавлением новых точек

По умолчанию режим редактирования не позволяет создавать новые точки и удалять уже существующие. Чтобы включить эту возможность, нужно указать специальные опции:

```javascript
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
        "Москва, метро Сокол",
        "Москва, метро Павелецкая"
    ]
}, {
    // Опция editorDrawOver запрещает ставить точки поверх объектов карты
    // (в режиме добавления новых точек). Это нужно для того,
    // чтобы пользователи могли создавать промежуточные
    // точки по линии маршрута.
    editorDrawOver: false,
    // Опция editorMidPointsType задает тип промежуточных точек,
    // которые будут создаваться на маршруте.
    // "via" - будут создаваться транзитные точки;
    // "way" - путевые точки.
    editorMidPointsType: "via"
});

// Включение режима редактирования и задание его настроек.
multiRoute.editor.start({
    // При включении опции addWayPoints пользователи смогут создавать
    // путевые точки по клику на карте.
    addWayPoints: true,
    // При включении опции removeWayPoints пользователи смогут удалять
    // путевые точки. 
    // Для удаления точки нужно дважды кликнуть по ней.
    removeWayPoints: true,
    // При включении опции addMidPoints пользователи смогут создавать
    // новые промежуточные точки.
    // Чтобы создать промежуточную точку, нужно кликнуть по линии маршрута и,
    // удерживая кнопку, переместить точку в нужную позицию на карте.
    // Тип промежуточной точки (путевая или транзитная) задается в опции 
    // editorMidPointsType.
    addMidPoints: true
});

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

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

{% include notitle [patner-code](../../_includes/router/multiRouter/partner-code-c3b2ea8eb4c3.md#map3) %}

В песочнице приведен [интерактивный пример](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_edit), в котором режим редактирования включается по кнопке.

## Получение информации о маршруте {#route-get-info}

Объект [multiRouter.MultiRoute](../../../ref/reference/multiRouter.MultiRoute-docpage/#multiRouter.MultiRoute) содержит информацию о построенных маршрутах. Например, протяженность и время преодоления, а также информацию о перекрытых участках на автомобильном маршруте.

[Как получить информацию об активном маршруте](#get-active-route) — длину, время прохождения и другую информацию.

[Как получить пути маршрута](#get-paths) — пути маршрута необходимо получать, например, когда вы строите составной маршрут и нужно получить информацию о каждом отдельном пути.

[Как получить сегменты маршрута](#get-segments) — сегменты нужно получать, если требуется посмотреть сведения об отдельных участках маршрута, например, сколько времени будет затрачено на участке на автобусе.

[Как получить путевые точки](#get-wayPoints) — путевые точки нужно получать, например, когда требуется динамически изменять их внешний вид.

[Как получить транзитные точки](#get-viaPoints) — транзитные точки также нужно получать, например, когда требуется динамически изменять их внешний вид.

Список всех операций с маршрутом приведен в [справочнике](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.MultiRoute.md#methods-summary).

![](../../_images/small-line.png)

**Как получить информацию об активном маршруте**

Чтобы получить ссылку на активный маршрут, нужно воспользоваться методом [getActiveRoute()](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.MultiRoute.md#getActiveRoute). В зависимости от того, какой тип маршрутизации используется, маршрут описывается объектом:
- [multiRouter.driving.Route](https://tech.yandex.ru/maps/d../../jsapi/doc/2.1/ref/reference/multiRouter.driving.Route-docpage) — автомобильный маршрут;
- [multiRouter.pedestrian.Route](https://tech.yandex.ru/maps/d../../jsapi/doc/2.1/ref/reference/multiRouter.pedestrian.Route-docpage) — пешеходный маршрут;
- [multiRouter.masstransit.Route](https://tech.yandex.ru/maps/d../../jsapi/doc/2.1/ref/reference/multiRouter.masstransit.Route-docpage) — маршрут на общественном транспорте;
- [multiRouter.bicycle.Route](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.bicycle.Route.md) — маршрут на велосипеде.

Ниже приведен пример получения активного маршрута:

```javascript
// Подписка на событие обновления данных маршрута.
// Подробнее о событии в <u />.
// Обратите внимание, подписка осуществляется для поля model.
multiRoute.model.events.add('requestsuccess', function() {
    // Получение ссылки на активный маршрут.
    var activeRoute = multiRoute.getActiveRoute();
    // Вывод информации о маршруте.
    console.log("Длина: " + activeRoute.properties.get("distance").text);
    console.log("Время прохождения: " + activeRoute.properties.get("duration").text);
    // Для автомобильных маршрутов можно вывести 
    // информацию о перекрытых участках.
    if (activeRoute.properties.get("blocked")) {
        console.log("На маршруте имеются участки с перекрытыми дорогами.");
    }
});
```

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>

  
```



{% endcut %}

![](../../_images/small-line.png)

**Как получить пути маршрута**

Путь — участок маршрута между точками, в которых нужно сделать остановку.

#|
|| ![](../../_images/route-ex-path.png) |

Пути маршрута на рисунке:
- **Первый путь**: между точками «A» и «B»;
- **Второй путь**: между точками «B» и «C». ||
- |#

Получить список путей можно с помощью метода [getPaths()](https://tech.yandex.ru/maps/d../../jsapi/doc/2.1/ref/reference/multiRouter.driving.Route-docpage/#getPaths). В зависимости от типа маршрутизации, каждый путь маршрута описывается объектом:

- [multiRouter.driving.Path](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.driving.Path.md) — путь маршрута на автомобиле;
- [multiRouter.pedestrian.Path](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.pedestrian.Path.md) — путь пешеходного маршрута;
- [multiRouter.masstransit.Path](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.masstransit.Route.md) — путь маршрута на общественном транспорте;
- [multiRouter.bicycle.Path](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.bicycle.Path.md) — маршрут на велосипеде.

Ниже приведен пример получения путей маршрута:

```javascript
// Получение коллекции путей активного маршрута.
// activeRoute - это объект, описывающий активный маршрут.
// Он был получен ранее (см. <u />).
var activeRoutePaths = activeRoute.getPaths();    
// Проход по коллекции путей.
activeRoutePaths.each(function(path) {
    console.log("Длина пути: " + path.properties.get("distance").text);
    console.log("Время прохождения пути: " + path.properties.get("duration").text);
}); 
```

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

![](../../_images/small-line.png)

**Как получить информацию о сегментах маршрута**

Каждый маршрут разбивается на сегменты. Сегменты — это участки между:
- путевыми/транзитными точками;
- точками возможного изменения направления движения (развилка, въезд, съезд, поворот, разворот, перекресток);
- точками, в которых меняется тип участка. Например, сегмент «пешком» меняется на сегмент «на автобусе».

На рисунке ниже сегмент обозначен синим цветом.

![](../../_images/route-segments.png)

Чтобы получить список сегментов, нужно воспользоваться методом [getSegments()](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.driving.Path.md#getSegments). В зависимости от типа маршрутизации, каждый сегмент описывается объектом:

- [multiRouter.driving.Segment](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.driving.Segment.md) — сегмент для автомобильного маршрута;
- [multiRouter.pedestrian.Segment](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.pedestrian.SegmentModel.md) — сегмент для пешеходного маршрута;
- для маршрута на общественном транспорте:
    - [multiRouter.masstransit.TransferSegment](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.masstransit.TransferSegment.md) — сегмент перехода/пересадки;
    - [multiRouter.masstransit.TransportSegment](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.masstransit.TransportSegment.md) — транспортный сегмент;
    - [multiRouter.masstransit.WalkSegment](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.masstransit.WalkSegment.md) — пеший сегмент.
    
- [multiRouter.bicycle.Segment](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.bicycle.Segment.md) — сегмент маршрута на велосипеде.

Ниже приведен пример получения сегментов маршрута:

```javascript
// Сначала нужно получить коллекцию путей маршрута.
// Примечание: объект activeRoute был получен ранее (см. <u />).
var activeRoutePaths = activeRoute.getPaths(); 
// Проход по коллекции путей.
activeRoutePaths.each(function(path) {
  // Получение коллекции сегментов для каждого пути.
  var segments = path.getSegments();
  // Проход по коллекции сегментов и вывод информации о каждом сегменте.
  segments.each(function(segment) {
    console.log("Маневр в конце сегмента: " + segment.properties.get("action").text);
    console.log("Длина сегмента: " + segment.properties.get("distance").text);
    console.log("Время прохождения сегмента: " + segment.properties.get("duration").text);
    console.log("По какой улице проходит сегмент: " + segment.properties.get("street"));
  }); 
});   
```

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

В песочнице приведены интерактивные примеры:

- [Окрашивание сегментов маршрута в разный цвет](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_view_access) — в примере создается маршрут на общественном транспорте. В зависимости от типа участка (на автобусе или пешком) сегменты окрашиваются в разный цвет.
    
- [Добавление информации о маршруте в DOM](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_data_access) — отображение информации о сегментах маршрута на HTML-странице.
    
![](../../_images/small-line.png)

**Как получить путевые точки маршрута**

_Путевая точка_ — точка маршрута, в которой нужно сделать остановку. Начальная и конечная точки также являются путевыми точками.

#|
|| ![](../../_images/route-ex.png) | Путевые точки на рисунке: «A», «B» и «C». ||
|#

Путевые точки описываются объектом [multiRouter.WayPoint](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.WayPoint.md). Чтобы получить список путевых точек маршрута, нужно воспользоваться методом [getWayPoints()](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.MultiRoute.md#getWayPoints).

```javascript
var wayPoints = multiRoute.getWayPoints();  

// Проход по коллекции путевых точек.
// Для каждой точки зададим содержимое меток.
wayPoints.each(function (point) {   
    point.options.set({
        preset: "islands#redStretchyIcon",
        // В качестве содержимого метки установим адрес точки маршрута.
        iconContentLayout: ymaps.templateLayoutFactory.createClass('{{ properties.request|raw }}')
    });
});    
```

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

![](../../_images/small-line.png)

**Как получить транзитные точки маршрута**

_Транзитная точка_ — точка, через которую нужно проложить маршрут, но в которой не подразумевается остановка. Транзитные точки поддерживаются только для автомобильной маршрутизации.

![](../../_images/viapoints-ex.png)

Транзитные точки описываются объектом [multiRouter.ViaPoint](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.ViaPoint.md). Чтобы получить транзитные точки маршрута, нужно использовать метод [getViaPoints()](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.MultiRoute.md#getViaPoints).

Пример ниже демонстрирует, как получить информацию о транзитных точках, а также задать для них отображение.

```javascript
var viaPoints = multiRoute.getViaPoints();
// Проход по коллекции транзитных точек.
viaPoints.each(function (point) { 
    // Для каждой транзитной точки зададим ее отображение.
    point.options.set({  
        iconRadius: 7,
        iconFillColor: "#000088",
        // Внешний вид транзитной точки для активного маршрута.
        activeIconFillColor: "#E63E92"
    }); 
});
```

{% cut "Посмотреть полный код примера" %}


```html
<meta charset="utf-8">

<div id="map" style="width:450px;height:300px"></div>


```



{% endcut %}

В песочнице можно посмотреть более подробный пример — [Настройка отображения мультимаршрута](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_view_options).

# Решение типовых задач {#faq}

{% cut "Как показать адрес в подписях меток?" %}

Если точки маршрута задаются адресом, этот адрес будет показываться в подписях к точкам автоматически.

Если точки маршрута задаются координатами, то чтобы на карте подписывался их адрес, следует выставить параметр `reverseGeocoding` в `true`.

#|
||

```javascript
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
      [55.734876, 37.59308],
      [55.761184, 37.57850]
    ],
    params: {
      reverseGeocoding: true
    }
});

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

| ![](../../_images/use-caption-icon-route.png) ||
|#


{% note info %}

Опция `reverseGeocoding` — это флаг, разрешающий API выполнять обратное геокодирование. Это означает, что для точек, которые задаются координатами, API будет отправлять запросы Геокодеру, чтобы определить адрес этих точек. Следует иметь в виду, что запросы к Геокодеру [тарифицируются](https://yandex.ru/maps-api/products/js-api#tariffs). При включении опции `reverseGeocoding` учитывайте нагрузку на ваш сайт, чтобы избежать превышения суточного лимита.

{% endnote %}

![](../../_images/small-line.png)

{% endcut %}

{% cut "Как скрыть подписи у меток?" %}

Чтобы для меток не показывались подписи с адресом, точки маршрута должны быть заданы **координатами**. При этом параметр `reverseGeocoding` должен быть выставлен в `false`.

<!-- <p>Опция <codeph>reverseGeocoding</codeph> — это флаг, разрешающий API выполнять обратное геокодирование. Это означает, что для точек, оторые задаются координатами, API будет отправлять запросы Геокодеру, чтобы определить адрес этих точек. Полученный адрес будет автоматически отображаться в подписях к меткам. Если отключить опцию, не будет и подписи будут скрыты.</p>-->

#|
||
```javascript
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
      [55.734876, 37.59308],
      [55.761184, 37.57850]
    ],
    params: {
      reverseGeocoding: false
    }
});

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

| ![](../../_images/no-caption.png) ||
|#

![](../../_images/small-line.png)

{% endcut %}

{% cut "Как задать собственное изображение для меток?" %}

Задать собственное изображение для меток можно через опции маршрута. Обратите внимание, что для путевых точек нужно указывать префикс 'wayPoint'.

#|
||

```javascript
var multiRoute = new ymaps.multiRouter.MultiRoute({
  referencePoints: [
    "Москва, Ленинский проспект",
    "Москва, Льва Толстого, 16",
    "Москва, парк Сокольники"
  ]
}, {
  // Задаем собственную картинку
  // для конечной точки.
  wayPointFinishIconLayout: "default#image",
  wayPointFinishIconImageHref: "_images/img.png",
  wayPointFinishIcon_imagesize: [30, 30],
  wayPointFinishIconImageOffset: [-15, -15]
 });

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

| ![](../../_images/custom-view.png) ||
|#

[Открыть пример в песочнице](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_view_options)

![](../../_images/small-line.png)

{% endcut %}

{% cut "Нужно изменять внешний вид маршрута при наведении на него указателя мыши. Как это сделать?" %}

Пример ниже показывает, как изменить цвет линии маршрута при наведении на него указателя мыши. Активный маршрут окрашивается в черный цвет, альтернативные маршруты — в белый.

{% include notitle [patner-code](../../_includes/router/multiRouter/partner-code-c3b2ea8eb4c3.md#map5) %}

```javascript
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
      [55.734470, 37.58000],
      [55.734336, 37.51218],
      [55.724102, 37.19912]
    ]
}, {
    boundsAutoApply: true
});

// Подпишемся на событие готовности отображения маршрута.
multiRoute.events.add('update', function() {
    // Получение списка построенных маршрутов.
    var routes = multiRoute.getRoutes();
    // Проход по коллекции маршрутов.
    // Для каждого маршрута подпишемся на события
    // 'mouseenter' и 'mouseleave'.
    routes.each(function(route) {
        route.events.add('mouseenter', function() {
           // Получение ссылки на активный маршрут.
           var active = multiRoute.getActiveRoute();
            route.options.set('strokeWidth', 10);
            // Активный маршрут будет перекрашиваться в черный цвет.
            if (active === route) {
                route.options.set('strokeColor', "#000000");
            } else {
                route.options.set('strokeColor', "#FFFFFF");
            }
        });
        route.events.add('mouseleave', function() {
            route.options.unset('strokeWidth');
            route.options.unset('strokeColor');
        });
    });  
});

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

В песочнице приведен другой пример — [Работа с данными и событиями мультимаршрута](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_view_access). В примере в зависимости от типа участка (на автобусе или на метро) сегменты маршрута окрашиваются в разный цвет.

![](../../_images/small-line.png)

{% endcut %}

{% cut "Как задать собственный макет балуна маршрута?" %}

См. [пример](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_custom_balloon_layout).

![](../../_images/small-line.png)

{% endcut %}

{% cut "Как сделать, чтобы при каждом изменении маршрута границы карты автоматически перестраивались?" %}

Для этого следует подписаться на событие маршрута 'boundschange'. В обработчике события нужно выставить опцию `checkZoomRange` в `true`.

```javascript
multiRoute.events.add("boundschange", function() {
    myMap.setBounds(multiRoute.getBounds(), {
        checkZoomRange: true
    });
});
```

{% note info %}

Установить автоматическое центрирование карты также можно через опцию [boundsAutoApply](https://yandex.com/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.MultiRoute.md#param-options.boundsAutoApply). Однако эта опция позволяет центрировать карту только при первом построении маршрута.

{% endnote %}

![](../../_images/small-line.png)

{% endcut %}

{% cut "Как убрать метки над путевыми точками?" %}

**Первый способ:** с помощью опции `wayPointVisible`:

```javascript
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
      [55.734876, 37.59308],
      [55.761184, 37.57850]
    ]
}, {
    wayPointVisible: false,
    boundsAutoApply: true
});

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

![](../../_images/no-points.png)

Однако в этом случае точки маршрута будут неактивными, и пользователи не смогут их двигать.

**Второй способ:** задать собственное изображение для метки, которое будет менее заметным. Пример задания собственного изображения:

```javascript
// Создание маршрута.
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
        "Москва, Ленинский проспект",
        "Москва, Льва Толстого, 16",
        "Москва, метро Водный стадион"
    ]
}, {
    // Задание внешнего вида начальной точки.
    wayPointStartIconLayout: "default#image",
    wayPointStartIconImageHref: "_images/my_imagestart.png",
    wayPointStartIcon_imagesize: [10, 10],
    wayPointStartIconImageOffset: [-5, -5],
    // Задание внешнего вида конечной точки.
    wayPointFinishIconLayout: "default#image",
    wayPointFinishIconImageHref: "_images/myImageFinish.png",
    wayPointFinishIcon_imagesize: [10, 10],
    wayPointFinishIconImageOffset: [-5, -5],
    // Задание внешнего вида промежуточной путевой точки.
    wayPointIconLayout: "default#image",
    wayPointIconImageHref: "_images/myImageWayPoint.png",
    wayPointIcon_imagesize: [10, 10],
    wayPointIconImageOffset: [-5, -5],
    boundsAutoApply: true
});

// Добавление маршрута на карту.
myMap.geoObjects.add(multiRoute);
```
![](../../_images/small-line.png)

{% endcut %}

{% cut "Как получить информацию о времени и длине маршрута?" %}

См. [пример](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_data_access) в песочнице.

{% endcut %}

{% cut "Как получить информацию о сегментах маршрута на общественном транспорте?" %}

```javascript
// Построим маршрут по трем точкам.
var multiRoute = new ymaps.multiRouter.MultiRoute({
    // Описание опорных точек мультимаршрута.
    referencePoints: [
        [55.734876, 37.59308],
        "Москва, Мытищи"
    ],
    params: {
        routingMode: "masstransit"
    }
});

// Отобразим маршрут на карте.
myMap.geoObjects.add(multiRoute);

multiRoute.events.add('update', function() {
    // Получение активного маршрута.
    var activeRoute = multiRoute.getActiveRoute();
    // Получение путей активного маршрута.
    var activeRoutePaths = activeRoute.getPaths();
    
    // Проход по коллекции путей маршрута.
    activeRoutePaths.each(function(path) {
        // Получение сегментов маршрута.
        var segments = path.getSegments();
        // Проход по коллекции сегментов маршрута.
        segments.each(function(segment) {
            // Тип сегмента (пеший или на транспорте).
            var segmentType = segment.properties.get("type");
            // Получение всех сегментов "На транспорте".
            var segmentTransports = segment.properties.get('transports');
            if (segmentTransports != undefined) {
                segmentTransports.forEach(function(transport) {
                    console.log("Направление или номер маршрута: " + transport.name);
                    console.log("Тип транспорта: " + transport.type);
                    console.log("Цвет: " + transport.Style); // Цвет линии метро.
                });
            }
        });
    });
});
```

В песочнице приведен другой пример — [Работа с данными и событиями мультимаршрута](https://tech.yandex.ru/maps/jsbox/2.1/multiroute_view_access). В примере в зависимости от типа участка (на автобусе или на метро) сегменты маршрута окрашиваются в разный цвет.

{% endcut %}

{% cut "Как посчитать количество пересадок на метро?" %}

```javascript
var multiRoute = new ymaps.multiRouter.MultiRoute({
    // Описание опорных точек мультимаршрута.
    referencePoints: [
        "Москва, метро Парк Победы",
        "Москва, метро Бабушкинская"
    ],
    params: {
        routingMode: "masstransit"
    }
});

// Отобразим маршрут на карте.
myMap.geoObjects.add(multiRoute);

multiRoute.events.add('update', function() {
    var activeRoute = multiRoute.getActiveRoute();
    // Время прохождения маршрута.
    var activeRouteDuration = activeRoute.properties.get("duration").text;
    // Получение путей маршрута.
    var activeRoutePaths = activeRoute.getPaths();
    
    var transferCount = 0;

    activeRoutePaths.each(function(path) {
        var segments = path.getSegments(); 
        segments.each(function (segment) {
            var segmentType = segment.properties.get("type");
            // Если тип сегмента - пересадка, то увеличиваем счетчик.
            if (segmentType == "transfer") {
                transferCount += 1;
            }
        });   
    });
    console.log("Количество пересадок на метро: " + transferCount); 
    console.log("Длительность маршрута: " + activeRouteDuration); 
});
```

{% endcut %}

{% cut "Как программно редактировать маршрут (добавить/удалить точки, изменить тип маршрутизации и т. д.)?" %}

Программно отредактировать маршрут можно через поле `multiRoute.model`:

```javascript
// Создание экземпляра маршрута.
var multiRoute = new ymaps.multiRouter.MultiRoute({
    referencePoints: [
        'метро Арбатская', 
        'метро Смоленская'               
    ]
});

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

// Перестроение маршрута по новым точкам. 
// Точка 'метро Арбатская' будет удалена из маршрута.
multiRoute.model.setReferencePoints([ 
    'метро Смоленская',
    'метро Текстильщики'
]);

// Изменение параметров маршрутизации.
multiRoute.model.setParams({
    routingMode: 'masstransit'
});
```

{% endcut %}


[*transitpoint]: _Транзитная точка_ — промежуточная точка, через которую нужно проложить маршрут, но в которой не подразумевается остановка. Транзитные точки доступны только для автомобильной маршрутизации.