首页 > 解决方案 > Leaflet markercluster - 点击放大然后spiderfy

问题描述

我只对同一位置的标记进行聚类(即 maxClusterRadius = 0)。单击集群时,我希望它以特定缩放级别(而不是最大缩放)居中并放大,然后立即进行蜘蛛化。使用以下代码,spiderfy 不会在缩放后发生,但如果已经在所需的缩放级别,则会发生。我怀疑这是因为集群在缩放后被认为是不同的。我如何引用新的集群(例如基于纬度/经度)?

  cluster.on('clusterclick', function (a) {

        if (map.getZoom() < 19) {
            map.once('zoomend', function() { a.layer.spiderfy(); });
            map.flyTo(a.layer.getLatLng(), 19); 
            }
        else
            a.layer.spiderfy();
        });    

标签: leaflet.markercluster

解决方案


同样的问题。我有这个解决方法:

var mymap = L.map('mapid_<?= $this->id?>',{
    maxZoom:13,
    scrollWheelZoom:false,
}).setView([43.38388,-1.3049538], 7);

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}', {foo: 'bar', attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'}).addTo(mymap);

var markers = L.markerClusterGroup({
    disableClusteringAtZoom: 14,
    spiderfyOnMaxZoom: false,
    zoomToBoundsOnClick:false,
    animate:false
});

clickedMarker="";
mymap.on('zoomend', function() {
    if (clickedMarker!=="" && mymap.getZoom()>=mymap.options.maxZoom) {
        clickedMarker.__parent.spiderfy();
        clickedMarker="";
    }
});

markers.on('clusterclick', function (a) {
    if (a.layer._childCount>0) {
        clusterMarkers = a.layer.getAllChildMarkers();
        clickedMarker=clusterMarkers[0];
    }
    if (mymap.getZoom()>=mymap.options.maxZoom) {
        a.layer.spiderfy();
    } else {
        a.layer.zoomToBounds({padding: [20, 20]});
    }
});

奇怪但 spiderfy 无法使用设置为 true 的 animate 选项......</p>


推荐阅读