2016-03-23 18 views

cevap

1

Ben de bu sorunu çalıştırmak ve koleksiyonunda özellikleri bir özelliği dayalı ileri filtreleme küme katmanlarının bir yolu var olması gerektiğine inanıyoruz var. Ama benim anladığım kadarıyla (ve henüz daha fazla anlamadığım daha iyi bir yol olduğunu umuyorum), kümelenmiş özellikleri ayırt etmenin bir yolu yoktur, çünkü kümelenecek kaynak olduğunu beyan etmelisiniz. Geldiğim bir geçici çözüm, filtreniz değiştikçe dinamik olarak bir kaynak ve katman eklemektir.

Örneğin: alt kategori kimliğine göre filtreleme yapıyorsanız, o alt kategori kimliğine uyan orijinal FeatureCollection öğesininüzü aşağıya çekebilir ve küme ile true olarak ayarlanmış olan FeatureCollection ile yeni bir kaynak oluşturabilir, işaretçiler için katmanı ekleyebilirsiniz. daha sonra kendi örneklerinde yer aldığı gibi küme katmanlarınızı ekleyin. Ve filtre değiştiğinde, o işaret katmanının görünürlüğünü değiştirebilir (o bölümü test etmemiş olabilir) ya da sadece kaldırabilir ve önceki adımları tekrarlayan yenisini ekleyebilirsiniz. Bu yaklaşıma yönelik bazı olumsuzluklardan bazıları, normal filtrelerinizi tüm veri kümesinde kullanamamanız (varsa) ve filtreler kullanıyormuşsunuz gibi performans göstermiyor.

Eğer mapbox gelen depremler veri kullanıyorsanız

, kod aşağıdaki gibi görünebilir:

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 
}); 

Ve onlar örneğimizde yaptığımız gibi devam ediyor.

En sevdiğim çözüm değil ama şu ana kadar çalıştığım tek şey bu. Bu yardımcı olur umarım.