Я рисую несколько сотен тысяч точек с помощью MarkerClustererPlus и хочу установить группы значков кластера (цвет) на основе некоторого внешнего свойства (не на основе количества представленных маркеров).
Я думаю, что единственный способ сделать это — создать несколько объектов MarkerClusterer и передать другой объект options
, но я чувствую, что при этом сильно пострадает производительность. Есть ли способ лучше?
Учитывая изображение выше, я бы хотел, чтобы 139, 24 и 5 были желтыми, а 213, 25, 30 и 2 — красными; и если возможно, обновите их стили/параметры через setOptions:mc.group[0].setOptions({"url": imgPath +lookupThreshold(severity)+ '.svg' });
mc.group[1].setOptions({"url": imgPath +lookupThreshold(severity)+ '.svg' });
P.S. Если кому-то интересно, я настроил библиотеку, чтобы значок кластера масштабировался до своего размера†, предоставив изображение svg и увеличив ширину и высоту в объекте параметров:
var mcOptions = {
"styles": [{
"height": 19,
"url": img/map/clusters/",
"width": 19
},{
"height": 24,
"url": img/map/clusters/",
"width": 24
}, {…}]
};
for ( var s = mcOptions.styles.length-1; s >= 0; s-- )
{ mcOptions.styles[s].url += lookupThreshold(severity) + '.svg'; }
// lookupThreshold switches severity and returns a string: red, orange, …
Затем добавил следующее к markerclusterer.js
:
line 275: this.backgroundSize_ = style.backgroundSize || "contain";
line 300: style.push('background-size:' + this.backgroundSize_ + ';');
† Работает в Ffx 19.0.2, Chrome 26.x, Chrome Canary 28.x, Safari 6.0.2, IE 9.0.8 (но не в Opera 12.15).
EDIT Похоже, что создание нескольких экземпляров MarkerClusterer не сильно влияет на производительность; однако оказывается, что объект свойств/параметров, переданный MC, общий для экземпляров MC.
Решено Мне пришлось изменить библиотеку MarkerClustererPlus возле строки 665, чтобы клонировать opt_options
(библиотека использовала ссылку, из-за чего все предыдущие opt_options были перезаписаны самой новой/последней переданной).