はまた、私は、この問題に実行して、コレクションの機能の特性に基づく、さらにフィルタリングクラスタ層の方法があるべきだと考えています。しかし、私が理解しているところでは(そして、私がまだ理解していないより良い方法があることを願っています)、クラスター化されたフィーチャーをクラスター化するソースを宣言するので、クラスター化されたフィーチャーを区別する方法はありません。フィルタの変更に応じて、ソースとレイヤーを動的に追加することで対処しています。
たとえば、サブカテゴリIDでフィルタリングしている場合、そのサブカテゴリIDと一致するオリジナルのFeatureCollectionを縮小し、そのFeatureCollectionで新しいソースを作成し、クラスタをtrueに設定し、マーカーにレイヤーを追加し、それらの例でレイアウトしたようにクラスタ層を追加してください。フィルタが変更されるたびに、そのマーカレイヤの可視性を切り替える(そのパーツをテストしていない)か、削除するだけで、前の手順を繰り返す新しいレイヤを追加できます。このアプローチの多くの短所のいくつかは、(もしあれば)データセット全体で通常のフィルタを使用することができず、フィルタを使用しているようにパフォーマンスが悪い場合があります。
あなたはmapboxから地震データを使用している場合、コードは次のようになります。
var data = "https://www.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson";
var filterID = 1.87; // Arbitrary number
var paredData = _.filter(data.features, function(feature){
if (feature["Primary ID"] === filterID) {
return feature;
}
})
// Remove all of the layers and source associated
// with a previous filter if needed
if (map.getSource("earthquake-filter") {
map.removeLayer("earthquake-filter");
map.removeLayer("earthquake-filter-cluster");
map.removeLayer("earthquake-filter-cluster-count");
map.removeSource("earthquake-filter");
}
map.addSource("earthquake-filter", {
type: "geojson",
data: {
type: "FeatureCollection",
features: paredData
},
cluster: true,
clusterMaxZoom: 14,
clusterRadius: 50
});
そして、彼らは一例でそうであるように続けます。
私のお気に入りのソリューションではありませんが、これまでに動作するのは私が見つけた唯一のソリューションです。お役に立てれば。