Клуб API Карт

API 2.0 очистка всей карты

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

Добрый день. Подскажите пожалуйста, как очистить всю карту от объектов или запустить её заново?

Документацию читал, но пока ещё очень слаб в js и многое не понимаю как реализовать. Вот мой код.

 

    $('#select_city').dropdown('set selected', $('#city_name').text());
    $('#select_office_city').dropdown('set selected','Ростов-на-Дону');
    var distance=0;
    ymaps.ready(init);
   
    function init(){
   
    var geocoder = new ymaps.geocode($('#city_name').text(),{ results: 1 });
   
    geocoder.then( function (res) {
    var coord = res.geoObjects.get(0).geometry.getCoordinates();
    var map = new ymaps.Map('map', {
    center: coord,
    zoom: 7,
    behaviors: ['default', 'scrollZoom'],
    controls: ['mapTools']
    });
    cityPath($('#select_office_city').dropdown('get text'));
    map.geoObjects.add(res.geoObjects.get(0));
    map.controls.add('mapTools').add('zoomControl').add('typeSelector');
    var myCollection = new ymaps.GeoObjectCollection();
   
    function cityPath(tocity) {
        geocoder=ymaps.geocode(tocity,{ results: 1 });
            geocoder.then( function (res) {
                coord = res.geoObjects.get(0).geometry.getCoordinates();
                map.geoObjects.add(res.geoObjects.get(0));
                map.panTo(coord, {flying: 1});
                ymaps.route([
                    $('#select_city').dropdown('get text'),
                    $('#select_office_city').dropdown('get text')
                    ]).then(function (route) {
                        map.geoObjects.add(route);
                        var points = route.getWayPoints(),
                        lastPoint = points.getLength() - 1;
                        distance=Math.round(route.getLength()/1000);
                        points.options.set('preset', 'twirl#redStretchyIcon');
                        points.get(0).properties.set('iconContent', $('#select_city').dropdown('get text')+" "+distance+" км");
                        points.get(lastPoint).properties.set('iconContent', $('#select_office_city').dropdown('get text')+" "+distance+" км");
                        var moveList = 'Трогаемся,</br>',
                        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 += '</br>'
                        }
                        }
                        moveList += 'Останавливаемся.';
                        $('#list').append(moveList);
                        }, function (error) {
                        alert('Возникла ошибка: ' + error.message);
                        }
                        );
   
            });
    }
   
    $('#select_city').dropdown({
        onChange: function() {

здесь как то нужно очистить всю карту
            cityPath($('#select_city').dropdown('get text'));
        }
    });
    $('#select_office_city').dropdown({
        onChange: function() {

здесь как то нужно очистить всю карту
            cityPath($('#select_office_city').dropdown('get text'));
        }
    });
   }
);
}

 

 

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

Код лучше убирать под кат, никто не любит когда в ленту приходит пост на 3 экрана.

Редактирование поста -> кнопка врезка

очистить карту (удалить все объекты из коллекции карты)

можно методом removeAll();

map.geoObjects.removeAll();

Спасибо, но в этой версии API нет такого метода. Есть только remove(object). Можно было бы создать какой то массив с объектами и потом просто удалить в цикле, но я не могу понять как это сделать.

arrayobject.push(что?);

remove(arrayobject[0]);?

а, да 2.0...

добавляйте свои объекты в отдельную коллекцию ymaps.GeoObjectCollection и ее уже на карту.

Этой коллекции можно делать removeAll()

Извините, а как это делать? Я ещё очень плохо соображаю в js.

Как мне создавать эту коллекцию?

map.geoObjects.add(res.geoObjects.get(0))
ICollection.add(res.geoObjects.get(0));
И потом ICollection.removeAll();?

нет, ICollection это интерфейс

var collection = new ymaps.GeoObjectCollection();

map.geoObjects.add(collection);

...

collection.add(res.geoObjects.get(0));

...

collection.removeAll();

Спасибо большое!