Клуб API Карт

Нет кластеров

komsomolenko
11 июля, 19:22

Доброго дня!

Есть у меня такой код:

searchCarWashes(accessToken(), conditions, function (response) {
        map.geoObjects.removeAll();

        if (!response.data || response.data.length == 0) {
            alert('По заданным параметров заведения не найдены');
            return;
        }

        $.each(response.data, function (key, institution) {
            var marker = new ymaps.Placemark(
                [
                    Number(institution.latitude),
                    Number(institution.longitude)
                ],
                {
                    hintContent: institution.title, institution: institution
                },
                {
                     iconLayout: 'default#image',
                     iconImageHref: 'images/map/' + icons[institution.institution_type_id],
                }
            );

            marker.events.add('click', function () {


                if ($.cookie('appAccessToken') !== undefined) {
                    $("#first-block").show();
                    $(".settings-block").hide();
                    $(".container-feedback-comments-block").hide();

                    $(".container-feedback-comments-block #show-auth").hide();
                } else {
                    $("#first-block").hide();
                    $(".settings-block").hide();
                    $(".container-feedback-comments-block").show();

                    $(".container-feedback-comments-block").find('.step').remove();

                    $(".container-feedback-comments-block #show-auth").show();
                }

                fillInstitutionInfo(marker.properties.get('institution'));
            });

            map.geoObjects.add(marker);
        });

Работает хорошо, но количество точек на карте растёт, хотелось бы добавить кластеризацию. Немного подправил:

searchCarWashes(accessToken(), conditions, function (response) {
        map.geoObjects.removeAll();

        if (!response.data || response.data.length == 0) {
            alert('По заданным параметров заведения не найдены');
            return;
        }

        $.each(response.data, function (key, institution) {
            var marker = new ymaps.Placemark(
                [
                    Number(institution.latitude),
                    Number(institution.longitude)
                ],
                {
                    hintContent: institution.title, institution: institution
                },
                {
                     iconLayout: 'default#image',
                     iconImageHref: 'images/map/' + icons[institution.institution_type_id],
                }
            );
			
            marker.events.add('click', function () {


                if ($.cookie('appAccessToken') !== undefined) {
                    $("#first-block").show();
                    $(".settings-block").hide();
                    $(".container-feedback-comments-block").hide();

                    $(".container-feedback-comments-block #show-auth").hide();
                } else {
                    $("#first-block").hide();
                    $(".settings-block").hide();
                    $(".container-feedback-comments-block").show();

                    $(".container-feedback-comments-block").find('.step').remove();

                    $(".container-feedback-comments-block #show-auth").show();
                }

                fillInstitutionInfo(marker.properties.get('institution'));
            });
			clusterer = new ymaps.Clusterer({
            /**
             * Через кластеризатор можно указать только стили кластеров,
             * стили для меток нужно назначать каждой метке отдельно.
             * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/option.presetStorage.xml
             */
            preset: 'islands#invertedVioletClusterIcons',
            /**
             * Ставим true, если хотим кластеризовать только точки с одинаковыми координатами.
             */
            groupByCoordinates: false,
            /**
             * Опции кластеров указываем в кластеризаторе с префиксом "cluster".
             * @see https://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/ClusterPlacemark.xml
             */
            clusterDisableClickZoom: true,
            clusterHideIconOnBalloonOpen: false,
            geoObjectHideIconOnBalloonOpen: false
        });
			/**
			* Можно менять опции кластеризатора после создания.
			*/
			clusterer.options.set({
				gridSize: 100,
			clusterDisableClickZoom: true
			});

            clusterer.add(marker);
            map.geoObjects.add(clusterer);
			
        });

Вроде бы как кластер создан, карта работает, но выдает всё-равно только точки, при любом масштабе. Подскажите, где я совершил ошибку.

Заранее спасибо!

3 комментария
Подписаться на комментарии к посту
вы создаете кластеризатор внутри each по одному кластеризатору на каждый маркер
komsomolenko
18 июля, 19:24
Спасибо, dimik!
Кластеризация вещь хорошая, но теперь карту с 3500 точками рисует за 90-100 секунд.
Хочу использовать objectManager, посему вопрос: можно ли будет в его свойства загружать "hintContent: institution.title, institution: institution" и уже по клику обрабатывать 
objectManager.objects.getById(e.get("objectId")).properties.institution ?