Клуб API Карт

Семь кругов ада с XML+Балун+Кластер

Пост в архиве.
stechkin.dmitry
21 декабря 2012, 04:27

 
Есть XML, в нем данные такого типа:

 

             <ymaps:GeoObject>
                <gml:name>Имя </gml:name>
                <gml:metaDataProperty>
                    <ymaps:AnyMetaData>
                       <url>"someurl.ru"</url>
                       <image>//someImage.jpg</image>
                    </ymaps:AnyMetaData>
                </gml:metaDataProperty>
                <gml:Point>
                    <gml:pos>48.688514 15.758255</gml:pos>
                </gml:Point>
            </ymaps:GeoObject>

 
 На основе этих данных, при помощи шаблона формируется содержимое балуна:
 

                 <repr:balloonContentStyle>
                    <repr:template>#balloonTemplate</repr:template>
                </repr:balloonContentStyle>
            </repr:Style>     
       
            <repr:Template gml:id="balloonTemplate">
                <repr:text><![CDATA[            
                        <div style="font-size:15px;">
                            $[name]
                             <a href="$[metaDataProperty.AnyMetaData.address]"></a>
    <img src="http:$[metaDataProperty.AnyMetaData.image]" alt="avatar" />]]></repr:text>
            </repr:Template>
        </repr:Representation>

 
И все это дело загоняется в кластер:
 

                     // Создаем кластеризатор
                    clusterer = new ymaps.Clusterer();
                    // Настройки кластера
                    clusterer.options.set({
                        margin: [20],
                        gridSize: 40,
                        minClusterSize: 2
                    });                
                    url = "http://SomeUrl.ru/SomeXML.xml";
                    ymaps.geoXml.load(url)
                     .then(function (res) {
                        result = [];
                        //Добавляем балуны в массив
                        res.geoObjects.each(function (geoObject) {
                            result.push(geoObject);
                        });
                        //Добавляем массив в кластер
                        clusterer.add(result);
                    });
                    
                    // Добавляем кластер на карту.
                    myMap.geoObjects.add(clusterer);

 

Понятное дело, если бы все это работало нормально, я б сюда не писал. Но имеется пара проблем, которые не дают мне спать ночами (буквально), а именно:

  • Данные не передаются в балун, невероятным для меня образом отражается только имя ($[name]), даже если удалить все, что находится в repr:text
  • Не применяются также стили, кодом которых я решил не перегружать эту тему.


 

Надеюсь на помощь и понимание.

 

 

8 комментариев

Есть подозрение, что вы задаете стили и шаблон балуна не каждому геообъекту, а целой коллекции. При добавлении элемента в кластеризатор он "открепляется" от старой коллеции и становится дочерним по отношению к кластеризатору. Вам нужно указывать стили для каждого объекта отдельно или задавать их через кластеризатор.

 

Вам нужно указывать стили для каждого объекта отдельно

 

Можно попросить вас рассказть об этом подробнее?

 

или задавать их через кластеризатор.

 

 А в этом случае должны возникнуть проблемы с заполнением элементов данными из xml, разве нет?

 

 

Можно попросить вас рассказть об этом подробнее?

в YMapsML стиль можно прописать как коллекции элементов так и каждому элементу отдельно

 Что-то вроде этого?

       
           
       

пройдите по ссылке

имеется ввиду идентификатор стиля, а не шаблон балуна

В стилях можно задать содержимое балуна?

Вроде: текст, картинка, ссылка

стиль это группа параметров отображения геообъекта или коллекции геообъектов

в стиле могут храниться шаблоны содержимого иконки метки и балуна 

Большое спасибо, надеюсь не рассердил вас своими глупыми вопросами, постараюсь разобраться.