У меня есть листовка-карта, уже работает. В настоящее время у меня есть несколько фильтров флажков (всего почти 40 на двух картах): пользователь может выбрать несколько маркеров одновременно. Фильтры представляют «специальности», и когда я нажимаю на фильтр, он показывает мне больницы, в которых есть эта специальность. Таким образом, на карте у меня могут быть кластеры, которые показывают больницу с несколькими специальностями, и отдельные маркеры, которые показывают разные больницы с одной специализацией.
- Если пользователь нажимает на фильтр A, он отображает, например, 5 маркеров с функцией A.
- Если пользователь нажимает на фильтр B, он отображает 5 маркеров с функцией B.
- И когда пользователь нажимает на фильтры A и B вместе, он отображает A + B, то есть 10 маркеров, с отдельными маркерами и сгруппированными маркерами.
Что я пытаюсь сделать:
Каждый отдельный флажок должен отображать соответствующие маркеры, НО, как только я устанавливаю несколько флажков одновременно, я хочу отображать только маркеры (больница), где я могу найти соответствующие функции. Например, если я нажму на фильтр A и B вместе, я хотел бы видеть только больницы, в которых есть специальности A и B, и скрыть маркер только с одной функцией.
Поскольку я уже закодировал все свои функции, я не хочу перестраивать новые функции GeoJSON. Я пытался, но он дублирует маркеры.
Я ищу такой цикл (конечно, это не работает):
$('#filters input').on('click', function(){// if click on checkbox
var ID = $(this).attr("id");//I can get the checkbox IDs here, which correspond to the feature name
if ($('#filters input:checked').length >=2 ){ // as soon as there are more than one checkbox checked
var checkboxes = $("#filters input:checked");
for (var i = 0; i < checkboxes.length; i++) {//for all checked checkboxes
if(feature[i].geometry.coordinates == feature[i].geometry.coordinates){//if the markers have same coordinates
return layer.feature.properties.Examen; // show me those markers
}else{
return false;// hide other markers
}
}
}
})
Я думаю, что у меня уже есть вся необходимая информация со следующим кодом, но я не знаю, как объединить это, чтобы получить то, что мне нужно...
Вот пример одной функции:
{
"type": "Feature",
"properties": {
"Examen": "iduronate",
"Prelevement": "DBS ou Buvard 1 tâche de sang (+ 1 contrôle) ou Sang total EDTA 5 ml (Leucocytes)",
"Envoi": "Envoi rapide à température ambiante",
"Laboratoire": "Secteur des Enzymopathies UM-BEP-DBTP-IBP",
"Chu": "CHU de Grenoble-Alpes",
"Adresse": "CS 10217",
"Cp": "38043 Grenoble Cedex 9",
"Professeur": "Dr Vergnaud Sabrina",
"Tel": "Tel : 04 76 76 54 83 ou 04 76 76 59 05",
"Fax": "Fax : 04 76 76 56 08",
"Mail": "[email protected]",
"Url": "http://biologie.chu-grenoble.fr/",
"Mode": "Buvard"
},
"geometry": {
"type": "Point",
"coordinates": [5.7423258, 45.2015191]
}
}
Чтобы добавить маркеры «iduronate»: я устанавливаю флажок с идентификатором «iduronate». Если я сниму флажок, он скроет мои маркеры.
$("#iduronate").click(function() {
if (this.checked) {
iduronate.addTo(clusterade);
} else {
clusterade.removeLayer(iduronate);
}
});
Добавление маркера на карту, отображение пользовательского значка и отображение данных
var iduronate = L.geoJson(examenData, {
filter: function(feature, layer) {
return feature.properties.Examen == "iduronate";
},
onEachFeature: onEachFeature2,
pointToLayer: function(feature, latlng) {
return L.marker(latlng, {
icon: iduronateIcon
})
}
})
И, наконец, пример моего фильтра
<div>
<input type="checkbox" class="gaucher" id="iduronate" name="EnzymeDef_mps1[]">
<label for="iduronate">Iduronate sulfatase </label>
<div>
Извините, я пытался опубликовать свой код здесь, но он слишком длинный для «тела»... Поэтому я сделал codepen, чтобы показать его в реальном времени. Спасибо за вашу помощь!!
feature.properties.Examen == "nacetylglucosaminidase"
и фильтр B, например.feature.properties.Examen == "heparane_sulfamidase"
, и любой заданный точечный объект имеет одно и только одно значение для свойстваExamen
(поскольку это свойство является строкой, а не массивом и т. д.), то ни один объект не может удовлетворять обоим условиям одновременно, и поэтому ваш вопрос не имеет смысла. - person IvanSanchez   schedule 01.05.2020