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

Существует несколько наборов меток, упакованных в отдельные JSON-файлы.
По желанию пользователя необходимо выводить нужный ему набор меток.

Сейчас я реализовал это с помощью ссылок на странице:
<a href="#" onclick="init();">Hey!</a>
<a href="#" onclick="init2();">Hey!</a>
<a href="#" onclick="init3();">Hey!</a>


По клику выполняется следующий код, каждый раз генерируя новую карту и удаляя старую:
function init () {
	$("ymaps").remove();
    var myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 10,
            controls: ['zoomControl']
        }, {
            searchControlProvider: 'yandex#search'
        }),
        objectManager = new ymaps.ObjectManager({
            clusterize: true,
            gridSize: 32
        });

    objectManager.objects.options.set('preset', 'islands#darkGreenCircleDotIcon');
    objectManager.clusters.options.set('preset', 'islands#invertedDarkGreenClusterIcons');
    myMap.geoObjects.add(objectManager);

    $.ajax({
        url: "1.json"
    }).done(function(data) {
        objectManager.add(data);
    });
}


Что-то мне подсказывает, что должен существовать более элегантный способ, при котором не надо будет вызывать каждый раз новую карту, а можно просто менять метки на уже существующей.
Я прав или ошибаюсь?

P.S. Решение найдено! Спасибо за советы!
ymaps.ready(init);
var myMap;

function init () {
    myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 11,
            controls: ['zoomControl']
        }, {
            searchControlProvider: 'yandex#search'
        }),
        objectManager = new ymaps.ObjectManager({
            clusterize: true,
            gridSize: 32
        });

    objectManager.objects.options.set('preset', 'islands#darkGreenCircleDotIcon');
    objectManager.clusters.options.set('preset', 'islands#invertedDarkGreenClusterIcons');
    myMap.geoObjects.add(objectManager);

    $.ajax({
        url: "1.json"
    }).done(function(data) {
        objectManager.add(data);
    });

}

function newpins () {
if(myMap)
myMap.geoObjects.removeAll();

objectManager = new ymaps.ObjectManager({
            clusterize: true,
            gridSize: 32
        });

objectManager.objects.options.set('preset', 'islands#darkGreenCircleDotIcon');
objectManager.clusters.options.set('preset', 'islands#invertedDarkGreenClusterIcons');
myMap.geoObjects.add(objectManager);

$.ajax({
url: "4.json"
}).done(function(data) {
objectManager.add(data);
});
}
  • Вопрос задан
  • 2514 просмотров
Решения вопроса 1
@reb00ter
Django developer
примерно
var myMap = new ymaps.Map('map', {
  center: [55.76, 37.64], 
  zoom: 10,
  controls: ['zoomControl']
}, {
   searchControlProvider: 'yandex#search'
});

function init () {
  if(myMap)
    myMap.geoObjects.removeAll();
  objectManager = new ymaps.ObjectManager({
    clusterize: true,
    gridSize: 32
  });
  objectManager.objects.options.set('preset', 'islands#darkGreenCircleDotIcon');
  objectManager.clusters.options.set('preset', 'islands#invertedDarkGreenClusterIcons');
  myMap.geoObjects.add(objectManager);

  $.ajax({
    url: "1.json"
  }).done(function(data) {
    objectManager.add(data);
  });
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы