Я здесь, потому что я прочитал эту топи c и эту
Мне нужна помощь в использовании плагина SubGroup.
Я создаю карту, подобную этой
var cartoDb = L.tileLayer('https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors © <a href="https://carto.com/attributions">CARTO</a>',
subdomains: 'abcd',
maxZoom: 19
});
, затем я добавляю код для пользовательских маркеров, например:
var ccl18Icon = L.AwesomeMarkers.icon({
prefix: 'fa', //font awesome rather than bootstrap
iconColor: 'white',
markerColor: 'orange', // see colors above
icon: 'ambulance' //http://fortawesome.github.io/Font-Awesome/icons/
});
Я добавляю свою карту
var map = L.map('map')
.addLayer(cartoDb)
.setView([46.85, 2.3518], 6);
Затем я создаю функцию OnEachFeature, внутри которой я получаю все свои свойства geo Json, и функцию "layer.on". Вот так
function onEachFeature(feature, layer) {
var html = '';
if (feature.properties.Myfirstproperty) {
html += '<p class="myfirstproperty">' + feature.properties.Myfirstproperty+ '</p>';
}
(....more html)
layer.on('click', function() {
$('#layer_infos .fill').html(html);
if (L.Browser.mobile) {
$('#infos').addClass("slide");
$('#filters').removeClass('slide');
$('.hamburger').text('Sélect something').fadeIn();
}
})
Я дублирую эту часть, потому что у меня есть две карты во вкладках, меняются только id и класс элементов
Затем я получаю все данные из файла geo Json file
var promise = $.getJSON("examen.json");
promise.then(function(data) {
var all = L.geoJson(data);
var ccl18 = L.geoJson(data, {
filter: function(feature, layer) {
return feature.properties.Category == "ccl18";
},
onEachFeature: onEachFeature,
pointToLayer: function(feature, latlng) {
return L.marker(latlng, {
icon: ccl18Icon
})
}
})
После всего этого кода я создаю функции щелчка, чтобы показать скрытый слой, в зависимости от фильтров chekcbox, что-то вроде этого.
$("#ccl18").click(function() {
if (this.checked) {
map.addLayer(ccl18)
map.fitBounds(allexamens.getBounds(), {
padding: [50, 50]
});
map.removeLayer(glucomarker)
} else {
map.removeLayer(ccl18)
}
});
Я публикую весь этот код, потому что я не знаю если я могу использовать плагин SubGroup с моей конфигурацией. То, что я ищу, - это позволить пользователю нажимать на несколько фильтров-флажков и кластеризовать маркеры, даже если они принадлежат к разным категориям; На данный момент я могу кластеризовать каждую группу отдельно, но не вместе. Я видел этот код от автора плагина:
var parentGroup = L.markerClusterGroup().addTo(map);
var overlays = {};
for (var i = 1; i <= 5; i += 1) {
overlays['Group ' + i] = L.featureGroup.subGroup(
parentGroup,
getArrayOfMarkers()
).addTo(map);
}
L.control.layers(null, overlays, {
collapsed: false,
}).addTo(map);
function getArrayOfMarkers() {
var result = [];
for (var i = 0; i < 10; i += 1) {
result.push(L.marker();
}
return result;
}
, но я не понимаю, как его реализовать .. Кому-то удалось заставить его работать с гео Json данными? Любая помощь будет оценена !!
Спасибо