Выбор нескольких листовочных маркеров и создание ссылки для скачивания - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть листовка, которая вводит данные из 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]);
    }
  }
});

1 Ответ

0 голосов
/ 26 сентября 2019

Взгляните на эти ссылки.Проблема связана с "(e.boxZoomBounds.contains (markers [i]))"

https://github.com/tombatossals/angular-leaflet-directive/issues/863

Определить, находится ли точка внутри ограничительной рамки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...