Клуб API Карт

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

Пост в архиве.

 
Есть 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 комментариев

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

Удалённый пользователь
28 января 2016, 02:58

 

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

 

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

 

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

 

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

 

 

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

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

Удалённый пользователь
28 января 2016, 02:58

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

       
           
       

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

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

Удалённый пользователь
28 января 2016, 02:58

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

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

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

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

Удалённый пользователь
28 января 2016, 02:58

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