Здравствуйте.
Есть небольшая проблемка с сабжем. Карта выводится в всплывающем диве, все строится как надо. Первоначально получаю маршрут и время в пути с учетом пробок (допустим получилось 38 минут), потом меняю радиобаттон на "без пробок", перестраиваю маршрут и получаю, допустим 25 минут. Если выбрать обратно расчет с учетом пробок, время в пути так и останется 25 минут. В чем проблема так и не смог понять.
Ловлю время в пути через router.getHumanJamsTime() и router.getHumanTime() и возникает такое ощущение, что после router.getHumanTime() полученное время где-то кешируется. Проверял, что опции avoidTrafficJams должно приходить верное значение (true - с пробками, false - без пробок), хотя, как я понимаю, этот параметр на расчет времени не влияет. Что с этим делать, может кто подскажет?
UPD. Та же проблема сохраняется при изменении маршрута - получил один маршрут и данные с/без пробок, затем изменил маршрут - все, время теперь счтается без учета пробок, не важно запрашиваю ли я router.getHumanJamsTime() или router.getHumanTime().
var myMap, route, pointStart, pointFinish, trafficJams, mapActive, objCalc;
trafficJams = true; // по умолчанию выводим все с расчетом пробок
mapActive = false; // переменная инициализации карты, false - не инициализирована
// инициализируем картуfunction InitMap()
{
myMap = new ymaps.Map('map',
{
center: [55.755768, 37.617671],
zoom: 10
});
//Добавляем элементы управления
myMap.controls
// Кнопка изменения масштаба
.add('zoomControl')
// Список типов карты
.add('typeSelector')
// Кнопка изменения масштаба - компактный вариант
// Расположим её справа
.add('smallZoomControl', { right: 5, top: 75 })
// Стандартный набор кнопок
.add('mapTools')
.add('trafficControl')
return false;
}
// выводим маршрут на картуfunction ShowPoints()
{
ymaps.route(
[
// Список точек, которые необходимо посетить
[pointStart],
[pointFinish]
],
{
// Опции маршрутизатора
avoidTrafficJams: trafficJams, // учитывать ли пробки, true - учитывать
mapStateAutoApply: true // автоматически позиционировать карту
}).then(function (router)
{
route = router;
myMap.geoObjects.add(router);
// С помощью метода getWayPoints() получаем массив точек маршрута
// (массив транзитных точек маршрута можно получить с помощью метода getViaPoints)
var points = router.getWayPoints();
// Задаем стиль метки - иконки будут красного цвета, и
// их изображения будут растягиваться под контент
points.options.set('preset', 'twirl#lightblueStretchyIcon');
// Задаем контент меток в начальной и конечной точках
points.get(0).properties.set('iconContent', pointStart);
points.get(1).properties.set('iconContent', pointFinish);
// получаем длину маршрута и время в пути
if (trafficJams)
{
alert(trafficJams + ' || ' + router.getHumanJamsTime());
$("#travelTime").html(router.getHumanJamsTime());
}
else
{
alert(trafficJams + ' || ' + router.getHumanTime());
$("#travelTime").html(router.getHumanTime());
}
$("#lengthOfRoute").html(router.getHumanLength());
}, function (error)
{
alert("Возникла ошибка: " + error.message);
});
return false;
}
// очистка карты от меток перед новым построением маршрутаfunction ResetMap()
{
myMap.geoObjects.remove(pointStart);
myMap.geoObjects.remove(pointFinish);
route && myMap.geoObjects.remove(route);
$("#lengthOfRoute").html('0 км.');
$("#travelTime").html('0 минут');
return false;
}
// функция для инициализации, вывода карты function OrderCalc(){
// при необходимости активируем карту
if (!mapActive)
{
ymaps.ready(InitMap);
mapActive = true;
}
// получаем данные для кулькулятора
GetCalcData();
//выводим на карте точки
ymaps.ready(ResetMap);
ymaps.ready(ShowPoints);
return false;
}