Настройка отображения мультимаршрута
Правила отображения маршрутов задаются в опциях маршрутизатора.
Для задания опций составных частей мультимаршрута доступны следующие префиксы:
<ul>
<li>wayPoint - опции отображений путевых точек;</li>
<li>wayPointStart - опции отображения начальной путевой точки;</li>
<li>wayPointFinish - опции отображения конечной путевой точки;</li>
<li>viaPoint - опции отображений транзитных точек;</li>
<li>pin - опции отображений точечных маркеров в путевых точках;</li>
<li>route - опции отображений маршрутов;</li>
<li>routeActive - опции отображения активного маршрута;</li>
<li>routePedestrianSegment - опции линий сегментов пешеходного маршрута;</li>
<li>editor - опции редактора мультимаршрута (см. <a href="https://yandex.ru/dev/jsapi-v2-1/doc/ru/v2-1/ref/reference/multiRouter.Editor">multiRouter.Editor</a>).</li>
</ul>
В данном примере на карту добавляется два маршрута с разными опциями отображения. Как можно задать
два разных отображения для маршрутов, имеющих общую модель, см. в справочнике.
index.html
multiroute_view_options.js
<!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&apikey=<ваш API-ключ>"
type="text/javascript"
></script>
<script
src="multiroute_view_options.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() {
// Объявляем набор опорных точек и массив индексов транзитных точек.
var referencePoints = [
"Москва, Ленинский проспект",
"Москва, Льва Толстого, 16",
"Москва, Кремлевская набережная",
"Москва, парк Сокольники",
],
viaIndexes = [2];
// Создаем мультимаршрут и настраиваем его внешний вид с помощью опций.
var multiRoute = new ymaps.multiRouter.MultiRoute(
{
referencePoints: referencePoints,
params: { viaIndexes: viaIndexes },
},
{
// Внешний вид путевых точек.
wayPointStartIconColor: "#333",
wayPointStartIconFillColor: "#B3B3B3",
// Задаем собственную картинку для последней путевой точки.
wayPointFinishIconLayout: "default#image",
wayPointFinishIconImageHref: "leaf.svg",
wayPointFinishIconImageSize: [30, 30],
wayPointFinishIconImageOffset: [-15, -15],
// Позволяет скрыть иконки путевых точек маршрута.
// wayPointVisible:false,
// Внешний вид транзитных точек.
viaPointIconRadius: 7,
viaPointIconFillColor: "#000088",
viaPointActiveIconFillColor: "#E63E92",
// Транзитные точки можно перетаскивать, при этом
// маршрут будет перестраиваться.
viaPointDraggable: true,
// Позволяет скрыть иконки транзитных точек маршрута.
// viaPointVisible:false,
// Внешний вид точечных маркеров под путевыми точками.
pinIconFillColor: "#000088",
pinActiveIconFillColor: "#B3B3B3",
// Позволяет скрыть точечные маркеры путевых точек.
// pinVisible:false,
// Внешний вид линии маршрута.
routeStrokeWidth: 2,
routeStrokeColor: "#000088",
routeActiveStrokeWidth: 6,
routeActiveStrokeColor: "#E63E92",
// Внешний вид линии пешеходного маршрута.
routeActivePedestrianSegmentStrokeStyle: "solid",
routeActivePedestrianSegmentStrokeColor: "#00CDCD",
// Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком.
boundsAutoApply: true,
}
);
// Настраиваем внешний вид второй точки через прямой доступ к ней.
customizeSecondPoint();
// Создаем кнопки.
var removePointsButton = new ymaps.control.Button({
data: { content: "Удалить промежуточные точки" },
options: { selectOnClick: true },
}),
routingModeButton = new ymaps.control.Button({
data: { content: "Пешком" },
options: { selectOnClick: true },
});
// Объявляем обработчики для кнопок.
removePointsButton.events.add("select", function () {
multiRoute.model.setReferencePoints(
[
referencePoints[0],
referencePoints[referencePoints.length - 1],
],
[]
);
});
removePointsButton.events.add("deselect", function () {
multiRoute.model.setReferencePoints(referencePoints, viaIndexes);
// Т.к. вторая точка была удалена, нужно заново ее настроить.
customizeSecondPoint();
});
routingModeButton.events.add("select", function () {
multiRoute.model.setParams({ routingMode: "pedestrian" }, true);
});
routingModeButton.events.add("deselect", function () {
multiRoute.model.setParams({ routingMode: "auto" }, true);
});
// Функция настройки внешнего вида второй точки.
function customizeSecondPoint() {
/**
* Ждем, пока будут загружены данные мультимаршрута и созданы отображения путевых точек.
* @see https://tech.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRouteModel-docpage/#event-requestsuccess
*/
multiRoute.model.events.once("requestsuccess", function () {
var yandexWayPoint = multiRoute.getWayPoints().get(1);
// Создаем балун у метки второй точки.
ymaps.geoObject.addon.balloon.get(yandexWayPoint);
yandexWayPoint.options.set({
preset: "islands#grayStretchyIcon",
iconContentLayout: ymaps.templateLayoutFactory.createClass(
'<span style="color: red;">Я</span>ндекс'
),
balloonContentLayout:
ymaps.templateLayoutFactory.createClass(
"{{ properties.address|raw }}"
),
});
});
}
// Создаем карту с добавленной на нее кнопкой.
var myMap = new ymaps.Map(
"map",
{
center: [55.739625, 37.5412],
zoom: 7,
controls: [removePointsButton, routingModeButton],
},
{
buttonMaxWidth: 300,
}
);
// Добавляем мультимаршрут на карту.
myMap.geoObjects.add(multiRoute);
}
ymaps.ready(init);