2017-05-08 6 views
0

여러 geoJSON 레이어에 대한 마커 클러스터링을 구현하고 싶습니다. 몇 가지 조사를 마치면 Leaflet.FeatureGroup.SubGroup 플러그인을 사용하여 필요한 솔루션처럼 보입니다.전단지 여러 geoJSON 레이어 클러스터링 및 레이어 제어

geoJSON을 반복하면서지도에서 레이어 그룹을 동적으로 추가/제거하려면 어떻게해야합니까? 그런

addGeoJsonLayers: => 
    L.mapbox.accessToken = MAP_BOX_ACCESS_TOKEN 

    streetsLayer = L.mapbox.tileLayer('mapbox.streets') 
    streetsLayer.on 'ready', => streetsLayer.addTo(@map) 

    baseLayers = 
     'Road': streetsLayer 
     'Terrain': L.mapbox.tileLayer('mapbox.outdoors') 
     'Satellite': L.mapbox.tileLayer('mapbox.satellite') 

    geojsonLayers = {} 

    @shares.forEach (share, index) => 
     titleLabel = CommunityMap.labelForDataId(share.schema.elements, share.schema.record_title_key) 
     geojsonOptions = { 
     onEachFeature: (feature, layer) => 
      record = new CommunityGeoJSONRecord(properties: feature.properties, titleLabel: titleLabel) 

      @records[record.id] = { record: record, layer: layer } 

      layer.bindPopup record.contentForPopUp() 

     pointToLayer: (feature, latLng) -> 
      if share.status_enabled 
      color = feature.properties['marker-color'] || INVALID_STATUS_MARKER_COLOR 
      else 
      color = MARKER_COLORS[index] 
      L.marker([latLng.lat, latLng.lng], { 
      icon: L.mapbox.marker.icon({ 
       'marker-size': 'small' 
       'marker-color': color 
      }) 
      }) 
     } 

     share.geojsonLayer = L.geoJson(null, geojsonOptions).addTo(@map) 

     geojsonLayers[share.name] = share.geojsonLayer 

     $.getJSON "#{share.url}?human_friendly=1", (data) => 
     @loadData(data, share.geojsonLayer, titleLabel) 

    L.control.zoom(position: 'topright').addTo(@map) 

    L.control.layers(baseLayers, geojsonLayers, position: 'topright').addTo(@map) 

답변

1

뭔가 작업을해야합니다 :

var mcg = L.markerClusterGroup().addTo(@map); 

// within your @shares loop… 

    share.subGroupLayer = L.featureGroup.subGroup(mcg).addTo(@map); 

    // Do not add directly to map, but to the intermediate subGroup instead! 
    share.geojsonLayer = L.geoJSON(null, geojsonOptions).addTo(share.subGroupLayer); 

    geojsonLayers[share.name] = share.subGroupLayer; // use the subgroup instead.