Клуб API Карт

Кластеры и YmapsML в версии 2.0

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

В примерах неясно, как же скрестить эти две сущности. Понятно, что можно в cluster засунуть массив из placemark, а что делать в случае загрузки объектов из файла с помощью  ymaps.geoXml.load?

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

Добрый день.

Вы можете перебрать элементы коллекции geoObjects, возвращаемой из ymapsml, чтобы записать их в массив. На самом деле это зависит от иерархии объектов в вашем ymapsml файле. Т.е. если у вас в ymapsml файле есть вложенные коллекции, придется перебрать и их.

ymaps.geoXml.load(...).then(function (res) {

    var arr = []

    res.geoObjects.each(function (obj) {

        arr.push(obj)

    })

})

 

кстати, а сложно научить кластеризатор брать метки из geoObjectCollection и geoObjectArray, чтобы не заниматься самому перебиранием и перекладыванием?

Мы думали-думали и не придумали, как должны себя вести в кластеризаторе вложенные коллекции. И еще - как отличить коллекцию от неколлекции, если человек сам реализовал коллекцию и геообъект.

Я думаю что не надо делать "швейцарский перочинный нож" - универсальное решение на все случаи жизни.

Главное поддержать основные пользователькие кейсы, чтобы не приходилось перекладывать большие массивы данных, а именно такие в основном передаются в кластеризатор. (например из того же geoXml)

 

Вложенные коллекции можно и процессить, главное чтобы то что в них лежало, имело тип geoPoint (ведь правда же кластеризатор работает только с точками?) остальные объекты можно просто игнорировать.

 

Случай собственной кастомной коллекции выглядит и вовсе экзотическим.

Количество таких решений будет ничтожно, и если кто и сделает подобное, то должен сам заботиться о корректности интерфейса своих кастомизаций.

 

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

не усложняли основные пользовательские сценарии - которых подавляющее большинство.

А сейчас именно так и получается

Наверное ты прав. Может и запилю коллекции в кластеризаторе.

Ждем-с :)

спасибо!