是否可以从 OverlappingMarkerSpiderfier 开始为传单扩展标记?

Is it possible to expand markers from the start with OverlappingMarkerSpiderfier for leaflet?

我正在尝试整合 OverlappingMarkerSpiderfier into my project, which is using leaflet. If I look at the demo,我必须相信这是可行的,但是,我想在一种状态下加载地图,即彼此靠近的标记被扩展而不是必须单击在任何组上。但是,从文档中我无法真正看到如何做到这一点,而且我也担心缩放事件,因为演示会在任何缩放事件中折叠组。

所以,我的问题如下:如何使用 OverlappingMarkerSpiderfier for leaflet 在地图加载时展开所有组并在地图缩放时重新计算?

编辑:

这是我尝试使用它的方式:

var omsOptions = {
    keepSpiderfied: true,
    nearbyDistance: 300
};
var oms = new OverlappingMarkerSpiderfier(map, omsOptions);
for (var cachedMarkerIndex in cachedMarkers) {
    oms.addMarker(cachedMarkers[cachedMarkerIndex]);
}

希望 keepSpiderfied 会让它们保持 spiderfied,但它不仅不会以 spiderfied 的方式初始化标记,而且如果我单击地图上的任意位置,它还会折叠标记。我真的无意批评这个库,因为我相信这是一个绝妙的想法,也是对其作者的荣誉,但是,如果不支持我需要的功能,那么我将不得不编写自己的库而不是使用这个库。

直接不.. 没有 class 方法或选项可以让标记蜘蛛化。关于第 39 行的 plugins script,定义了一些映射事件监听器:@map.addEventListener(e, => @['unspiderfy']()) for e in ['click', 'zoomend']。因此,在地图的每次点击或缩放事件中,标记都会消失。因此,您必须编写自己的库或通过添加附加选项来增强现有库。

编辑(作者:Lajos Árpád):

步骤:

  1. 我已添加

    this.options = opt;

_Class function 以确保以后可以使用这些选项。

  1. 我已经添加了

if (this.options.DisableSpiderfy) { //Spiderfy is disabled return; }

function分配给p.spiderfy.

  1. 我已经添加了

if (this.options.DisableUnspiderfy) { //Unspiderfy was disabled return; }

function分配给p["unspiderfy"].

用法示例:

        `var omsOptions = {
            keepSpiderfied: true,
            nearbyDistance: 100,
            DisableUnspiderfy: true
        };
        var oms;
        function drawSpiderMarkers(rows, options) {
            drawMarkers(rows, options); //This function draws markers by marker options
            if (!oms) {
                setTimeout(function() {
                    oms = new OverlappingMarkerSpiderfier(map, omsOptions);
                    for (var cachedMarkerIndex in cachedMarkers) {
                        oms.addMarker(cachedMarkers[cachedMarkerIndex]);
                    }
                    for (var cachedMarkerIndex in cachedMarkers) {
                        oms.spiderListener(cachedMarkers[cachedMarkerIndex]);
                    }
                }, 200);
            }
        }`

通过这些更改,我已经达到了可以根据自己的喜好切换 on/off spiderfy/unspiderfy 的地步,允许我从一开始就对所有标记进行 spiderfy,而不是在任意单击时取消对它们的 spiderfy .不幸的是,这是一个 hack,将与库的未来版本不兼容,但是,它现在是一个很好的解决方案。