Клуб API Карт

На карте больше меток чем нужно , почему ?

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

Добрый день,  есть код , он собирает массив адресов , а потом геокодирует их по очереди в цикле , после этого выводит метки на карту , вот сам код 

  

var massive_adres = $('.coords'); // массив адресов которые в последствии геокодируются и выводятся на карту 
massive_adres.each(function(i) {
    var objects = ymaps.geoQuery(ymaps.geocode($(this).text())).setOptions({
        iconLayout: 'default#image',
        iconImageHref: 'main/red_marker.png',
        iconImageSize: [20, 35],
        iconImageOffset: [-3, -42]
    }).setProperties({
        balloonContentHeader: $(this).data('title'),
        balloonContentBody: $(this).data('description')
    }).addToMap(myMap);
});

 

на входе к нему приходит ровно три адреса 

 

Москва, локомотивный пр-д 2Бс1


Москва, Чертановская, 52к3

Москва, Проспект мира, 99


но точек на карте 7 ,  почему и как вылечить ?

17 комментариев
Сергей Алпеев
27 января 2016, 23:44

вот тут пример http://propery.test.lmrk.ru/

Для одного адреса может прийти несколько ответов от сервера. Чтобы на 1 адрес приходил 1 ответ, нужно это явно прописать опциями.

Пример указания этой опции есть в песочнице http://api.yandex.ru/maps/jsbox/2.1/direct_geocode

 

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

Не надо геокодировать одно и тоже на каждом клиенте.

Геокодируйте (на сервере) сохраняйте координаты и стройте по ним метки

 

Сергей Алпеев
27 января 2016, 23:44

это понятно , мне нужно через js , но с этим я справился , теперь можете подсказать как именно сюда кластеризацию внедрить и можно ли это сделать , и как ?

var clusterer = objects.clusterize();

myMap.geoObjects.add(clusterer);

Сергей Алпеев
27 января 2016, 23:44

просто вставить и все ?

уберите добавление точек на карту и добавьте после создания objects написанный код

Сергей Алпеев
27 января 2016, 23:44

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

Если вы приведете код, мне будет проще найти в нем ошибку)

Сергей Алпеев
27 января 2016, 23:44

конечно =) 

 

вот полный код 

 

 



function init() {
                         var big_Map = false;
                        var myMap = new ymaps.Map('map', {
                                center: [55.666666, 37.788628],
                                zoom: 9,
                                behaviors: ['default', 'scrollZoom']
                            });
                       
                        var massive_adres = $('.coords'); // массив адресов которые в последствии геокодируются и выводятся на карту
                       
                     
                       
                       
                            massive_adres.each(function(i){
                                 
                                var objects = ymaps.geoQuery(ymaps.geocode($(this).text(),{results: 1}))
                               
                               
                                .setOptions({
                                        iconLayout: 'default#image',
                                        iconImageHref: 'main/red_marker.png',
                                        iconImageSize: [20, 35],
                                        iconImageOffset: [-3, -42]
                                       
                                 })
                                 
                                 
                                 
                                 
                                 .setProperties({
                                    balloonContentHeader:$(this).data('title'),
                                    balloonContentBody: $(this).data('description')
                                 })
                                 
                                  var clusterer = objects.clusterize(); 
                                 myMap.geoObjects.add(clusterer);
                               
                             
                            });
                       
                       
                       
                     
                       
                       
                    }
                   
                    ymaps.ready(init);
                       
                    });

Надо так

function init() {
                         var big_Map = false;
                        var myMap = new ymaps.Map('map', {
                                center: [55.666666, 37.788628],
                                zoom: 9,
                                behaviors: ['default', 'scrollZoom']
                            });
                        
                        var massive_adres = $('.coords'); // массив адресов которые в последствии геокодируются и выводятся на карту 
                        
                      
                        
                        
var objects = ymaps.geoQuery([]);                            massive_adres.each(function(i){
                                 
  objects = objects.add(ymaps.geoQuery(ymaps.geocode($(this).text(),{results: 1})));
});                       
                               
                                objects.setOptions({
                                        iconLayout: 'default#image',
                                        iconImageHref: 'main/red_marker.png',
                                        iconImageSize: [20, 35],
                                        iconImageOffset: [-3, -42]
                                        
                                 })
                                 
                                 
                                 
                                 
                                 .setProperties({
                                    balloonContentHeader:$(this).data('title'),
                                    balloonContentBody: $(this).data('description')
                                 })
                                 
                                  var clusterer = objects.clusterize();  
                                 myMap.geoObjects.add(clusterer);
                                
                              
                           
                       
                       
                        
                      
                        
                       
                    }
                    
                    ymaps.ready(init);
                        
                    });



(могла напутать со скобками, но общая идея такая)

Сергей Алпеев
27 января 2016, 23:44
по идее добавился только var objects = ymaps.geoQuery([]);    ?

ну там же дальше в него в цикле добавляются объекты

Сергей Алпеев
27 января 2016, 23:44
ага заметил , большое спаибо , добра вам ))
Сергей Алпеев
27 января 2016, 23:44
странно но

.setProperties({
                                    balloonContentHeader:$(this).data('title'),
                                    balloonContentBody: $(this).data('description')
                                 })

перестал работать , выводит то что по умолчанию

Поотлаживайте код. Посмотрите, чему равно значение переменной $(this).data('title')  и тд

 

Задание данных надо просто тоже вынести в цикл

Сергей Алпеев
27 января 2016, 23:44
очень странную "фичу" нашел , может баг ? в общем содержимое description у меня выводится в плейсхолдере , в чанке [[$description]] CMF modx и заработало только когда я убрал форматирование , т/е весь код вписал одной строкой

еще есть вопросик , появилась необходимость перезагружать метки на карте , я добавил такой код



// перезагрузка результатов
                               $("#reload_results").click(function(){
                                  myMap.geoObjects.remove(clusterer);
                                   
                                  var massive_coord = $(".coords");
                                  massive_coord.each(function(i){
                                      new_object = objects.add(ymaps.geoQuery(ymaps.geocode($(this).text(),{results: 1}))
                                  });
                                      var clus = new_object.clusterize();
                                      myMap.geoObjects.add(clus);
                                      console.log($(this).text());
                                  });
                              });
                       


console.log показывает что массив адресов собирается , я удаляю все метки с карты чтобы вывести новые (после фильтрации объектов недвижимости )  но новые метки почему то не появляются , почему ?