Как можно разместить несколько независимых мультимаршрутов на одной карте?
Примерно как на скрине
Как можно разместить несколько независимых мультимаршрутов на одной карте?
Примерно как на скрине
Есть карта с автомобильным маршрутом из точки А в точку Х и кнопкой. При активации кнопки маршрут меняется на пешеходный из точки В в точку Х, а при деактивации кнопки - маршрут возвращается в исходное состоянии.
Проблема в том, что при активации кнопки, часть пешеходного маршрута становится не видна. Как сделать так чтобы при изменении маршрута, изменялись границы карты и маршрут умещался целицом?
Пробовал вставлять в обработчик собития кнопки (нашел в одном из ответов в другой теме).
myMap.setBounds(multiRoute.getBounds(), {checkZoomRange:true});Но такая конструкция работает как-то не корректно. Сначала сдвигается карта, а потом рисуется маршрут и получается что оба маршрута и пешеходный и автомобильный становятся частично не видны...
Код скрипта:
ymaps.ready(function () {
// Задаём точки мультимаршрута.
var pointA = [57.357517, 37.594334], // Стадион
pointB = [57.352960, 37.589776], // Вокзал
pointX = "Кашин, улица Вонжинская, 2",
/**
* Создаем мультимаршрут.
* @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRoute.xml
*/
multiRoute = new ymaps.multiRouter.MultiRoute({
referencePoints: [
pointA,
pointX
],
params: {
//Тип маршрутизации - автомобильная маршрутизация.
routingMode: 'auto'
}
}, {
// Позволяет скрыть иконки путевых точек маршрута.
wayPointVisible:false,
// Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком.
boundsAutoApply: true
});
// Создаем кнопку.
var changePointsButton = new ymaps.control.Button({
data: {content: "Как пройти"},
options: {selectOnClick: true}
});
// Объявляем обработчики для кнопки.
changePointsButton.events.add('select', function () {
//myMap.setBounds(multiRoute.getBounds(), {checkZoomRange:true});
multiRoute.model.setReferencePoints([pointB, pointX]);
multiRoute.model.setParams({routingMode: 'pedestrian'}, true);
changePointsButton.data.set({content: 'Как проехать'});
});
changePointsButton.events.add('deselect', function () {
//myMap.setBounds(multiRoute.getBounds(), {checkZoomRange:true});
multiRoute.model.setReferencePoints([pointA, pointX]);
multiRoute.model.setParams({routingMode: 'auto'}, true);
changePointsButton.data.set({content: 'Как пройти'});
});
// Создаем карту с добавленной на нее кнопкой.
var myMap = new ymaps.Map('YMapsID', {
center: [57.358381, 37.613440],
zoom: 12,
controls: [changePointsButton]
}, {
buttonMaxWidth: 300
});
// Отключаем масштабирование карты колесиком мыши
myMap.behaviors.disable('scrollZoom');
// Добавляем мультимаршрут на карту.
myMap.geoObjects.add(multiRoute);
});Я чесно искал и не нашёл решения, возможно его нет, или я пропустил банально какую-то срочку в документации. Можно ли как-то получить мультимаршрут и желательно эвент о его построении если использовалась стандартная панели маршрутизации? Спасибо.
Здравствуйте. Существует ли способ отключить балун на карте выше при клике на мультимаршрут? Я пробовал переопределять клик по нему, дабы он ничего не делал, но это не сработало.
multiRoute.events.add("click", function(){
// Ничего не делаем
});Весь JS карты:
function init () {
/**
* Тестовый массив с метками адресов
*/
var arr = new Array();
for(var i=0; i<window.getDataJSInterface.getRoutePointsNumber(); i++){
arr[i] = new Array();
arr[i][0] = window.getDataJSInterface.getRoutePointCoord(i, 0);
arr[i][1] = window.getDataJSInterface.getRoutePointCoord(i, 1);
}
/**
* Создаем мультимаршрут.
* Первым аргументом передаем модель либо объект описания модели.
* Вторым аргументом передаем опции отображения мультимаршрута.
* @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRoute.xml
* @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRouteModel.xml
*/
var multiRoute = new ymaps.multiRouter.MultiRoute({
// Описание опорных точек мультимаршрута.
referencePoints: arr
}, {
// Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком.
boundsAutoApply: true
});
// Создаем карту с добавленными на нее кнопками.
var myMap = new ymaps.Map('map', {
center: [55.750625, 37.626],
zoom: 7,
controls: ['zoomControl']
}, {
buttonMaxWidth: 300
});
// Ожидаем успешного построения маршрута
multiRoute.model.events.add("requestsuccess", function(){
window.updateDataJSInterface.updateRouteLength( multiRoute.getActiveRoute().properties.get('distance').value );
// Возвращает пиздец, если расстояние огромно
//window.console.log( multiRoute.getActiveRoute().properties.get('durationInTraffic').value );
var s = multiRoute.getActiveRoute().properties.get('duration').value;
var m = (s/60) % 60;
window.console.log(m);
var h = s / 3600;
window.console.log(h);
window.updateDataJSInterface.updateTripTime(h, m);
});
// Добавляем мультимаршрут на карту.
myMap.geoObjects.add(multiRoute);
}
ymaps.ready(init);
Можно ли как-нибудь отлючить этот балун?
Добрый день. Я хочу научить карту прокладывать маршрут через несколько точек и отображать длину проложенного маршрута. У меня получилось машрут проложить, но с длиной возникли проблемы:
1) multiRoute.getRoutes() возвращает пустой массив
2) multiRoute.getActiveRoute() возвращет null
Я знаю, что есть пример в песочнице (https://tech.yandex.ru/maps/jsbox/2.1/multiroute_data_access), но я не могу его пока использовать т.к. multiRoute.getRoutes() ничего не возвращет.
Код карты:
function init () {
/**
* Тестовый массив с метками адресов
*/
var adresses = [
[52.282071, 104.287999],
[52.276622, 104.316408],
[52.262905, 104.302418],
[52.225794, 104.311010]
];
/**
* Создаем мультимаршрут.
* Первым аргументом передаем модель либо объект описания модели.
* Вторым аргументом передаем опции отображения мультимаршрута.
* @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRoute.xml
* @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.MultiRouteModel.xml
*/
var multiRoute = new ymaps.multiRouter.MultiRoute({
// Описание опорных точек мультимаршрута.
referencePoints: [
[52.282071, 104.287999],
[52.276622, 104.316408],
[52.262905, 104.302418],
[52.225794, 104.311010]
]
}, {
// Автоматически устанавливать границы карты так, чтобы маршрут был виден целиком.
boundsAutoApply: true
});
// Создаем карту с добавленными на нее кнопками.
var myMap = new ymaps.Map('map', {
center: [55.750625, 37.626],
zoom: 7,
}, {
buttonMaxWidth: 300
});
// КОРЕНЬ ЗЛА!
var a = multiRoute.model.getRoutes();
// Добавляем мультимаршрут на карту.
myMap.geoObjects.add(multiRoute);
}
ymaps.ready(init);
Скажите, что я делаю не так и как узнать длину мультимаршрута?
Добрый день.
При построении мультимаршрута, при клике на путевую точку, возникает балун с описанием точки и кнопкой "Подробнее", при клике на которую открывается маршрут на карте Yandex Maps. Можно ли как-нибудь убрать появление такого балуна при клике по путевой точке?
Здравствуйте. При построении маршрута по точкам (мультимаршрут) путевые точки отображаются в виде меток с буквами латинского алфавита (A, B, C и т.д.). Можно ли сделать так, чтобы метки были с цифрами (1, 2, 3 и т.д.)?
Подскажите пожалуйста.
Как отследить переход с активного маршрута на неактивный, чтобы собственный макет тоже менялся. То есть при построении мультимаршрута от точки А до Б выдаётся три варианта маршрута и автоматически выбирается активным более оптимальный, и у меня создаётся свой макет балуна, но когда я меняю активный маршрут на другой из предложенных мне яндексом, то макет остается прежним т.к. я не могу отследить переход от активного. В макете у меня так же указаны: Время в пути, протяженность и тд.. Перерыл весь интернет ничего из примеров я не нашел. Я не силен в js и если можно объясните на примерах. Заранее всем большое спасибо.
Уже умеем считать маршруты для обычного транспорта на >1000 точек. Но встал вопрос для прокладки маршрута для велосипеда. Хотим для этого использовать пешеходные маршруты, появились ли API методы для пешеходных маршрутов?
версия 2,1 в песочнице https://tech.yandex.ru/maps/jsbox/2.1/router
1) как убрать все точки и сам маршрут? myMap.geoObjects.remove(route); почему то не сработал.
2) есть ли возможность выстроить 2 маршрута? как тут https://tech.yandex.ru/ma