Клуб API Карт

Реализация

n1ssa4
19 мая 2012, 21:10

Здравствуйте. Проект предполагает создание пользовательской интерактивной карты с возможностью добавления меток, ломанных и многоугольников по категориям как в народной карте. Интересует вопрос по реализации: как лучше группировать, формировать объекты на карте, например с помощью YMapsML. К примеру: на карте есть 100 категорий различных объектов, это банкоматы, дорога, мебельный магазин итд. Я так понимаю, получится один большой xml файл или нужно каждой категории свой xml? Как будет выглядеть его структура в таком случае.

 

var ml = new YMaps.YMapsML("*.xml"); - банкоматы
var ml1 = new YMaps.YMapsML("*.xml"); - дороги
var ml2 = new YMaps.YMapsML("*.xml"); - мебельные магазины
Для каждого объекта пишем свой скрипт "показать/скрыть":
Менюшка:
<ul>
    <li id="bank" class="bank_hide">банкоматы</li>
    <li id="road" class="road_hide">дороги</li>
    <li id="shop" class="shop_hide">мебельные магазины</li>
</ul>
Для банкоматов
YMaps.jQuery("#bank").click(function(){
   YMaps.jQuery(".bank_hide").toggleClass('bank_show');
   if(YMaps.jQuery("#bank").hasClass("bank_show")){
       map.addOverlay(ml);
   } else {
       map.removeOverlay(ml)
}) ;
Также и для дорог
YMaps.jQuery("#road").click(function(){
   YMaps.jQuery(".road_hide").toggleClass('road_show');
   if(YMaps.jQuery("#road").hasClass("road_show")){
       map.addOverlay(ml1);
   } else {
       map.removeOverlay(ml1)
}) ;
Также и для мебельных магазинов
YMaps.jQuery("#shop").click(function(){
   YMaps.jQuery(".shop_hide").toggleClass('shop_show');
   if(YMaps.jQuery("#shop").hasClass("shop_show")){
       map.addOverlay(ml2);
   } else {
       map.removeOverlay(ml2)
}) ;


Как правильно нужно реализовать такую идею? Нашел пример: view-source:http://api.yandex.ru/maps/doc/jsapi/1.x/examples/ymapsml/menufromymapsml.html (v1.x), но не могу разобраться в коде:
// Обработчик успешной загрузки
YMaps.Events.observe(ml, ml.Events.Load, function (ml) {
// Создание списка групп
ml.get(0).forEach(function (item) {
addMenuItem(item, map, YMaps.jQuery("#menu")) ;
}) ;
}) ;

 

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

Все на самом деле сложно.

Сейчас вы пробуете решить в систему в лоб, и хотите заставить пользователя выкачивать мегабайты, десятки мегабайт, в случае с народной картой - гигабайты данных этих самых yml.

Отображать всю графику на клиенте, чего НК себе не позволяют например...

А как правильно реализовать такую идею? Загружать данные по требованию киента?

В общем случае - да.

Идеально - реализовать это через активные области(будет как на народных картах).

Главная суть тут не в том что картинки рисуются на сервере - а то что данные загружаются кусочками-тайлами.

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

А потом мы поможем оптимизировать общения клиента с сервером.

благодарю за идею активных областей, сейчас же начну их изучение