Можно ли с самого начала расширить маркеры с помощью 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']
, Таким образом, при каждом событии щелчка или увеличения карты маркеры не падают. Следовательно, вы должны написать свою собственную библиотеку или улучшить существующую, добавив дополнительную опцию.
РЕДАКТИРОВАТЬ (Лайош Арпад):
шаги:
я добавил
this.options = opt;
к _Class
function
чтобы убедиться, что параметры могут быть использованы позже.
- я добавил
if (this.options.DisableSpiderfy) {
//Spiderfy is disabled
return;
}
к function
назначен на p.spiderfy
,
- я добавил
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 все маркеры и не удалять их при произвольном щелчке. К сожалению, это хак и будет несовместимо с будущими версиями библиотеки, однако пока это хорошее решение.