Клуб API Карт

Как переключать на одной карте разные YMapsML-файлы

alefxxx
19 января 2010, 16:02

Прошу прощения - ну не программист я...

Лазил по документации 2 дня и ни к чему не пришел.

У меня вопрос к предыдущему моему сообщению http://clubs.ya.ru/mapsapi/replies.xml?item_no=7604

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

Карта 1

Карта 2

Карта 3

При нажатии на каждую ссылку в карте сверху должны отображаться разные YMapsML-файлы c разным набором точек.

Убейте меня, но никак не могу понять как это сделать.

Вот исходный код который на данный момент есть:

<script src="http://api-maps.yandex.ru/1.1/index.xml?key=AHUz-UkBAAAA8BNUPwIA9Vrnc0V2q2kAESpokm7QdS4UkZMAAAAAAAAAAAAH42Nw3OWqVD_T2osgKh5uGkxXKA==" type="text/javascript"></script>
<script type="text/javascript">// <![CDATA[
        // Создание обработчика для события window.onLoad
        YMaps.jQuery(function () {
            // Создание экземпляра карты и его привязка к созданному контейнеру
            var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
 
            // Установка для карты ее центра и масштаба
            map.setCenter(new YMaps.GeoPoint(51.90,59.03), 4);
 
           // Добавление элементов управления
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.ScaleLine());
            map.addControl(new YMaps.SearchControl());

 

           // Создание YMapsML-документа и добавление его на карту
            var ml = new YMaps.YMapsML("map1.xml");
            map.addOverlay(ml);
            map.enableScrollZoom();

    YMaps.Events.observe(ml, ml.Events.Fault, function (ml, error) {
      alert('Ошибка: ' + error);
    });


        })
// ]]></script>
<div style="text-align: center; width: 650px; height: 550px;" id="YMapsID"></div>
<br /><img style="float: left;" src="train1.png" alt="" width="17" height="23" />Оборудование

<br /><img style="float: left;" src="gym1.png" alt="" width="17" height="23" />Комплекс оборудования

9 комментариев
Подписаться на комментарии к посту
Возьмите за основу пример "Управление группами объектов с помощью меню". Только загружать вам нужно будет соответствующие YMapsML-документы.

Спасибо за ответ.
На самом деле я так посмотрел пример и мне проще тогда получается из  XML взять координаты точек и их описание и перенести в скрипт примера. Скрипт остается в принципе без изменений.
Просто предстоит некоторое количество ручной работы по переносу данных в виде тупого копирования.
Единственный минус состоит в том, что в коде HTML у меня будет болтаться описание порядка 500 точек... а я хотел подгружать данные с точками по необходимости.

Копировать не надо. Если у вас есть YMapsML-документ с данными, то это замечательно. Значит, можно не использовать функции createGroup и createPlacemark и немного изменить создание меню.

Необходимо сделать обработчик загрузки YMapsML и в нем создавать меню.
// Загрузка YMapsML
var ml = new YMaps.YMapsML("http://rodlex.narod2.ru/xml/menu-ymapsml.xml");

// Обработчик успешной загрузки
YMaps.Events.observe(ml, ml.Events.Load, function (ml) {
    // Создание списка групп
    ml.get(0).forEach(function (item) {
        addMenuItem(item, map, YMaps.jQuery("#menu"));
    });
});

// Обработчик неудачной загрузки
YMaps.Events.observe(ml, ml.Events.Fault, function (ml, error) {
    alert("При загрузке данных произошла ошибка: " + error);
});
Вот и все.

Пример построения меню из YMapsML можно посмотреть по этой ссылке:
http://rodlex.narod2.ru/menu-ymapsml.html

Этоя понял. НО... у меня будет в итоге 5-8 разных файлов xml. Вот в чем проблема. Если бы один, я бы не парился...

Неважно сколько файлов, грузите несколько. Можно на каждый пункт меню создать по xml-файлу и оторажать их на карте в зависимости от выбранных пунктов. Все зависит от конкретной задачи.

Вам необходимо подстроить скрипт под себя. В примерах мы не можем предусмотреть решения всех видов задач.

Если вы подробнее опишите свою задачу, то я попробую подсказать решение.

Задам тогда только один конкретный вопрос: В соответствии с вышеприведенным примером как будет выглядеть строка с подгрузкой второго файла xml с именем map2.xml?

Файл map2.xml имеет такое же содержимое, что и первый?
Ну да, формат тот же. Точки другие. Иконки на метках другие.
По аналогии:
// Загрузка YMapsML
var ml = new YMaps.YMapsML("map2.xml");

// Обработчик успешной загрузки
YMaps.Events.observe(ml, ml.Events.Load, function (ml) {
    // Создание списка групп
    ml.get(0).forEach(function (item) {
        addMenuItem(item, map, YMaps.jQuery("#menu"));
    });
});

// Обработчик неудачной загрузки
YMaps.Events.observe(ml, ml.Events.Fault, function (ml, error) {
    alert("При загрузке данных произошла ошибка: " + error);
});