Клуб API Карт

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

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

Собственно пара вещей

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

На карте располагаю пару меток таким образом

var objManager_from = new YMaps.ObjectManager();
map.addOverlay(objManager_from);
objManager_from.add(placemark_from);

и рисую линию маршрута

var route = router.getRoute(j);

...

style = new YMaps.Style();
style.lineStyle = new YMaps.LineStyle();
style.lineStyle.strokeWidth = 5;
style.lineStyle.strokeColor = color_rgba;
route.setStyle(style);

Вот и не могу найти способ, как, например, по нажатию своей кнопки на тулбаре карты сделать карту "чистенькой"

Как сделать кнопку и обработчик события на ней - знаю как. Интересует именно удаление всех моих наложенных деталей.

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

Заранее спасибо за советы и помощь.

12 комментариев
Не очень понял зачем Вам Object.Manager в этой задаче
Он вроде как для других целей предназначен.

1) Убрать все объекты с карты можно вызвав метод map.removeAllOverlays()
2) Можно пройтись по маршруту методом forEach и добавить на карту только нужное
про map.removeAllOverlays() я знаю, но в данном случае почему то ничего не происходило. Правда я уже на скорую руку это делал, и не трассерил...может быть сама map при клике на кнопку не определена у меня была. попробую еще...


Можно пройтись по маршруту методом forEach и добавить на карту только нужное


Т.е можно обработать саммому тот момент, когда происходит добавление всех объектов на карту в результате роутинга?

Т.е можно обработать саммому тот момент, когда происходит добавление всех объектов на карту в результате роутинга?

Нет
можно не добавлять весь маршрут на карту сразу после создания роутера
 
var router = new YMaps.Router([...]);
// map.addOverlay(router);

а добавлять только то что нужно в обработчике Success:
 

            YMaps.Events.observe(router, router.Events.Success, function (router) {
                router.forEach(function (obj) {
                    /* console.log(obj instanceof YMaps.Route); - сегмент маршрута */ 
                    /* console.log(obj instanceof YMaps.WayPoint); - одна из точек */
                    if (obj instanceof YMaps.Route) {
                        map.addOverlay(obj);
                    }
                });

Не обязательно использовать instanceof для определения маршрутов. Можно воспользоваться двумя стандартными методами маршрутизатора: getRoute() и getNumRoutes().
YMaps.Events.observe(router, router.Events.Success, function (router) {
    for (var i = 0, l = router.getNumRoutes(); i < l; i++) {
        map.addOverlay(router.getRoute(i));
 } 
});

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

YMaps.Events.observe(router, router.Events.Success, function (router) {
    var routes = router.filter(function (obj) {
        return obj instanceof YMaps.Route;
    });
    map.addOverlay(routes);
});
Спасибо..Сегодня попробую эти способы.

Ну а удалить маршрут получилось map.removeAllOverlays(), что и следовало ожидать. Просто первоначально, поспешив, я из моего обработчика "не видел" map.
На самом деле удалять с помощью removeAllOverlays() достаточно жестко)
Я бы лучше сохранял указатель на маршрут(ы) и удалял только их.

А вдруг вы потом захотите, чтобы на карте после удаления маршрутов оставались какие-то объекты? Вам придется тогда часть кода переписывать.
Да, я понимаю этот момент.  Но в данной ситуции мне необходимо просто полностью очистить карту.

У меня не получается убрать все объекты с карты

Делаю так

ymaps.ready(function() {
mymap = new ymaps.Map(container, {
// Центр карты
center: [word[0], word[1]],
// Коэффициент масштабирования
zoom: 10
})
mymap.controls.add("mapTools")
// Добавление кнопки изменения масштаба
.add("zoomControl")
// Добавление списка типов карты
.add("typeSelector"); 

 

 

this MapDel = function()

mymap.removeAllOverlays( ) ;

 

Пишет

"removeAllOverlays is not a function" 

все правильно,

нет такого метода (Вы его из первого АПИ взяли?)

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

и ее удаляйте с карты

myMap.geoObjects.remove(myCollection);

Да, искал аналог первого АПИ. Странно, до этого добавлял myMap.geoObjects.remove(myCollection); - но почему-то не работало, сейчас заново добавил - все заработало. Спасибо!

 

Сейчас сделал следующее

this.Run = function(drivers, warehouses, orders)
{
mymap.geoObjects.remove(DriverCollection);
var driversPlacemark = [
['driver1', 'Петров', 'Петр', 'Петрович', '50.849722', '53.204727', '123457', 'свободен'],
['driver2', 'Иванов', 'Иван', 'Иванович', '50.859722', '53.214727', '321654', 'взял заказ'],
['driver3', 'Сидоров', 'Сидр', 'Сидорович', '50.879722', '53.234727', '987654', 'неактивен']
];
for (i = 0; i < driversPlacemark.length; i++) {
var longitude = driversPlacemark[i][4], latitude = driversPlacemark[i][5];
var driver = new ymaps.Placemark([longitude , latitude],
{
name : driversPlacemark[i][0],
balloonContentHeader: driversPlacemark[i][1] + ' ' + driversPlacemark[i][2] + ' ' + driversPlacemark[i][3],
balloonContentBody: 'телефон:' + driversPlacemark[i][6] + '
статус: ' , // содержимое балуна
balloonContentFooter: ''
}
/*{
draggable: true
}*/);
DriverCollection.add(driver);
}
mymap.geoObjects.add( DriverCollection);
}

На карте метки не удаляются, а добавляются. Т.е. первый вызов - 3 метки, второй - 6 и т.д. Как быть?

Все разобрался - нужно вызывать DriverCollection.removeAll( ) ;