Перенести метку в другой класс

Всем привет, не могу найти нужный способ написания функции, которая будет переносить существующую метку в новую коллекцию. Может есть какой то другой способ?

ymaps.ready(init);

var RiderCollection;
var massiveAdress;
var myGeocoder;
var myMap;
var myPlacemark;
var geoObjects;
var InstDriverCollection;

function init() {
    myMap = new ymaps.Map('map', {
        center: [55.755773, 37.617761],
        zoom: 9
    }, {
        searchControlProvider: 'yandex#search'
    }),

        HintLayout = ymaps.templateLayoutFactory.createClass( "<div class='my-hint'>" +
            "<b>{{ properties.object }}</b><br />" +
            "{{ properties.address }}<br />" +
            "{{ properties.comment }}" +
            "</div>", {

                getShape: function () {
                    var el = this.getElement(),
                        result = null;
                    if (el) {
                        var firstChild = el.firstChild;
                        result = new ymaps.shape.Rectangle(
                            new ymaps.geometry.pixel.Rectangle([
                                [0, 0],
                                [firstChild.offsetWidth, firstChild.offsetHeight]
                            ])
                        );
                    }
                    return result;
                }
            }
        );

    RiderCollection = new ymaps.GeoObjectCollection({},{})
    InstDriverCollection = new ymaps.GeoObjectCollection({},{})
    massiveAdress = [[55.73, 37.75], [55.81, 37.75], [55.73, 37.65], [55.81, 37.65]]

    myGeocoder = ymaps.geocode('Электросталь  Спортивная 26а');
    myGeocoder.then(


        function (res) {

            massiveAdress.push(res.geoObjects.get(0).geometry.getCoordinates())

            for (var i = 0, l = massiveAdress.length; i < l; i++) {
                RiderCollection.add(new ymaps.Placemark(massiveAdress[i],{
                    id: 'id_' +i,
                    hasBalloon: false,
                    balloonContent: 'содержимое балуна',
                    address: "Москва, ул. Зоологическая, 13, стр. 2",
                    object: "Центр современного искусства",
                    comment: "коментарий к заказукоментарий к заказукоментарий к заказукоментарий к заказукоментарий к заказукоментарий к заказу"
                },{
                    hintLayout: HintLayout
                }));
            }
            myPlacemark = new ymaps.Placemark([55.7, 37.5], {
                id: 'id_myPlacemark',

                hintContent: 'содержимое всплывающей подсказки'

            });

            myMap.geoObjects.add(myPlacemark);
            myMap.geoObjects.add(RiderCollection);
            myMap.geoObjects.add(InstDriverCollection);

            var inp = document.getElementById("inp");
            var btnAdd = document.querySelector(".btnAdd");
            var btnDel = document.querySelector(".btnDel");
            var list = document.querySelector('#list');
            var AddtoArray = document.querySelector('.AddtoArray');
            var clearMap = document.querySelector('.clearMap');
            var seachIdOnMap = document.querySelector('.seachIdOnMap');
            var arr = [];


            



        }
    );
}
function addMarker(coordin1, coordin2, nameAgent, opisanie, adressAgent, nomerZakaza) {
    RiderCollection.add(new ymaps.Placemark([coordin1, coordin2], {
        id: nomerZakaza,
        address: adressAgent,
        object: nomerZakaza,
        comment: opisanie
    }, {
        hintLayout: HintLayout
    }));

}
function deleteMarkDriver() {

    var myObj = getObjectById('id_4');
    RiderCollection.remove(myObj)
    function getObjectById(id) {
        return RiderCollection.filter(function (obj) {
            return obj.id == id;
        })[0];




    }}
function changeCollections(placemarkID) {

    let thisPlacemark2 = ymaps.geoQuery(myMap.geoObjects).search('properties.id = "placemarkID"')
    let objID = RiderCollection.indexOf(thisPlacemark2)
    InstDriverCollection.add(new ymaps.Placemark(
        ymaps.geoQuery(myMap.geoObjects).search('properties.id = placemarkID').get('target').properties.getAll(),
        ymaps.geoQuery(myMap.geoObjects).search('properties.id = placemarkID').get('target').options.getAll()))
    RiderCollection.remove(objID) // удаляю метку из старой коллекции

}


Ответы (1 шт):

Автор решения: Виктор Карев

Я бы не стал заморачиваться на geoQuery, а просто завёл свой список.

var RiderList = {};

function addMarker(coordin1, coordin2, nameAgent, opisanie, adressAgent, nomerZakaza) {
    const mark = new ymaps.Placemark([coordin1, coordin2], {
        id: nomerZakaza,
        address: adressAgent,
        object: nomerZakaza,
        comment: opisanie
    }, {
        hintLayout: HintLayout
    })
    RiderCollection.add(mark);
    RiderList[nomerZakaza] = mark;
}

function changeCollections(placemarkID) {
    let objID = RiderList[placemarkID];
    RiderCollection.remove(objID);
    InstDriverCollection.add(objID);
    delete RiderList[placemarkID];
}

Да и возможности контроля при этом увеличиваются.

→ Ссылка