APIшник Яндекс.Карт, Москва, 26.04.2012
Рассказ Марины Степановой (разработчика интерфейсов API Яндекс.Карт) о способах отображения большого количества объектов на карте, а также о новом кластеризаторе, который теперь есть в API 2.0.
8. Как это работает?
1. Пользователь двигает мышкой
2. Смотрим на позицию курсора
3. Подгружаем данные (если нужно)
4. Проверяем, куда попадает курсор
5. Если в объект, кидаем на нем событие
6. Ловим событие на слое и показываем хинт
7
9. Особенности
— Узкое место — загрузка данных
— Активный объект ищется быстро
— Грузится только 1 нужный тайл
— Пока новые данные не пришли, старые
— не удаляются
— Нужна серверная часть
—
8
17. for var (i = 0; i < 9000; i++) { var clusterer = new ym.Clusterer();
map.geoObjects.add(objects[i]); clusterer.add(objects);
} map.geoObjects.add(clusterer);
Без кластеризатора — С кластеризатором —
3 строчки 3 строчки
16
23. Переопределение центра кластеров —
метки имеют разный вес
var clusterer = new ymaps.Clusterer();
clusterer.createCluster = function(center, geoObjects) {
var x = 0,
y = 0,
k = 0;
for (var i = 0, l = geoObjects.length; i < l; i++) {
var coordinates = geoObjects[i].geometry.getCoordinates(),
properties = geoObjects[i].properties,
weight = properties.get(‘weight’);
x += coordinates[0] * weight;
y += coordinates[1] * weight;
k += weight;
}
var newCenter = [x / k, y / k],
createCluster = clusterer.prototype.createCluster;
return createCluster.call(this, newCenter, geoObjects);
}
22
24. Каждому свое
Хотспоты Кластеры
Нужно отобразить все
+ −
данные
Нужно, чтобы клиентская
часть была максимально + −
быстрой
Нужно разгрузить карту
− +
визуально
Нужно сделать быстро и
− +
просто
23