Mapbox.js GEOJson 与 Markercluster

Mapbox.js GEOJson with Markercluster

我想用 mapbox.js 的 MarkerCluster 实现 GEOJson。

没有 Markercluster,一切正常:

  $.ajax({
        url: 'dashboard/geoJSON',
        dataType: 'json',
        type: 'POST',
        success: function(geojson) {

            locations = L.mapbox.featureLayer().addTo(map)
            locations.on('layeradd', function (e) {
                var marker = e.layer;
                markers.push(marker);
            });

            locations.setGeoJSON(geojson);

            ...

但是当我尝试实施 MarkerCluster 时,它只显示 1 个标记

        ...
        success: function(geojson) {

            locations = L.mapbox.featureLayer().addTo(map)
            var clusterGroup = new L.MarkerClusterGroup();
            locations.on('layeradd', function (e) {
                var marker = e.layer;
                markers.push(marker);
                clusterGroup.addLayer(markers);
            });
            locations.setGeoJSON(geojson);
            map.addLayer(clusterGroup);

并显示以下错误:

TypeError: t.onAdd is not a function

任何人都可以帮助我,我怎样才能从远程服务器成功地将 markercluster 与 GEOJson 结合起来? 提前致谢

// 编辑:找到一个不同的例子,它已经可以使用:

      var markers = L.markerClusterGroup();

      var geoJsonLayer = L.geoJson(geojson, {
          onEachFeature: function (feature, layer) {

          }
       });
       markers.addLayer(geoJsonLayer);

       map.addLayer(markers);    

       map.fitBounds(markers.getBounds());

但现在它失去了我的 "default" 属性的样式 "marker-color" - "marker-size".

我现在如何设计我的标记?

Mapbox 有点奇怪,看起来总有至少 10 种方法可以解决此类问题 ;)

如果您的 markers 变量是数组(因为您在其上使用 .push()),则不能使用 clusterGroup.addLayer(markers)。您可以使用 .addLayers(markers)(在 addLayers 上使用 "s")。

我想您无论如何都不想在每个 "layeradd" 事件中添加整个数组,所以也许您的意思是 clusterGroup.addLayer(marker)(没有 marker 上的 "s",即您的个人标记/特征)。

顺便说一句,您可以使用 L.mapbox.featureLayer()onEachFeature 选项,而不是使用事件侦听器。

最后,不要将您的要素组也添加到地图中。那是目前正在添加您唯一的标记的那个。您想让您的群集组自动处理从地图添加/删除的标记。