Клуб API Карт

вывод одних и тех же объектов на двух картах

Пост в архиве.
Павел
19 марта 2014, 11:30

вывожу две разные карты - для авто и для пешехода.

На обоих картах надо выводить одинаковые объекты, но код


Map1.geoObjects.add(myPlacemark);
Map2.geoObjects.add(myPolyline);
Map2.geoObjects.add(myPlacemark);

 

выводит метку только на второй карте.

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

Метка может быть прикреплена только к одному родителю. Поэтому вам нужно создавать метки парами для двух карт.

myPlacemark1 = myPlacemark2 = new ymaps.Placemark([55.98406, 37.217993], {}, {

        preset: 'islands#redDotIcon'

    });

 

тот же результат( или то имели ввиду?

Такой код 

myPlacemark1 = myPlacemark2 = new ymaps.Placemark([55.98406, 37.217993], {}, {

        preset: 'islands#redDotIcon'

    });

создает 1 объект и 2 ссылки на этот объект. То есть по сути метка все равно одна и та же.

 

myPlacemark1 = new ymaps.Placemark([55.98406, 37.217993], {}, {

        preset: 'islands#redDotIcon'

    });

myPlacemark2 = new ymaps.Placemark([55.98406, 37.217993], {}, {

        preset: 'islands#redDotIcon'

    });

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

 

спасибо. буду думать, как обойти это

может быть сможете и тут подсказать.

 

решил попробовать вынести переменную:

var myPlacemark = new ymaps.Placemark([55.76, 37.64], { }, {

        preset: 'islands#redDotIcon'

    });

ymaps.ready(init);


в версии api 2.0 такая штука работает, а в 2.1 - нет. Мой косяк?

По этому коду нельзя понять, в чем проблема, приведите код целиком

в api 2.1 так не работает:

var myPlacemark = new ymaps.Placemark(myMap.getCenter());

 

ymaps.ready(function () {

    var myMap = new ymaps.Map('YMapsID', {

        center: [55.733835, 37.588227],

        zoom: 12,

        controls: []

    });

    myMap.geoObjects.add(myPlacemark);

});

 

так работает:

ymaps.ready(function () {

    var myMap = new ymaps.Map('YMapsID', {

        center: [55.733835, 37.588227],

        zoom: 12,

        controls: []

    });

 

    var myPlacemark = new ymaps.Placemark(myMap.getCenter());

    myMap.geoObjects.add(myPlacemark);

});

 

в api 2.0 работают оба варианта

Странно, что в 2.0 работают оба варианта - вы создаете плейсмарк до создания карты, соответственно 

var myPlacemark = new ymaps.Placemark(myMap.getCenter());

не будет работать, так как myMap еще не создан

вместо myMap.getCenter()  можно и координаты подставить - привязки к myMap тогда и не будет. и работать все равно не будет

к методам АПИ надо обращаться только внутри обработчика ymaps.ready

Если нужно использовать замыкание, сделайте так:

 

var myPlacemark;
ymaps.ready(function () {
    myPlacemark = new ymaps.Placemark(...);
});

мне нужно создать одну метку и использовать ее в двух картах. Как это можно сделать правильно?

А может сделать не 2 карты, а одну? и переключать режимы "пешеход"/"авто"

можно ссылку на такой переключатель?

нет, у меня такого нет :-|

я предполагал, что вы сами напишите логику, которая будет при нажатии на вашу кнопку будет убирать с карты одни элементы и добавлять другие

все равно, если я правильно, понимаю, то будет 2 функции между которыми надо как то кидать объекты

спасибо!B-)

 

вот такой код сделал в итоге

ymaps.ready(init);

 

var myMap;

 

function init () {

   

    myMap = new ymaps.Map(    

        'map',

        {

            center: [55.6420, 37.17993],

        type: 'yandex#map',

        zoom: 12,

        controls: ['zoomControl', 'typeSelector', 'trafficControl']

        }

    );

    var myPlacemark = new ymaps.Placemark([55.6406, 37.17993], {    }, {

        preset: 'islands#redDotIcon'

    });

 

    myMap.geoObjects.add(myPlacemark);

}

 

function reinit () {

    myMap.destroy(); 

    ymaps.ready(init);

}

 

function TypeBus () {

   myMap.setZoom('17');

    myMap.setType('yandex#publicMap');

   myMap.panTo([55.6420, 37.17993]);

     var myPolyline = new ymaps.Polyline(

    [[55.83668,37.11649],[55.83854,37.124],[55.84907,37.13119],[55.85039,37.14009],[55.85394,37.14878],[55.85502,37.16595],[55.85015,37.17893],[55.84396,37.17625]], { }, {strokeColor: '#60BFF3', strokeWidth: 8, strokeOpacity: 0.5 });

    

    myMap.geoObjects.add(myPolyline);

}

пока вот такой костыль:

 

var c1 = '55.733835'

var c2 = '37.588227';

var txt = ''+

            'Офис Яндекса в Москве2'+

            '
'+

            'Адрес: 119021, Москва, ул. Льва Толстого, 16'+

            '
'+

            'Подробнее: http://company.yandex.ru/">http://company.yandex.ru/'+

            '';

var typeP = 'islands#redDotIcon'

 

ymaps.ready(function () {

    var myMap = new ymaps.Map('YMapsID', {

        center: [55.733835, 37.588227],

        zoom: 12,

        // Обратите внимание, что в API 2.1 по умолчанию карта создается с элементами управления.

        // Если вам не нужно их добавлять на карту, в ее параметрах передайте пустой массив в поле controls.

        controls: []

    });

 

    var myPlacemark = new ymaps.Placemark([c1, c2], {        balloonContentBody: [txt].join('')    }, {

        preset: typeP

    });

 

    myMap.geoObjects.add(myPlacemark);

});