Клуб API Карт

Названия сегментов пишутся через раз

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

Привет.

Пытаюсь вычислить расстояние маршрута на МКАД, пробегая циклом все сегменты и проверяя названия. Заметил, что считает через раз и решил проверить:

 

 

moveList = '';
ringway = 0;
route.getPaths().each(function (elem, j) {
    moveList += '<br /><br />Path #' + j + '<br /><br />';
    var segments = elem.getSegments();
    for (var i = 0, len = segments.length; i < len; i++) {
        if (segments[i].getStreet() == 'МКАД') {
            ringway += segments[i].getLength();
        }
        moveList += segments[i].getStreet() + ' [' + segments[i].getLength() + ']<br />';
    }
});

$('#list').html(moveList);

 

 

 

Path #0


[79.08]
[130.4]
1-я Тверская-Ямская улица [17.32]
1-я Тверская-Ямская улица [60.66]
Белорусский путепровод [215.02]
Ленинградский проспект [25.72]
Ленинградский проспект (дублер) [1247.21]
ТТК [5971.37]
Кутузовский проспект [5992.45]
2-й Минский путепровод [62.42]
Можайское шоссе [4180.62]
МКАД [9598.33]
Киевское шоссе [10298.54]
Центральная улица [138.05]
[532.98]
Центральная улица [944.67]
2-я Рейсовая улица [15.33]
2-я Рейсовая улица [280.14]
[620.65]
[647.66]


Path #1

[96.77]
[121.27]
[259.56]
1-я Рейсовая улица [289.35]
1-я Рейсовая улица [15.07]
Центральная улица [1936.32]
[134.02]
[207.86]
Внуковское шоссе [3734.05]
Минское шоссе [10434.64]
Можайское шоссе [380.36]
МКАД [21136.76]
Ленинградское шоссе [1197.59]
улица Маяковского [260.23]
улица Маяковского [372.11]
Пролетарская улица [420.81]
Московская улица [7.85]

 

 

Т.е. названия сегментов выводятся не у всех. Причем, если тот же самый маршрут провести ещё раз, то будет снова рандом, т.е. пустые названия будут у совершенно других сегментов.

С чем это связано, как с этим бороться и если никак, то есть ли другие способы подсчитать данный километраж?

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

http://en.wikipedia.org/wiki/Where_the_Streets_Have_No_Name

 

Серьезно, для всяких развязок и поворотов не всегда возвращаются названия (можно посмотреть в маршутных листах на maps.yandex.ru)

Длина отрезка при этом возвращается

А что тогда творится со мкадом? как это 6-километровый участок мкада оказался улицей без названия?

я в вашем логе такого не вижу

дайте параметры по которым вы строите маршрут

Конкретно в этом нет, но мкад считается через раз (очень часто, когда на карте видно, что маршрут проходит через мкад - в переменной ringway 0), попробую сейчас разные маршруты со мкадом.


Что за параметры? Этот код?


ymaps.route(pointGeo, {
    avoidTrafficJams: trafficJams,
    mapStateAutoApply: true
}).then(function (route) {
...

}


pointGeo это массив вида {'Москва, Белорусский вокзал', 'аэропорт Домодедово'}

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

что именно мне скинуть?

Вся функция constructRoute():

 

function constructRoute() {
    recordWaypoints();

    ymaps.route(pointGeo, {
        avoidTrafficJams: trafficJams,
        mapStateAutoApply: true
    }).then(function (route) {
        route.getPaths().options.set({
            strokeColor: 'FF0033',
            opacity: 0.5
        });

        route.getPaths().options.set('preset', 'router#plainPath');
       
        var points = route.getWayPoints();
        for (var i = 0, len = pointGeo.length; i < len; i++) {
            points.get(i).options.set('preset', 'twirl#' + pointTwirl[i]);
            if (pointType[i] == 'address')
                points.get(i).properties.set('iconContent', cropAddress(pointGeo[i]));
        }
       
        routerCollection.removeAll();
        routerCollection.add(route);
       
        // Общее время в пути
        if (trafficJams) {
            routeTime = route.getJamsTime();
        } else {
            routeTime = route.getTime();
        }
       
        // Общая протяженность маршрута
        routeLength = route.getLength();
       
        // Поездка по МКАДу
        moveList = '';
        ringway = 0;
        route.getPaths().each(function (elem, j) {
            moveList += '

Path #' + j + '

';
            var segments = elem.getSegments();
            for (var i = 0, len = segments.length; i < len; i++) {
                if (segments[i].getStreet() == 'МКАД') {
                    ringway += segments[i].getLength();
                }
                moveList += segments[i].getStreet() + ' [' + segments[i].getLength() + ']
';
            }
        });
       
        $('#list').html(moveList);
       
        routeLaid = true;
        $('.orderDetails').slideDown('slow');
       
        calcCost();
    }, function (error) {
        // alert('Возникла ошибка: ' + error.message);
        mainMap.panTo([55.754178, 37.624678], {
            delay: 100,
            duration: 300,
            flying: false
        });
        routerCollection.removeAll();
   
        routeLaid = false;
        $('.orderDetails').slideUp('slow');
       
        calcCost();       
    });
};

 

 

конкретный pointGeo

при котором вы получаетет 6км участок на МКАД без названия

В последний раз, когда МКАД был без названия pointGeo был равен ["Москва, Белорусский вокзал", "аэропорт Внуково", "Химки"]. Но, тогда и маршрут строился по другим улицам (видимо, пробки).