Клуб API Карт

Получение времени поездки с учетом пробок и без

singlewolfahot
7 ноября 2012, 18:31

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

Есть небольшая проблемка с сабжем. Карта выводится в всплывающем диве, все строится как надо. Первоначально получаю маршрут и время в пути с учетом пробок (допустим получилось 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;
}


 

 

7 комментариев
Подписаться на комментарии к посту

Пришлите ссылку на приложение

Т.к. trafficJams = this.value; и this.value - это строка (не Boolean), то флаг trafficJams у вас всегда будет строкой, т.е. в логических выражениях будет возвращать true

спасибо, не подумал

можно спросить, код на проекте сильно ужасен?

Нет, не сильно :)

Хорошо что не сильно ужасен, есть к чему стремиться. :) Спасибо еще раз :)