Leaflet MarkerCluster bindPopup в l oop использует только последнее значение - PullRequest
1 голос
/ 03 февраля 2020

Я написал этот фрагмент с помощью библиотеки Leaflet MarkerCluster, и я пытаюсь программно назначить разные сообщения каждому маркеру, используя метод bindPopUp:

  var markers = L.markerClusterGroup();

  for (const [key, value] of Object.entries(data['Company Name'])) {
    var temp = {};
    temp['ESG Risk Score'] = 1/data['ESG Risk Score'][key];
    temp['Coordinates'] = [data['Latitude'][key], data['Longitude'][key]];
    temp['Market Cap'] = String(data['Market Cap'][key]).replace(/\B(?=(\d{3})+(?!\d))/g, ",");;
    temp['Company Name'] = value;
    var message = "<p>ESG score: " + data['ESG Risk Score'][key] + "</p><p>Company Name: " + temp['Company Name'] + "</p><p>Market Capital $: " + temp['Market Cap'];
    markers.addLayer(L.marker(temp["Coordinates"])).bindPopup(message).addTo(myMap);
  }

Проблема, с которой я сталкиваюсь, заключается в том, что последний message привязывается ко всем маркам на карте.

Есть ли способ, чтобы каждое всплывающее окно не перезаписывалось последним значением в l oop?

Спасибо!

1 Ответ

0 голосов
/ 03 февраля 2020

Из-за того, как вы поставили круглые скобки, вы применяете метод bindPopup к вашей markers MarkerClusterGroup, а не к отдельному маркеру:

markers.addLayer(L.marker(temp["Coordinates"])).bindPopup(message)

... должно быть:

markers.addLayer(L.marker(temp["Coordinates"]).bindPopup(message))

Примечание: вы можете улучшить производительность, добавив все свои Маркеры в MCG сразу только после вашего l oop (используйте addLayers), или добавив свой MCG на карту только после вашего l oop.

...