Mapbox.js带有Markercluster的GEOJson

时间:2016-08-23 12:14:13

标签: javascript leaflet mapbox

我想用MarkerCluster和mapbox.js实现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种方法可以解决这些问题;)

1 个答案:

答案 0 :(得分:1)

如果您的.push()变量是一个数组(当您使用clusterGroup.addLayer(markers)时),则无法使用.addLayers(markers)。您可以使用addLayers(在"layeradd"上使用“s”)。

我想你不想在每个clusterGroup.addLayer(marker)事件中添加整个数组,所以也许你的意思是markeronEachFeature上没有“s”,即你的个人标记/ feature)。

顺便说一下,您可以使用L.mapbox.featureLayer()的{​​{1}}选项,而不是使用事件监听器。

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