Клуб API Карт

Добавление меток на несколько карт

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

Добрый день. Возникла проблема, не отображаются метки на нескольких картах. На странице сделаны div-блоки, скрывающиеся/появляющиеся по запросу. В эти блоки я вставляю разные карты. в <head> у меня следующий скрипт: 

 

<script type="text/javascript">

    ymaps.ready(init);

 

    function init() {

        // Общая карта

        var shop_ya_all = new ymaps.Map('shop_ya_all', {

            center: [55.75267, 37.617671],

            zoom: 9.8

        });

        // Добавление элементов управления

        shop_ya_all.controls

            .add('zoomControl', {

            left: 5,

            top: 5

        })

            .add('typeSelector');

 

        // Карта первого магазина

        shop_ya_1 = new ymaps.Map('shop_ya_1', {

            center: [55.551418, 37.684701],

            zoom: 15

        });

        shop_ya_1.controls

            .add('zoomControl', {

            left: 5,

            top: 5

        })

            .add('typeSelector');

        // Инициализация меток

        myPlacemark1 = new ymaps.Placemark([55.551420, 37.684667], {

            // Свойства.

            // Содержимое иконки, балуна и хинта.

            iconContent: '1',

            balloonContent: 'Балун',

            hintContent: 'Стандартный значок метки'

        }, {

            // Опции.

            // Стандартная фиолетовая иконка.

            preset: 'twirl#violetIcon'

        });

 

        // Добавление меток на карту

        shop_ya_all.geoObjects

            .add(myPlacemark1);

 

        /* shop_ya_1.geoObjects

.add(myPlacemark1); */

    }

</script>

 

я хочу добавить сразу все метки, но на общую карту вывести их все, а на детальные карты магазинов вывести по одной. Не получается( Что я делаю не так?

6 комментариев
Уберите портянку кода под кат.

Пока что нельзя добавить одну и ту же метку на несколько карт.
Могу предложить альтернативное решение:
сохраните опции и координаты в объект, нечто вроде:
var placemarkData = {
   coords: [55.551420, 37.684667],
   properties: { … },
   options: { … }
};


Далее можно просто для каждой карты создавать свою метку из данных.
shop_ya_all.geoObjects.add(new ymaps.Placemark(
    placemarkData.coords,
    placemarkData.properties,
    placemarkData.options
));

shop_ya_1.geoObjects.add(new ymaps.Placemark(
    placemarkData.coords,
    placemarkData.properties,
    placemarkData.options
));

спасибо огромное, добрый человек) вроде работает) 

 

хотя как то печально, что нельзя сделать базу placemark'ов, и добавлять их в разные карты.. но мб я сам что то не так делаю, и гораздо логичнее было бы сделать не скрывающиеся div-блоки, а одну карту, но изменяющуюся по экшнам?

 

я как то на фрилансе закидывал удочку, никто не откликнулся, может тут умельцы есть, переделать по-человечески?

Кейс очень редкий, но возможно когда-нибудь такая возможность появится.

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

смотри, общая диспозиция такова (да простит меня яндекс за "не по теме"). грубо говоря шесть магазов. 

семь карт. одна - общий план с отображением всех магазов. и по одной крупным планом каждый магаз. как это грамотно было бы реализовать? 

добавляешь все метки на карту, а когда нужен «крупный план» — просто зуммируешь на нужную.

// Общая карта

var shop_ya_all = new ymaps.Map('shop_ya_all', {

center: [55.75267,37.617671],

zoom: 9.8

});

// Добавление элементов управления

shop_ya_all.controls

.add('zoomControl', { left: 5, top: 5 })

.add('typeSelector');

 

// Карта первого магазина (Видное)

shop_ya_1 = new ymaps.Map('shop_ya_1', {

            center: [55.551418, 37.684701],

            zoom: 15

        });

shop_ya_1.controls

.add('zoomControl', { left: 5, top: 5 })

.add('typeSelector');

// Карта второго магазина (Люблино)

shop_ya_2 = new ymaps.Map('shop_ya_2', {

            center: [55.651823, 37.844467],

            zoom: 15

        });

shop_ya_2.controls

.add('zoomControl', { left: 5, top: 5 })

.add('typeSelector');

 

// Метки 

// Данные Видное

placemarkData1 = {

coords: [55.551420, 37.684667],

properties: {

iconContent: '1',

balloonContent: 'Видное, все такое',

hintContent: 'описание метки'

},

options: {preset: 'twirl#redIcon'}

};

// Данные Люблино

placemarkData2 = {

coords: [55.651823, 37.844467],

properties: {

iconContent: '2',

balloonContent: 'Люблино, все такое',

hintContent: 'описание метки'

},

options: {preset: 'twirl#redIcon'}

};

 

shop_ya_all.geoObjects.add(new ymaps.Placemark(

placemarkData1.coords,

placemarkData1.properties,

placemarkData1.options

));

shop_ya_all.geoObjects.add(new ymaps.Placemark(

placemarkData2.coords,

placemarkData2.properties,

placemarkData2.options

));

 

shop_ya_1.geoObjects.add(new ymaps.Placemark(

placemarkData1.coords,

placemarkData1.properties,

placemarkData1.options

));

 

короче такого вида код, не выводит(