Клуб API Карт

метки, AJAX

green-sparrow
12 июня 2011, 10:56

По нажатию на пункт меню происходит загрузка данных о метках через AJAX. Потом содаются сами метки и объединяются в группу, затем группа меток выводится на карту. 

Консоль JavaScript в хроме не выводит никаких ошибок, но метки не появляются.

 

// создаем карту

 

var map;

 

YMaps.jQuery(function () {

    map = new YMaps.Map(YMaps.jQuery("#YMaps")[0]

    map.setCenter(new YMaps.GeoPoint($map_center), $map_scale);

    map.setType(YMaps.MapType.MAP);

 

    map.disableDblClickZoom(

    map.enableScrollZoom(

 

    map.addControl(new YMaps.Zoom()

}

 

 

// Функции создания метки и группы были взяты от сюда.

 

 

// Создает метку (координаты, имя, описание)

function createPlacemark (point, name, description) {

    var placemark = new YMaps.Placemark (new YMaps.GeoPoint (point)

 

    placemark.name = name;

    placemark.description = description;

 

    return placemark;

}

 

 

 

// Создает группу меток (название группы, массив меток, оформление)

function createGroup (title, objects, style) {

    group = new YMaps.GeoObjectCollection(style);

 

    group.title = title;

    group.add (objects);

 

    map.addOverlay(group);

}

 

 

// собственно создание и отображение меток

function show (result) {

 

    var plac_group = []; // массив меток

 

    var point;        // координаты метки

    var name;        // имя метки

    var description;// описание метки

 

    // создаем массив меток на карте

    for (var i = 0; i < result.length; i++) {

        point        = result[i].coords;

 

        name    = result[i].name;

        description    = result[i].address;

        // добавляем в массив метки

        plac_group.push(createPlacemark (point, name, description)

    }

    createGroup (name, plac_group, "default#greenPoint"); // создаем группу

}

 

 

И еще 1 вопрос: если сделать вот так:

 

 

var map;

YMaps.jQuery(function () {

    map = new YMaps.Map(YMaps.jQuery("#YMaps")[0]

    map.setCenter(new YMaps.GeoPoint(map_center), map_scale);

    map.setType(YMaps.MapType.MAP);

 

    map.disableDblClickZoom(

    map.enableScrollZoom(

 

    map.addControl(new YMaps.Zoom()

}

 

var placemark = new YMaps.Placemark (new YMaps.GeoPoint (point_s,point_d)

placemark.name = "11111";

placemark.description = "123123";

map.addOverlay (placemark); 

 

 

то выводится ошибка: Cannot call method 'addOverlay' of undefined

 

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

 

то выводится ошибка: Cannot call method 'addOverlay' of undefined

 

этот код 

var placemark = new YMaps.Placemark (new YMaps.GeoPoint (point_s,point_d));...

надо поместить выше в обработчик document.ready

те

 

....   

     map.addControl(new YMaps.Zoom()

    var placemark = new YMaps.Placemark (new YMaps.GeoPoint (point_s,point_d));

    placemark.name = "11111";

    placemark.description = "123123";

    map.addOverlay (placemark);

});

 

 

Спасибо. Сделал несколько по-другому - вынес эту строку за обработчик document.ready:<

var map = new YMaps.Map(YMaps.jQuery("#YMaps")[0]);

Разобрался и с первой проблемой - оказывается все отображается (увидел когда просмотрел карту в масштабе мира), но почему-то совершенно не в том месте

Все, разобрался. Дело оказалось в координатах метки, я их передавал одной строкой, а надо было разделить на две. Добавил в функцию создания метки разделение строки на подстроки:
var coordinates = point.split(",");

и изменил соответствующим образом саму функцию:
function createPlacemark (point, name, description) {
    var coordinates = point.split(",");
    var placemark = new YMaps.Placemark (new YMaps.GeoPoint (coordinates[0],coordinates[1]));

    placemark.name = name;
    placemark.description = description;

    return placemark;
}