Клуб API Карт

Открытие балуна сегмента маршрута

Bangerson
1 апреля 2015, 17:32

Здравствуйте,

делаю карту с построением маршрута аналогично примеру из песочницы https://tech.yandex.ru/maps/jsbox/2.1/router

Интересует вопрос: можно ли как-то повесить событие на сегменты маршрута (я имею ввиду те объекты router.Segment, из которых формируется список "маршрутного листа" под картой), при вызове которых будет открываться балун этого сегмента на карте?

Иными словами - мне нужно "извне" сымитировать клик по сегменту пути для открытия балуна этого сегмента.

Возможно ли это реализовать средствами api 2.1? Если да, то куда смотреть? Спасибо.

3 комментария

Добрый день. В 2.1 есть 2 маршрутизатора: старый router и новый multiRouter. Насколько я понял, вас интересует router.
Самый простой способ сделать то, что вы хотите это вызвать open() c передачей пиксельной позиции у балуна router.Path. 

т.е. примерно так. 

 

route.getPaths().get(0).balloon.open(pixelPoint)

 

Неудобно, но по другому в старом роутере сделать очень трудно, т.к. объекты сегментов там являются виртуальными, а балун открывает именно router.Path в который передается позиция клика.

В мультироутере можно было бы применить более изящное решение, т.к. объекты сегментов это геообъекты, которые добавляются на карту и для них можно включить балуны.

route.getPaths().get(0).balloon.open(pixelPoint)

pixelPoint - с этим не разобрался.

Не понятно, как определить эту позицию? В объекте route.getPaths().get(0).balloon ничего похожего не нашёл.

 

И не могли бы вы поделиться решением для multiRouter ? Может с ним проще будет разобраться...

 

Вот пример кода:

multiRoute = new ymaps.multiRouter.MultiRoute({            referencePoints: ['Москва, Удальцова 57', 'Москва, парк 50-летия Октября']        }, {            boundsAutoApply: true,            // Отключаем открытие балуна по умолчанию.            routeOpenBalloonOnClick: false,            // Определяем макет содержимого балуна для сегментов.            // Описание данных сегментов:            // https://tech.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/multiRouter.driving.SegmentModel-docpage/#properties            routeBalloonContentLayout: ymaps.templateLayoutFactory.createClass(                '{{ properties.text }} {{ properties.distance.text }}'            )        });        // У сегментов маршрута нет балунов, поэтому их надо создавать при каждом обновлении.        multiRoute.events.add("update", function (e) {            e.get("target").getRoutes().each(function (route) {                route.getPaths().each(function (path) {                    path.getSegments().each(function (segment) {                        if (!segment.balloon) {                            ymaps.geoObject.addon.balloon.get(segment);                            // Если нужно открывать балун по клику.                            // segment.options.set("openBalloonOnClick", true);                        }                    });                });            });        });