Клуб API Карт

Вопрос по кластеризации меток по ajax-запросу

alikmme
27 января 2013, 18:20

Доброго времени суток!

 

Пытаюсь получить данные из скрипта по нажатию на кнопку, и разместить точки в кластерах на уже загруженной карте.

Выглядит это дело так:


 

    <script type="text/javascript">
    ymaps.ready(init);
    
    function init() {
        var indexMap = new ymaps.Map("ymaps-map", {
            center: [37.617671, 55.75576799999372],
            zoom: 10,
            type: "yandex#map"
        });
        
        $('.amaplink').click(function(){
            $.ajax({
                url:'/?m=goods&a=index_map',
                type:'POST',
                datatype:'json',
                success: function(msg){
                    var clusterer = new ymaps.Clusterer();
                    var geoObjects = [];
                    if (parseInt(msg)!=0){
                        msg = JSON.parse(msg);
                        
                        for (var i=0;i<msg.length-1;i++){
                            var coordinates = [
                                msg[i]['ymap']
                            ];
                            geoObjects[i] = new ymaps.Placemark(coordinates,{
                                name: msg[i]['name'],
                                clusterCaption: msg[i]['name'],
                                balloonContentBody: msg[i]['description'],
                                balloonContentHeader: msg[i]['price'],
                                balloonContentFooter: ' надпись '
                            });
                        }
                    }
                    clusterer.add(geoObjects);
                    indexMap.geoObjects.add(clusterer);
                }
            }) 
            return false;
        });
    };

 

Собственно, ничего не выводит и вызывает ошибку JS. В скрипт данные приходят.

Вероятно, не могу разобраться с местоположением в скрипте (временем вызова) события добавления объектов в кластер, и далее - размещения кластера на карте.

Подскажите, пожалуйста, как правильно это сделать?

 

P. S. Последняя ошибка - "Uncaught TypeError: Cannot read property '0' of undefined"

11 комментариев
Подписаться на комментарии к посту

Попробуйте посмотреть, на какой строчке возникает ошибка. Может быть проблема в том, что какие-то используемые вами поля не определены (например msg[i]['ymap'])

Поля определены, все проверил.

Я не могу определиться, в каком месте вставлять создание кластера и размещение на карте. Потому что либо вылезают ошибки про то, что неизвестно - что такое кластер, то myMap не передается в функцию.

Тут решение где-то рядом, но я туплю.

А есть ссылка?

В доступе пока нет, к сожалению.

Вытащил ошибку "Uncaught Error: util.math.boundaryRestrict: не передан параметр value".

Очень тяжело понять, что не так, не имея на руках ваши исходные данные.

http://ссылку удалил

на первый взгляд, ошибка в парсинге запроса: координаты в Placemark должны быть переданы в виде массива чисел, а не строкой (в данный момент получается так: ["55.75021567903565,37.614073722093494"] — это массив из одной строки).

Я удивлен, но после применения msg[i]['ymap'].split(',') и дальнейшей подстановки [ str[0],str[1] ] все получилось!


Спасибо!

чтобы в будущем ничего вдруг не отвалилось, стоит сделать ещё parseFloat: [parseFloat(str[0]), parseFloat(str[1])]

Спасибо!