问题是当我在叠加层上签出并再次签入后收到此错误:


  Uncaught TypeError:无法读取未定义抛出的属性“ x”
  dist / leaflet.markercluster.js:1:25696 TypeError:无法读取属性
  L.DistanceGrid._sqDist中未定义的'x'(DistanceGrid.js:114)
  在e._addLayer的L.DistanceGrid.getNearObject(DistanceGrid.js:94)
  (MarkerClusterGroup.js:974)在评估(MarkerClusterGroup.js:249)
  在e.addLayers处(e.addLayers(MarkerClusterGroup.js:283)
  (layersupport.js:99)在e.onAdd(layersupport.js:517)在
  位于e.whenReady(leaflet.js:5)的e._layerAdd(leaflet.js:5)
  e.addLayer(leaflet.js:5)


I saw that this function from DistanceGrid(is in leaflet library) which is called when i check in on the overlay

_sqDist: function (p, p2) {
      var dx = p2.x - p.x,
          dy = p2.y - p.y;
      return dx * dx + dy * dy;
  }


当我签入是p时不确定。我已经为这个错误苦苦挣扎了很长时间。也许你有一些建议

已为组定义了标记,并且标记已正确显示,只有签入才能签出。一旦我检查了群集,群集就会消失,并且一旦签入,就会收到之前提到的错误,而不是在地图上重新显示群集

这是控制器代码:

JS controller:
var map = L.map('map', {zoomControl: true, tap: false, preferCanvas:true})
var group1,group2,group3,group4;
var myRenderer = L.canvas({ padding: 0.5 });
 var markers = L.markerClusterGroup.layerSupport( {
        chunkedLoading: true,
        renderer: myRenderer,
        iconCreateFunction: function  (cluster) {
        var childCount = cluster.getChildCount();

        var c = ' marker-cluster-';
        if (childCount < 10) {
            c += 'small';
        }
        else if (childCount < 100) {
            c += 'medium';
        }
        else {
                c += 'large';
        }

        return new L.DivIcon({ html: '<div><span>' + childCount + '</span>
</div>',
                              className: 'marker-cluster' + c, iconSize:
 new L.Point(40, 40) });
            }
});

 group1 = L.layerGroup(),
       group2 = L.layerGroup(),
      group3 = L.layerGroup(),
       group4 = L.layerGroup(),

    markers.checkIn([group1, group2, group3, group4]);

    var overlayMaps = {
        "g1": group1,
        "g2": group2,
        "g3":group3,
        "g4":group4
    };
    var control = L.control.layers(null, overlayMaps, { collapsed: true });


    control.addTo(map);

    group1.addTo(map); // Adding to map or to AutoMCG are now equivalent.
    group2.addTo(map);
    group3.addTo(map);
    group4.addTo(map);

 markers.addTo(map);


PS:我不知道如何提供可行的版本,因为这是Salesforce应用程序

最佳答案

Leaflet.markercluster.layerSupport插件可能无法很好地处理chunkedLoading选项。

我不确定为什么您需要定期“签出”和“签到”?您是要使用“图层控件”来删除/添加叠加层吗?

否则,如果“仅”需要一种解决方案以将Leaflet.markercluster与Layers Control一起使用,则可以尝试使用更简单的插件Leaflet.FeatureGroup.SubGroup,尽管如果chunkedLoading是问题的原因,则可能也是与该插件相同。

10-07 15:26