ymaps.ready(function () {
var mapCenter = [54.738363, 55.965014],
map = new ymaps.Map('map', {
center: mapCenter,
zoom: 12,
controls: []
}),
placemarks = [];
var customClusterIconLayout = ymaps.templateLayoutFactory.createClass(
'<div class="balloon__icon">$[properties.geoObjects.length]</div>'),
clusterIcons = [
{
href: 'map_bubble.svg',
size: [46, 55],
// Отступ, чтобы центр картинки совпадал с центром кластера.
offset: [-23, -55]
}],
customItemContentLayout = ymaps.templateLayoutFactory.createClass(
// Флаг "raw" означает, что данные вставляют "как есть" без экранирования html.
'<h2 class=ballon_header>{{ properties.balloonContentHeader|raw }}</h2>' +
'<div class=ballon_body>{{ properties.balloonContentBody|raw }}</div>' +
'<div class=ballon_footer>{{ properties.balloonContentFooter|raw }}</div>'
);
var customPlacemarkLayout = ymaps.templateLayoutFactory.createClass(
'<div class=placemark_layout_container>{{ properties.cost }}</div>'
);
// Создаем собственный макет с информацией о выбранном геообъекте.
var customBalloonContentLayout = ymaps.templateLayoutFactory.createClass([
'<h2 class=ballon_header>{{ properties.rooms }}</h2>'
].join(''));
var objectManager = new ymaps.ObjectManager({
clusterize: true,
clusterDisableClickZoom: true,
clusterOpenBalloonOnClick: true,
clusterBalloonPanelMaxMapArea: 0,
clusterBalloonMaxHeight: 200,
});
objectManager.objects.options.set({
iconLayout: customPlacemarkLayout,
iconShape: {
type: 'Rectangle',
coordinates: [
[-70, -60], [70, 0]
]
},
balloonContentLayout: customBalloonContentLayout,
});
objectManager.clusters.options.set({
clusterIcons: clusterIcons,
clusterIconContentLayout: customClusterIconLayout,
});
// Заполняем кластер геообъектами со случайными позициями.
for (var i = 0, l = data.features.length; i < l; i++) {
var placemark = {
type: 'Feature',
id: i,
geometry: {
type: 'Point',
coordinates: data.features[i].geometry.coordinates,
},
properties: {
// Устаналиваем данные, которые будут отображаться в балуне.
balloonContentHeader: 'Заголовок метки №' + (i + 1),
balloonContentBody: 'Информация о метке №' + (i + 1),
placemarkId: i,
cost: data.features[i].properties.cost,
rooms: data.features[i].properties.rooms,
}
};
placemarks.push(placemark);
}
objectManager.add(placemarks);
map.geoObjects.add(objectManager);
});