【问题标题】:Mapbox.js GEOJson with MarkerclusterMapbox.js GEOJson 与 Markercluster
【发布时间】:2016-08-23 12:14:12
【问题描述】:

我想用 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 种方法可以解决这些问题;)

【问题讨论】:

    标签: javascript leaflet mapbox


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回答,我稍微修改了我的问题。
    • 你知道如何重置标记集群吗?例如:当用户更改过滤器时,我再次加载我的标记,然后我想重新初始化集群组。通常不适使用:markers.forEach(function(entry) { map.removeLayer(entry); }); ,但这不再起作用了。有什么想法吗?
    • 我不确定我理解你的意思……你可以试试clusterGroup.clearLayers()。如果这不是您想要的,也许您应该打开一个专门的问题,提供更多详细信息。
    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 2014-11-12
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多