2016-11-19 1 views
0

У меня возникают проблемы с тем, что подгруппы работают нормально. В приведенном ниже коде я могу отображать кластеры, однако, когда я перехожу к слоям, кластеры не обновляются соответствующим образом. Кроме того, когда я включаю слой, все базовые точки все включаются. Как заставить слои подгрупп работать правильно?Листовка/CartoDB L.featureGroup.subGroup()

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Map</title> 

    <meta charset="UTF-8"> 

    <!-- If IE use the latest rendering engine --> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <!-- Set the page to the width of the device and set the zoon level --> 
    <meta name="viewport" content="width = device-width, initial-scale = 1"> 

    <!-- jquery --> 
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 

    <!-- Leaflet --> 
    <link rel="stylesheet" href="http://unpkg.com/[email protected]/dist/leaflet.css" /> 
    <script src="http://unpkg.com/[email protected]/dist/leaflet.js"></script> 
    <script src="leaflet.featuregroup.subgroup.js"></script> 
    <script src="https://unpkg.com/[email protected]/dist/leaflet.featuregroup.subgroup.js"></script> 


</head> 
<body> 

    <link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/Leaflet/Leaflet.markercluster/v1.0.0-beta.2.0/dist/MarkerCluster.Default.css"> 
    <link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/Leaflet/Leaflet.markercluster/v1.0.0-beta.2.0/dist/MarkerCluster.css"> 
    <script src="https://cdn.rawgit.com/Leaflet/Leaflet.markercluster/v1.0.0-beta.2.0/dist/leaflet.markercluster.js"></script> 

    <div id="map" style="height: 800px"></div> 

    <script> 
     var map = L.map('map').setView([38.607, -97.277], 5); 

     var OpenMapSurfer_Grayscale = L.tileLayer('http://korona.geog.uni-heidelberg.de/tiles/roadsg/x={x}&y={y}&z={z}', 
      { 
      maxZoom: 19, 
      attribution: 'Imagery from <a href="http://giscience.uni-hd.de/">' + 
      'GIScience Research Group @ University of Heidelberg</a> &mdash; Map data &copy; ' + 
      '<a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' 
     }).addTo(map); 

     //attributes for basemap credit (lower right hand corner annotation) 
     var streetsAttr = 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'; 
     var aerialAttr = 'Tiles &copy; Esri &mdash; Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'; 
     var artsyfartsyAttr = 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'; 

     //crete variables for the base map layer switcher 
     var streets = L.tileLayer('http://stamen-tiles-{s}.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png', { 
      id: 'MapID', 
      attribution: streetsAttr 
      }), 
      aerial = L.tileLayer('http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', { 
      id: 'MapID', 
      attribution: aerialAttr 
      }), 
      artsyfartsy = L.tileLayer('http://stamen-tiles-{s}.a.ssl.fastly.net/toner/{z}/{x}/{y}.png', { 
      id: 'MapID', 
      attribution: artsyfartsyAttr 
      }); 

     //create baseMaps variable to store basemap layer switcher 
     var baseMaps = { 
      "Streets": streets, 
      "Aerial": aerial, 
      "ArtsyFartsy": artsyfartsy 
     }; 
     var masClusGroup = new L.markerClusterGroup().addTo(map); 

     var efuSub = L.featureGroup.subGroup(masClusGroup).addTo(map); 
     var f1Sub = L.featureGroup.subGroup(masClusGroup).addTo(map); 
     var f2Sub = L.featureGroup.subGroup(masClusGroup).addTo(map); 

     var sqlEFU = "https://kmitch24.carto.com/api/v2/sql?format=GeoJSON&q=SELECT * FROM tornadodata_beginningpoint where tor_f_scal = 'EFU'"; 
     var sqlF1 = "https://kmitch24.carto.com/api/v2/sql?format=GeoJSON&q=SELECT * FROM tornadodata_beginningpoint where tor_f_scal = 'F1'"; 
     var sqlF2 = "https://kmitch24.carto.com/api/v2/sql?format=GeoJSON&q=SELECT * FROM tornadodata_beginningpoint where tor_f_scal = 'F2'"; 

     $.getJSON(sqlEFU, function(cartodbdata) { 
      geojsonlayer= L.geoJson(cartodbdata, { 
       onEachFeature: function (feature, layer) { 
        layer.bindPopup("F-Scale: " + feature.properties.tor_f_scal + "<br>" + 
         "Deaths: " + feature.properties.deaths_dir + "<br>" + 
         "Damage: " + feature.properties.damage_pro + ''); 
       } 
      }).addTo(efuSub); 
     }); 
     $.getJSON(sqlF1, function(cartodbdata) { 
      geojsonlayer= L.geoJson(cartodbdata, { 
       onEachFeature: function (feature, layer) { 
        layer.bindPopup("F-Scale: " + feature.properties.tor_f_scal + "<br>" + 
         "Deaths: " + feature.properties.deaths_dir + "<br>" + 
         "Damage: " + feature.properties.damage_pro + ''); 
       } 
      }).addTo(f1Sub); 
     }); 

     $.getJSON(sqlF2, function(cartodbdata) { 
      geojsonlayer= L.geoJson(cartodbdata, { 
       onEachFeature: function (feature, layer) { 
        layer.bindPopup("F-Scale: " + feature.properties.tor_f_scal + "<br>" + 
         "Deaths: " + feature.properties.deaths_dir + "<br>" + 
         "Damage: " + feature.properties.damage_pro + ''); 
       } 
      }).addTo(f2Sub); 
     }); 

     //Tornado Path. 
     var tPath = new L.layerGroup([]); 
     var path = "https://kmitch24.carto.com/api/v2/sql?format=GeoJSON&q=SELECT * FROM tornadodata_path"; 

     $.getJSON(path, function(cartodbdata) { 
      geojsonlayer= L.geoJson(cartodbdata, { 
      }).addTo(tPath); 
     }); 

     var overLayMap = { 
      "EFU": efuSub, 
      "F1": f1Sub, 
      "F2": f2Sub, 
      "Tornado Path": tPath 
     }; 

     L.control.layers(baseMaps, overLayMap).addTo(map); 
    </script> 
</body> 
</html> 
<script type="text/javascript" src="http://stats.hosting24.com/count.php"></script> 

ответ

0

EDIT:

Похоже, вы должны просто использовать Leaflet.markercluster версию 1.0.0 вместо 1.0.0-beta.2.0

Version 1.0.0 (который является самым последним, как письма) включает в себя PR#624, который обеспечивает управление вложенными группами слоев, что, скорее всего, относится к вашему делу.

Демо: http://plnkr.co/edit/iA9f3jd5Ov0Ln46Id7FW?p=preview


Оригинальный ответ:

Не уверен, что именно поэтому подгруппа, кажется, "отключен" от родительской группы маркеров кластера ...: -S

Leaflet.FeatureGroup.SubGroup предполагается для корректной работы с промежуточными группами слоев, как в вашем случае с группой GeoJSON, которая используется для создания слоев Leaflet из данных GeoJSON, полученных jQuery AJAX. Демонстрация: http://plnkr.co/edit/Y0OlNGdBE47AnsL4seLK?p=preview

Обходной путь, чтобы избавиться от этой промежуточной группы и добавить отдельные слои непосредственно в соответствующие подгруппы:

$.getJSON(sqlEFU, function(cartodbdata) { 
    geojsonlayer= L.geoJson(cartodbdata, { 
     onEachFeature: function (feature, layer) { 
      layer.bindPopup("some text").addTo(efuSub); // Add individual layers 
     } 
    })/*.addTo(efuSub)*/; // No longer add the intermediate GeoJSON group. 
}); 

Демо: http://plnkr.co/edit/eMzG9RkoV7fsNODotiSt?p=preview

Если вы можете построить минимальный тест случай, который воспроизводит вашу проблему, было бы проще определить причину, по которой ваш код не работает.

+0

Благодарим вас за просмотр кода. После просмотра демонстрационной версии я смог исправить и получить все, что нужно для всех необходимых функций. – osupb37