5

MarkerClustererPlus を使用して数十万点をプロットしています。また、表されるマーカーの数ではなく、何らかの外部プロパティに基づいてクラスター アイコン (色) のグループを設定したいと考えています。

これを行う唯一の方法は、複数の MarkerClusterer オブジェクトを作成して別のoptionsオブジェクトを渡すことですが、そうするとパフォーマンスが大幅に低下する気がします。より良い方法はありますか?

さまざまなサイズのアイコンが収まるようにスケーリングされた Marker Clusterer Plus。

上の画像では、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' });

PS誰かが興味を持っている場合は、svg画像を提供し、オプションオブジェクトの幅と高さを増やすことにより、クラスターアイコンがそのサイズに合わせてスケーリングされるようにライブラリを微調整しました†</sup>:

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_ + ';');

†</sup> Ffx 19.0.2、Chrome 26.x、Chrome Canary 28.x、Safari 6.0.2、IE 9.0.8 で動作します (Opera 12.15 では動作しません)。

編集MarkerClusterer の複数のインスタンスを作成しても、パフォーマンスに大きな影響はないようです。ただし、MC に渡されるプロパティ/オプション オブジェクトは、MCのインスタンス間で共有されているようです。

解決済み665 行目付近の MarkerClustererPlus ライブラリを変更してクローンを作成する必要がありましたopt_options(ライブラリは参照を使用していたため、以前のすべての opt_options が最新/最後に渡されたオプションで上書きされていました)。

4

1 に答える 1