Клуб API Карт

Версия подключенного API и кластеризация в группе

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

Здравствуйте!

1. Как узнать внутри кода какая версия API подключена? Необходимо это для реализации окончательного перехода нашего модуля http://www.it-hive.ru/apps4bitrix/officesplus/ на API 2.0 http://test.ithiveslf.tmweb.ru/offices/ и сохранения работоспособности для сайтов, использующих наш модуль, которые остануться на API 1.1 по определенным причинам (кастомизация шаблона компонента нашего модуля).

2. Как подключить кластеризатор, если объекты (точки) на карту добавляются предварительно сгруппированными:

var group = new ymaps.GeoObjectCollection({},{
iconImageHref: '...',
iconImageSize: [...],
iconImageOffset: [...]
});

//начало цикла
var point = new ymaps.Placemark([...],{...},{...});
group.add(point);
//конец цикла

map.geoObjects.add(group);

Используя 1-ый пример отсюда http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/Clusterer.xml кластеризатор не хочет подключаться:

clusterer = new ymaps.Clusterer({clusterDisableClickZoom: true});
clusterer.add(group);
map.geoObjects.add(clusterer);

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

1. Можно использовать feature sniffing

2. Кластеризатор работает только с массивами, храните изначально сгруппированные массивы или перекладывайте в них из групп.

Спасибо! Только не понял как использовать 'feature sniffing'

Про sniffing справка вообще молчит http://api.yandex.ru/search.xml?text=sniffing&project=maps

Можете пример кода привести?

feature sniffing это не конкретно про АПИ, это прием в программировании вообще, и в частности в клиентской вэб-разработке.

Суть в том, что принадлежность объекта тому или иному классу определяется на основании методов, которые он поддерживает.

Например, поскольку кластеризатор появился только в 2-й версии АПИ, можно написать так:

 

var apiVersion;

if(ymaps.Clusterer) {

    apiVersion = 2;

}

else {

    apiVersion = 1;

}

 

Спасибо!

Что такое подразумевал, но так как не силен в АПИ и в разнице между версиями, то сложно без помощи профессионала.

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

var clusterer = ymaps.geoQuery(group).add(group2).clusterize();

Только учтите, что метки при попадании в кластеризатор открепятся от коллекции.

Побочный эффект от открепеления может быть, если у вас задаются общие стили на всю коллекцию. 

Перенести эти стили можно так

var clusterer = ymaps.geoQuery(group).add(group2).setOptions({.....}).clusterize();

 

Спасибо! Работает!