如何使用图层应用传单标记聚类

时间:2016-03-04 04:44:14

标签: javascript mapping leaflet markerclusterer

我正在尝试应用Leaflet.MarkerCluster.LayerSupport。但是我不知道如何使用它:(我已经阅读了有关的文档但是我尝试了很多次但它确实没有用。

这是我的代码

<!DOCTYPE html>
<html>
<head>
    <title>Península</title>
    <meta charset="utf-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css" />
</head>
<body>
    <div id="map" style="width: 600px; height: 400px"></div>

    <script src="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js"></script>
    <script src='https://api.mapbox.com/mapbox.js/plugins/leaflet-markercluster/v0.4.0/leaflet.markercluster.js'></script>
    <script src="leaflet.markercluster.layersupport-src.js"></script>


    <script>        

        var NemachIcons =L.Icon.extend({
            options:{
                shadowUrl:'',
                iconSize:   [50,55],
                iconAnchor: [45,45],
                popupAnchor:[-3,-76]
            }
        });

        var tiloIcon = new NemachIcons({iconUrl:'http://www.iconshock.com/img_jpg/SIGMA/general/jpg/256/pyramid_icon.jpg'}),
            puebloIcon = new NemachIcons({iconUrl:'http://icons.iconseeker.com/png/fullsize/gant/pointless-bw-circle-i-use-it-iex.png'}),
            gasIcon =new NemachIcons({iconUrl:'https://cdn2.iconfinder.com/data/icons/function_icon_set/circle_green.png'});


        L.icon =function (options) {
            return new L.Icon(options);
        };


        var sitios = new L. LayerGroup();

        L.marker([20.683, -88.568], {icon: tiloIcon}).bindPopup('1').addTo(sitios),
        L.marker([21.204547, -89.269466], {icon: tiloIcon}).bindPopup('2').addTo(sitios),
        L.marker([20.332362, -89.647899], {icon: tiloIcon}).bindPopup('3').addTo(sitios),
        L.marker([20.486417, -88.660218], {icon: tiloIcon}).bindPopup('4').addTo(sitios),
        L.marker([21.151196, -87.958143], {icon: tiloIcon}).bindPopup('5').addTo(sitios);


        var pueblo = new L.LayerGroup();

        L.marker([20.9330, -89.0178], {icon: puebloIcon}).bindPopup('6').addTo(pueblo),
        L.marker([20.6909, -88.2015], {icon: puebloIcon}).bindPopup('7').addTo(pueblo);

        var gas = new L.LayerGroup();
        L.marker([20.973907, -89.578931], {icon: gasIcon}).bindPopup('8').addTo(gas);


        var mbAttr = ' ' +
                '' +
                '',
            mbUrl = 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpandmbXliNDBjZWd2M2x6bDk3c2ZtOTkifQ._QA7i5Mpkd_m30IGElHziw';

        var grayscale   = L.tileLayer(mbUrl, {id: 'mapbox.light', attribution: mbAttr}),
            streets  = L.tileLayer(mbUrl, {id: 'mapbox.streets',   attribution: mbAttr});

        var map = L.map('map', {
            center: [20.794527, -88.760612],
            zoom: 8,
            layers: [grayscale, sitios]
        });

        var baseLayers = {

            //"Grayscale": grayscale,
            //"Streets": streets

        };

        var overlays = {
            "Pirámide": sitios,
            "Poblado": pueblo,
            "Servicio": gas
        };

        L.control.layers(baseLayers, overlays).addTo(map);
    </script>
</body>
</html>

我会感谢您的所有答案

1 个答案:

答案 0 :(得分:0)

与Leaflet.markercluster一样,您必须创建一个标记群集组,您的子组将进入该组。

对于图层支持,您可以创建一个带有图层支持的标记群集组:

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

然后你&#34;签入&#34;这些子组,当他们通过图层控件选择时,他们知道他们必须进入该聚类组而不是直接进入地图:

mcg.checkIn([
    sitios,
    pueblo,
    gas
]);

演示:http://plnkr.co/edit/CT3E63AKWze34FqUoiHn?p=preview

注意:您应该下载 JavaScript文件leaflet.markercluster.layersupport-src.js(如果尚未完成),并将其放在HTML页面旁边,以便它可以在本地引用它。

注意2:如果您的使用仅需要将群集与L.Control.Layers兼容,您可能会对这个更简单的插件感兴趣:Leaflet.FeatureGroup.SubGroup

免责声明:我是这些插件的作者。

相关问题