Перенести метку в другой класс
Всем привет, не могу найти нужный способ написания функции, которая будет переносить существующую метку в новую коллекцию. Может есть какой то другой способ?
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];
}
Да и возможности контроля при этом увеличиваются.