Клуб API Карт

Очистка карты от построенного маршрута

alyoshine
4 апреля 2013, 18:45

добрый день,

я сделал маршрутизацию по примеру http://api.yandex.ru/maps/jsbox/router

не пойму как теперь очистить карту если поиск осуществляется по другим координатам.

 

route && myMap.geoObjects.remove(route); - это не помогает, вернее удаляет но остаються метки и сам путь

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

Надо хранить ссылку на предыдущий маршрут в замыкании

т.е., не могли бы вы поподробнее ?

ну ссылку на предыдущий маршрут надо где-то сохранить? или нет?

или вы еще недобавленнный на карту пытаетесь удалить?

еще не добавленный маршрут, я не пытаюсь удалять.

 

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

 

ymaps.ready(init);

function init() {
    var myMap = new ymaps.Map("map", {
            center: [55.745508, 37.435225],
            zoom: 13
        });

    // Добавим на карту схему проезда
    // от улицы Крылатские холмы до станции метро "Кунцевская"
    // через станцию "Молодежная" и затем до станции "Пионерская".
    // Точки маршрута можно задавать 3 способами:
    // как строка, как объект или как массив геокоординат.
    ymaps.route([
        'Москва, улица Крылатские холмы',
        {
            point: 'Москва, метро Молодежная',
            // метро "Молодежная" - транзитная точка
            // (проезжать через эту точку, но не останавливаться в ней).
            type: 'viaPoint'
        },
        [55.731272, 37.447198], // метро "Кунцевская".
        'Москва, метро Пионерская'
    ]).then(function (route) {
        myMap.geoObjects.add(route);
        // Зададим содержание иконок начальной и конечной точкам маршрута.
        // С помощью метода getWayPoints() получаем массив точек маршрута.
        // Массив транзитных точек маршрута можно получить с помощью метода getViaPoints.
        var points = route.getWayPoints(),
            lastPoint = points.getLength() - 1;
        // Задаем стиль метки - иконки будут красного цвета, и
        // их изображения будут растягиваться под контент.
        points.options.set('preset', 'twirl#redStretchyIcon');
        // Задаем контент меток в начальной и конечной точках.
        points.get(0).properties.set('iconContent', 'Точка отправления');
        points.get(lastPoint).properties.set('iconContent', 'Точка прибытия');

        // Проанализируем маршрут по сегментам.
        // Сегмент - участок маршрута, который нужно проехать до следующего
        // изменения направления движения.
        // Для того, чтобы получить сегменты маршрута, сначала необходимо получить
        // отдельно каждый путь маршрута.
        // Весь маршрут делится на два пути:
        // 1) от улицы Крылатские холмы до станции "Кунцевская";
        // 2) от станции "Кунцевская" до "Пионерская".

        var moveList = 'Трогаемся,
',
            way,
            segments;
        // Получаем массив путей.
        for (var i = 0; i < route.getPaths().getLength(); i++) {
            way = route.getPaths().get(i);
            segments = way.getSegments();
            for (var j = 0; j < segments.length; j++) {
                var street = segments[j].getStreet();
                moveList += ('Едем ' + segments[j].getHumanAction() + (street ? ' на ' + street : '') + ', проезжаем ' + segments[j].getLength() + ' м.,');
                moveList += '
'
            }
        }
        moveList += 'Останавливаемся.';
        // Выводим маршрутный лист.
        $('#list').append(moveList);
    }, function (error) {
        alert('Возникла ошибка: ' + error.message);
    });
}

Вам нужно сохранить ссылку на route

ну я не понимаю вас, напишите пример какой то или ссылку на описание или пример, и укажите что является ссылкой или в api где об этом говориться.

я вообще не очень понимаю, в api написано что route это статическая функция , соответственно она может что то хранить ?,

и если этим myMap.geoObjects.add(route); - мы добавляем route на карту, следовательно remove' ом мы можем удалить ?

 

а про ссылку я не понял, ничего ...

АПИ здесь ни причем, это просто вопрос по javascript.

покажите как вы пытаетесь удалить маршрут.

хм..

примерно так

 

..

    ]).then(function (route) {
   
          if(isroute){
          myMap.geoObjects.remove(route);
          }
         
        myMap.geoObjects.add(route);

..

..

        moveList += 'Останавливаемся.';
        isroute = true;
        // Выводим маршрутный лист.
        //$('#list').append(moveList);
    }, function (error) {

..

 

но как я понял удалять route не нужно, а что то другое - чего я не понял

у вас есть обработчик ответа маршрутизатора.
.then(function (route) {
в нем единственным параметром передается НОВЫЙ объект-маршрут. Вы его пытаетесь удалить, а затем добавляете на карту.

..так что вы мне посоветуете ?,

я понял что нужно удалять не здесь, но как я писал в самом начале, я не понимаю что и откуда нужно удалять в таком примере http://api.yandex.ru/maps/jsbox/router

заранее благодарен.

Удалять нужно как раз здесь,

но только не новый маршрут, а тот что был получен ранее.

См. мой первый ответ

Я советую набрать в поисковике "Javascript замыкание" и потратить 5 минут на то, чтобы разобраться немного в том языке, на котором Вы пытаетесь писать.

 

function init() {
    var myMap = new ymaps.Map("map", {
            center: [55.745508, 37.435225],
            zoom: 13
        }),
        myRoute;

    // Добавим на карту схему проезда
    // от улицы Крылатские холмы до станции метро "Кунцевская"
    // через станцию "Молодежная" и затем до станции "Пионерская".
    // Точки маршрута можно задавать 3 способами:
    // как строка, как объект или как массив геокоординат.
    ymaps.route([
        'Москва, улица Крылатские холмы',
        {
            point: 'Москва, метро Молодежная',
            // метро "Молодежная" - транзитная точка
            // (проезжать через эту точку, но не останавливаться в ней).
            type: 'viaPoint'
        },
        [55.731272, 37.447198], // метро "Кунцевская".
        'Москва, метро Пионерская'
    ]).then(function (route) {
        myRoute && myMap.geoObjects.remove(myRoute);
        myMap.geoObjects.add(myRoute = route);
        // Зададим содержание иконок начальной и конечной точкам маршрута.
        // С помощью метода getWayPoints() получаем массив точек маршрута.
        // Массив транзитных точек маршрута можно получить с помощью метода getViaPoints.
        var points = route.getWayPoints(),
            lastPoint = points.getLength() - 1;
        // Задаем стиль метки - иконки будут красного цвета, и
        // их изображения будут растягиваться под контент.
        points.options.set('preset', 'twirl#redStretchyIcon');
        // Задаем контент меток в начальной и конечной точках.
        points.get(0).properties.set('iconContent', 'Точка отправления');
        points.get(lastPoint).properties.set('iconContent', 'Точка прибытия');

        // Проанализируем маршрут по сегментам.
        // Сегмент - участок маршрута, который нужно проехать до следующего
        // изменения направления движения.
        // Для того, чтобы получить сегменты маршрута, сначала необходимо получить
        // отдельно каждый путь маршрута.
        // Весь маршрут делится на два пути:
        // 1) от улицы Крылатские холмы до станции "Кунцевская";
        // 2) от станции "Кунцевская" до "Пионерская".

        var moveList = 'Трогаемся,
',
            way,
            segments;
        // Получаем массив путей.
        for (var i = 0; i < route.getPaths().getLength(); i++) {
            way = route.getPaths().get(i);
            segments = way.getSegments();
            for (var j = 0; j < segments.length; j++) {
                var street = segments[j].getStreet();
                moveList += ('Едем ' + segments[j].getHumanAction() + (street ? ' на ' + street : '') + ', проезжаем ' + segments[j].getLength() + ' м.,');
                moveList += '
'
            }
        }
        moveList += 'Останавливаемся.';
        // Выводим маршрутный лист.
        $('#list').append(moveList);
    }, function (error) {
        alert('Возникла ошибка: ' + error.message);
    });
}

Аллилуйя  !!!,

вот оно !! спасибо

 

..можно обновить и пример в писочнице.