У меня есть листовка, которая вводит данные из json и динамически генерирует слои и кластеры.У каждого маркера есть кнопка загрузки, которая передает имя этого маркера последующему сценарию php, который затем обращается к базе данных и предоставляет образцы данных пользователю.
Следующее, что я пытаюсь сделать, это уметьвыбрать несколько маркеров и передать эти имена одному и тому же сценарию php.(Сценарий анализирует входные данные в массив, поэтому он работает, когда передается одно имя или длинный список.)
Я пытался использовать этот код для массового выбора, но он выдает ошибкудля lat быть неопределенным.
map.on("boxzoomend", function(e) {
for (var i = 0; i < markers.length; i++) {
if (e.boxZoomBounds.contains(markers[i])) {
console.log(markers[i]);
}
}
});
Я пытался разобраться с некоторыми более старыми решениями, которые могли бы работать как включение листовки или другие плагины.Но я не сильно продвигаюсь в этом отделе.
Но когда я думаю об этом, мне нужен не только способ выбора нескольких маркеров (либо путем рисования прямоугольника, либо какого-либо нажатия Ctrl / Shift).договоренность,) но мне также нужно всплывающее окно для загрузки данных.(Поскольку моя текущая ссылка на скачивание создается в самом маркере и предназначена только для этого конкретного маркера.)
Вот пример скрипта моей карты: https://jsfiddle.net/crashvector/xczj76om/19/
ЦЕЛЬ:конечный результат позволил бы пользователю выбрать несколько маркеров, а затем либо сгенерировать кнопку, либо всплывающее окно для загрузки связанных данных.Ссылка будет выглядеть примерно так:
`http://server/download.php?sample_name='sample_1 sample_2 sample_3 sample_4'>Download Microbial Community Data</button>'
Любое понимание приветствуется!
РЕДАКТИРОВАТЬ Текущая попытка здесь: https://jsfiddle.net/crashvector/xczj76om/24/
Я создал массив для хранения всех точек независимо от слоя.А затем я вставляю имя и значение latlng в этот массив при генерировании каждого маркера.
Затем я выгружаю массив в консоль, чтобы убедиться, что он там, и затем указываю функцию boxzoomed на значения latlngs в массиве.,Я смог заставить это работать, когда тогда только данные в массиве были latlngs.Но теперь, когда я включил имя образца, он не работает.(Я уверен, что это потому, что я не понимаю обозначения, необходимые для сохранения или извлечения значений.)
Правильный ли я курс?
//adding an array to hold all marker locations and names
var bulk_list = [];
for (var i = 0; i < markers.length; ++i) {
var popup = '<br/><b>Sample Name:</b> ' + markers[i]["Sample Name"] +
'<br/><b>Location Description:</b> ' + markers[i]["Location Description"] +
'<br/><b>Date Taken:</b> ' + markers[i].Date +
'<br/><b>Classification:</b> ' + markers[i].Classification +
'<br/><button onclick="window.location=`zip_download.php?sample_name_list=' + markers[i]["Sample Name"] + '`" download="' + markers[i]["Sample Name"] + ' community data.csv">Download Microbial Community Data</button>'
//define markers
var m = L.marker([markers[i].Lattitude, markers[i].Longitude], {
icon: icons[markers[i].Classification]
})
.bindPopup(popup);
category = markers[i].Classification;
//pushing each markers name and latlng to the bulklist array
var data = {};
var name = markers[i]["Sample Name"];
var latlng = L.latLng([markers[i].Lattitude, markers[i].Longitude]);
data.name = name;
data.latlng = latlng;
bulk_list.push(data);
// Initialize the category array if not already set.
if (typeof categories[category] === "undefined") {
categories[category] = L.featureGroup.subGroup(parentGroup, m).addTo(map);
layersControl.addOverlay(categories[category], category);
}
categories[category].addLayer(m);
}
//output bulklist to show it worked
console.log(bulk_list);
//output sample names of points in the zoom box
map.on("boxzoomend", function(e) {
for (var i = 0; i < bulk_list.length; i++) {
if (e.boxZoomBounds.contains(bulk_list.latlng[i])) {
console.log(bulk_list.name[i]);
}
}
});