我想使用带有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());


但是现在,它使用诸如“ marker-color”-“ marker-size”之类的属性来放松我的“默认”样式。

我现在该如何为标记设置样式?

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

最佳答案

如果您的markers变量是一个数组(在其上使用.push()时),则不能使用clusterGroup.addLayer(markers)。您可能使用过.addLayers(markers)(在addLayers上带有“ s”)。

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

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

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

08-25 02:41