Можно ли с самого начала расширить маркеры с помощью OverlappingMarkerSpiderfier для листовки?

Я пытаюсь интегрировать https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet в мой проект, который использует листовку. Если я посмотрю на демо, я должен поверить, что это работает, однако я хотел бы загрузить карту в состоянии, в котором маркеры, расположенные близко друг к другу, израсходованы вместо необходимости нажимать на какую-либо группу. Тем не менее, из документов я не могу понять, как это можно сделать, и я также беспокоюсь о событиях масштабирования, так как демонстрация сворачивает группы при любых событиях масштабирования.

Итак, мой вопрос заключается в следующем: Как я могу использовать OverlappingMarkerSpiderfier для листовки, чтобы развернуть все группы при загрузке карты и пересчитать при увеличении карты?

РЕДАКТИРОВАТЬ:

Вот как я пытался это использовать:

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

надеясь, что keepSpiderfied будет держать их в пауках, но не только не инициализирует маркеры паукообразно, но также сворачивает маркеры, если я нажимаю на произвольное место на карте. Я действительно не собираюсь критиковать библиотеку, так как считаю, что это замечательная идея и похвала для ее автора, однако, если нужные мне функции не поддерживаются, то мне придется написать свою собственную библиотеку вместо ее использования.

1 ответ

Решение

Прямо нет.. нет метода класса или опции, чтобы оставить маркеры паукообразными. Относительно скрипта плагинов в строке 39 определено несколько карт событийных определителей: @map.addEventListener(e, => @['unspiderfy']()) for e in ['click', 'zoomend'], Таким образом, при каждом событии щелчка или увеличения карты маркеры не падают. Следовательно, вы должны написать свою собственную библиотеку или улучшить существующую, добавив дополнительную опцию.

РЕДАКТИРОВАТЬ (Лайош Арпад):

шаги:

  1. я добавил

    this.options = opt;

к _Classfunction чтобы убедиться, что параметры могут быть использованы позже.

  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);
            }
        }`

С этими изменениями я дошел до того, что я могу включить / выключить spiderfy / unspiderfy по своему вкусу, что позволяет мне с самого начала spiderfy все маркеры и не удалять их при произвольном щелчке. К сожалению, это хак и будет несовместимо с будущими версиями библиотеки, однако пока это хорошее решение.

Другие вопросы по тегам