Клуб API Карт

Меню из JSONа

YarmakIN
16 августа 2010, 15:07

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

Сочиняю меню на основе примера http://api.yandex.ru/maps/ymapsml/examples/menufromymapsml.html

только используя JSON в качестве источника данных (такоой формат:

Coords = [{"Name":"Уфа","Latitude":"54.732613","Longitude":"55.975669","Style":""},{"Name":"Тоже Уфа","Latitude":"54.740584","Longitude":"55.98452",""}];).

Вот что получается:

 function load()
{
    //Найдем на странице html элемент в котором будет размещаться карта
    map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);

    map.setCenter(new YMaps.GeoPoint(Coords[0].Longitude, Coords[0].Latitude), 10);
    map.addControl(new YMaps.ToolBar());
    map.addControl(new YMaps.Zoom());
    map.addControl(new YMaps.TypeControl());
    map.enableScrollZoom();

    for (i in Coords) {
    if (i > 0){
    addMenuItem(Coords[i], map);
    }
    }
    };

    // Добавление одного пункта в список
    function addMenuItem (group, map) {

    // Показать/скрыть группу на карте
    YMaps.jQuery("<a class=\"title\" href=\"#\">" + group.Name + "</a>")
    .bind("click", function () {
    var link = YMaps.jQuery(this);

    var point = new YMaps.GeoPoint(group.Longitude, group.Latitude);
    var placemark = new YMaps.Placemark(point);
    placemark.name = group.Name;
    placemark.description = "";

    var gCollection = new YMaps.GeoObjectCollection("");
    gCollection.add(placemark);


    // Если пункт меню "неактивный", то добавляем группу на карту,
    // иначе - удаляем с карты
    if (link.hasClass("active")) {
     map.removeOverlay(gCollection);
    } else {
     map.addOverlay(gCollection);
    }

    // Меняем "активность" пункта меню
    link.toggleClass("active");

    return false;
    })

    // Добавление нового пункта меню в список
    .appendTo(
    YMaps.jQuery("<li></li>").appendTo(YMaps.jQuery("#menu"))
    )
}

Вопроса 2:

1. Не срабатывает отзыв изображения группы объектов, т.е. показывает правильно, а повторный клик ссылки не убирает объекты с карты.

2. Код формирования оверлея для отображения мне кажется громоздким, нет ли более изящного способа реализовать то же самое?

4 комментария
Подписаться на комментарии к посту
1. А можете дать ссылку на страницу?
2. Что именно вас смущает?

К сожалению, страница расположена локально.

Ну... Я чую, что можно сделать проще, в частности, в примере все просто. Ну и "неисчезание" меток, я уверен, тоже происходит из-за не совсем правильного их отображения.

А зачем для каждой метки вы создаете отдельную группу? Можно обойтись и без нее:

                      // Если пункт меню "неактивный", то добавляем группу на карту,
                      // иначе - удаляем с карты
                      if (link.hasClass("active")) {
                          map.removeOverlay(placemark);
                      } else {
                          map.addOverlay(placemark);
                      }

Можете прислать мне ваш json и страничку, либо выложить на общедоступный хостинг (например, на narod.ru). Я посмотрю в чем дело.
JSON приведен в первом посте. А страничку отправил на почту.