Клуб API Карт

Найдено на тему «GeoObjectCollection»:
Удаление GeoObjectCollection по событию из вне
Виталий
1 октября 2017, 13:36

Добрый день! Не могу разобраться почему не работает. 
Необходимо добавить/удалить полигон по кнопке вне карты. 

$('input[type="checkbox"]').change(function() {
var arr = [всякие данные];
var myGeoObjects = new ymaps.GeoObjectCollection({}, {
    strokeWidth: 2,
    strokeColor: '#c8180f',
    geodesic: true
});
/*if (!$(this).is(":checked")) {
   var arr = []; пытался передовать пустой массив 
}*/
console.log(arr);
for (var i = 0; i < arr.length; i++) {
	item = arr[i];
	myGeoObjects.add(new ymaps.Polygon([item]));
}
myMap.geoObjects.add(myGeoObjects); //коллекция добавляется


if (!$(this).is(":checked")) { // ничего не работает
	//console.log("no :checked"); условие срабатывает
	//console.log(myGeoObjects.toArray());
		myGeoObjects.removeAll();
		//myGeoObjects.splice(0, 3);
		//myMap.geoObjects.remove(myGeoObjects);
};
setTimeout(function(){ // через setTimeout все удаляется
	//myGeoObjects.splice(0, 3);
	//myGeoObjects.removeAll();
  //myMap.geoObjects.remove(myGeoObjects);
}, 5000);
});

Подскажите пожалуйста, полдня убил.

3 комментария
GeoObjectCollection
Как удалять метки, поставленные через setFilter, при обновлении RemoteObjectManager?
Melody Nelson
21 октября 2016, 16:14
В init получаю features из RemoteObjectManager
var objectManager = new ymaps.RemoteObjectManager('/api/maps/getFeatures&bbox=%b&zoom=%z',
{
    clusterHasBalloon: true,
    splitRequests: false,
    geoObjectOpenBalloonOnClick: false,
    clusterHideIconOnBalloonOpen: false
});

В зависимости от масштаба это либо полигоны - округа или районы, либо точки. У каждого округа и района в details есть цифра, и ее нужно выводить меткой, только когда виден этот округ/район.

Создаю коллекцию для будущих меток:

var myGeoObjects = new ymaps.GeoObjectCollection({}, {
                        preset: "islands#redCircleIcon",
                        strokeWidth: 4,
                        geodesic: true
                    });

В setFilter высчитываю центр полигона и помещаю метку в коллекцию:

cameraObjectManager.setFilter(function(object) {
    if (object.properties.details.objectType == 'DISTRICT') {
        var polygonGeometry = new ymaps.geometry.Polygon(object.geometry.coordinates);
        polygonGeometry.setMap(myMap);
        polygonGeometry.options.setParent(myMap.options);
        var pixelBounds = polygonGeometry.getBounds();
        var pixelCenter = [pixelBounds[0][0] + (pixelBounds[1][0] - pixelBounds[0][0]) / 2, (pixelBounds[1][1] - pixelBounds[0][1]) / 2 + pixelBounds[0][1]];

        var myPlacemark = new ymaps.Placemark(
            pixelCenter, {
                iconContent: object.properties.details.cameraCount,
                hintContent: object.properties.details.name,
                balloonContentBody: object.properties.details.name + ": " + object.properties.details.cameraCount + " камер"
            }, {
                preset: 'islands#blackStretchyIcon'
            }
        );

        myGeoObjects.add(myPlacemark);
    }


    return true;
});

и добавляю на карту:

myMap.geoObjects.add(objectManager);
myMap.geoObjects.add(myGeoObjects);

Как сделать так, чтобы при каждом обновлении RemoteObjectManager, предыдущие метки из этой коллекции удалялись? Сейчас, если я масштабирую с района на округ, то районные метки остаются, и добавляется окружная метка. Нужно, чтобы удалялись только они, но не метки, полученные через сам RemoteObjectManager.

Что и в какой момент нужно вызывать, чтобы эта коллекция меток очищалась и удалялась с карты при каждом зуме/запросе RemoteObjectCollection?

GeoObject,GeoObjectCollection,RemoteObjectManager,Polygon,placemark
Сортировка меток по геолокации
apaboss
18 августа 2016, 07:43

Есть код, он выводит заголовки меток в генерируемое меню

пример из песочницы: https://tech.yandex.ru/maps/jsbox/2.1/ymapsml_menu

Мой код, с определением геолокации по ip

ymaps.ready(init);

function init () {
    // Создание экземпляра карты
    var geolocation = ymaps.geolocation,
     myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 12
        }, {
            searchControlProvider: 'yandex#search'
        });
        
        geolocation.get({
        provider: 'yandex',
        mapStateAutoApply: true
    }).then(function (result) {
        // Красным цветом пометим положение, вычисленное через ip.
        result.geoObjects.options.set('preset', 'islands#redCircleIcon');
        result.geoObjects.get(0).properties.set({
            balloonContentBody: 'Мое местоположение'
        });
        myMap.geoObjects.add(result.geoObjects);
    });
    
    
        
        ymaps.geoXml.load('/map1.xml?v=' + (+new Date()))
        .then(function (res) {
            res.geoObjects.each(function (item) {
                addMenuItem(item, myMap);
            });
        },
        // Вызывается в случае неудачной загрузки YMapsML-файла.
        function (error) {
            alert("При загрузке YMapsML-файла произошла ошибка: " + error);
        });
        
        function addMenuItem(group, map) {
        // Показать/скрыть группу геообъектов на карте.
        $("<a class=\"title\" href=\"#\">" + group.properties.get('name') + "</a>")
            .bind("click", function () {
                var link = $(this);
                // Если пункт меню "неактивный", то добавляем группу на карту,
                // иначе - удаляем с карты.
                if (link.hasClass("active")) {
                    map.geoObjects.remove(group);
                } else {
                    map.geoObjects.add(group);
                }
                // Меняем "активность" пункта меню.
                link.toggleClass("active");
                return false;
            })
            // Добавление нового пункта меню в список.
            .appendTo(
                $("<li></li>").appendTo($("#map_menu"))
            );
    }  

}

Задача: сделать автоматическую сортировку вывода меток в зависимости от их геолокации. Например, если пользователь из Питера, вывести в эту менюшку* именно те метки, которые расположены в Питере.

Понимаю, что нужно собрать "Питерские" метки в коллекцию, и из нее уже выводить. Но как сделать этот вывод автоматическим, исходя из геолокации?

4 комментария
geolocation,GeoObjectCollection
Отобразить XML из переменной
Удалённый пользователь
20 апреля 2016, 10:51

Добрый час!

Есть сгенерированная переменная содержащая текст XML (метки и их описание, линии...).

Как отобразить на карте данные этой переменной, а не загружая файл по URL через geoXml.load?

Возможно как то преобразовать XML текст в GeoObjectCollection?

1 комментарий
XML,geoXml,GeoObjectCollection
привязать маркер и пункт меню
Дарья Миронова
24 марта 2016, 12:07

Здравствуйте направьте меня на правильный путь. Сейчас у меня на карте есть маркеры которые добавлены через коллекцию myCollection . и у меня есть тулбар со списком объектов которые на карту добавлены. Хочу сделать чтобы при наведении на объект из списка http://prntscr.com/ajabqk у меня у соотвествующего маркера появлялся hint . Как я понимаю это надо сделать привязку маркера из коллекции к событию коллекции(действие при наведении) Не знаю как это только сделать. И как из коллекции выбрать к примеру третий маркер? 

6 комментариев
Map,GeoObjectCollection
Перенос объектов из GeoObjectCollection
Artem Vozhzhov
22 июня 2015, 17:34

Всем привет!

 

Столкнулся с проблемой следующего характера: у меня есть GeoObjectCollection с объектами GeoObject и мне нужно из этой коллекции перенести объекты в другие коллекции.

 

Вот как я делаю

 

var collection = new ymaps.GeoObjectCollection(),
collectionEven = new ymaps.GeoObjectCollection(),
collectionOdd = new ymaps.GeoObjectCollection();

// здесь добавлены объекты в коллекцию collection

// а затем я хочу раскидать объекты по соотвествующим коллекциям.
collection.each(function (geoObject, i) {
if (i % 2 == 0)
collectionEven.add(geoObject);
else
collectionOdd.add(geoObject);
});

// и тут я обнаруживаю, что не все элементы коллекции collection были перенесены
// а половина
console.log(collection.getLength());

Что я делаю неправильно?

ЗЫ Пытался делать с помощью итератора, та же фигня:(

4 комментария
API 2.1,GeoObject,each,GeoObjectCollection