Клуб API Карт

Маршрутизация. Ошибка Яндекса? Или баг?

Пост в архиве.

Есть две точки: [55.655,37.7024], [55.741166,37.62245]. Строю маршрут между ними и получаю время в секундах методом: route.getJamsTime(). Внимание вопрос, почему возвращает время в виде  - "1.7976931348623157e+308". Почему так и как привести в нормальный вид или это ошибка?

11 комментариев

Не ошибка и не баг. Можно использовать метод ymaps.formatter.duration 

Есть такое, спасибо, вернуло к примеру "41 мин" как эту конструкцию разшифровать в секунды?

Ничего не понял. У вас изначально секунды возвращаются

getTime()IntegerВозвращает время проезда маршрута в секундах.

Код: ymaps.formatter.duration(route.getTime());

Возвращет значение: "41 мин"


Код: route.getTime()

Возвращает значение иногда: 1.7976931348623157e+308


Мне нужно получить время маршрута в секундах типом строка, например "2600".


Помогите решить проблему, пожалуйста.

Ну да, получается что нужно точку перенести на 308 разрядов вправо в числе - 1.7976931348623157e+308. Не может такого быть, так как между [55.655,37.7024], [55.741166,37.62245] точками время проезда будет несколько лет или столетий?

Да, прошу прощения, я видимо был невнимателен.

Похоже это ошибка или маршрут строится через какое-то перекрытие.

 

Я уточню и отпишусь

Да, кстати я поймал это не только между этими точками, как минимум еще 4 примера можно найти. Жду ответа, спасибо.

Так и есть, на маршруте есть перекрытие, При этом maps.yandex.ru умеет обрабатывать это (выводит "Некоторые участки маршрута перекрыты.")

АПИ пока не умеет, соотв. Вы получаете такое время.

Как вариант можно строить маршрут с учетом пробок и там время должно быть корректное, и маршрут идет в объезд

ymaps.route([
        [55.655, 37.7024], [55.741166,37.62245]
    ], { avoidTrafficJams: true }).then(function (route) {
        console.log(route.getJamsTime());
    });

 

Мы подумаем как обрабатывать такие ситуации, спасибо за ваше сообщение.

Ок, спасибо, будем думать. 

Кое что осталось непонятным.

В спецификации (есть в теме) указано, что getJamsTime возвращает Integer.

А опыт показывает, что возвращается дробное число.

Например, скрипт ниже сейчас возвращает 574,16.

Это правильное значение в секундах.

Но почему оно не целое?

 

 

ymaps.ready(init);

 

function init() {

    routeData = ymaps.route([

        'Москва, улица Крылатские холмы',

        [55.731272, 37.447198]]);

 

    routeData.then(

        function (route) {$('#list').append(route.getJamsTime());}, 

        function (error) {alert('Возникла ошибка: ' + error.message);}

    );

}