Оптимальное добавление множества меток
ObjectManager - класс, позволяющий добавить на карту большое количество объектов без необходимости создавать и добавлять на карту метки по отдельности.
Объекты, добавленные в ObjectManager, располагаются в коллекции ObjectManager.objects. Кластеры, образованные из добавленных меток, добавляются в коллекцию ObjectManager.clusters. Визуальное отображение меток создается по требованию асинхронно. Визуальным отображением меток и кластеров являются объекты, реализующие интерфейс IOverlay. В частности, overlay.Placemark. Оверлеи помещаются в коллекции ObjectManager.objects.overlays и ObjectManager.clusters.overlays соответственно.
ObjectManager принимает описания меток в JSON формате. Метки могут кластеризоваться или показываться как есть. Если вы не используете кластеризацию, то метки будут показаны только в видимой области карты. Поскольку объекты хранятся в менеджере в виде JSON описаний и их визуальное отображение создается только по необходимости, этот способ добавления точек на карту работает быстрее, чем добавление меток на карту напрямую или через кластеризатор.
<!DOCTYPE html>
<html>
<head>
<title>Оптимальное добавление множества меток</title>
<meta
http-equiv="Content-Type"
content="text/html; charset=utf-8"
/>
<!--
Укажите свой API-ключ. Тестовый ключ НЕ БУДЕТ работать на других сайтах.
Получить ключ можно в Кабинете разработчика: https://developer.tech.yandex.ru/keys/
-->
<script
src="https://api-maps.yandex.ru/2.1/?lang=ru-RU&apikey=<ваш API-ключ>"
type="text/javascript"
></script>
<script
src="https://yandex.st/jquery/2.2.3/jquery.min.js"
type="text/javascript"
></script>
<script src="object_manager.js" type="text/javascript"></script>
<style>
html,
body,
#map {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
}
a {
color: #04b; /* Цвет ссылки */
text-decoration: none; /* Убираем подчеркивание у ссылок */
}
a:visited {
color: #04b; /* Цвет посещённой ссылки */
}
a:hover {
color: #f50000; /* Цвет ссылки при наведении на нее курсора мыши */
}
</style>
</head>
<body>
<div id="map"></div>
</body>
</html>
ymaps.ready(init);
function init() {
var myMap = new ymaps.Map(
"map",
{
center: [55.76, 37.64],
zoom: 10,
},
{
searchControlProvider: "yandex#search",
}
),
objectManager = new ymaps.ObjectManager({
// Чтобы метки начали кластеризоваться, выставляем опцию.
clusterize: true,
// ObjectManager принимает те же опции, что и кластеризатор.
gridSize: 32,
clusterDisableClickZoom: true,
});
// Чтобы задать опции одиночным объектам и кластерам,
// обратимся к дочерним коллекциям ObjectManager.
objectManager.objects.options.set("preset", "islands#greenDotIcon");
objectManager.clusters.options.set(
"preset",
"islands#greenClusterIcons"
);
myMap.geoObjects.add(objectManager);
$.ajax({
url: "data.json",
}).done(function (data) {
objectManager.add(data);
});
}