Newer
Older
yuma1106 / gitbucket_rensyuu.js
document.addEventListener('DOMContentLoaded', () => {
  const map = L.map('map').setView([38.893567, 139.818873], 13);

  // OSMタイル
  L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    attribution: '© OpenStreetMap contributors'
  }).addTo(map);

  // CSV読み込み
  Papa.parse("gitbucket_rensyuu.csv", {
    download: true,
    header: true,
    complete: function(results) {
      results.data.forEach(row => {
        if (row.latitude && row.longitude) {
          const lat = parseFloat(row.latitude);
          const lng = parseFloat(row.longitude);

          // 説明文(空欄は無視)
          const descriptions = [row.description1, row.description2, row.description3]
            .filter(desc => desc && desc.trim() !== "")
            .map(desc => `<p>${desc}</p>`)
            .join("");

          // 画像処理(空欄は無視、クリックでモーダル)
          let images = "";
          if (row.img1 && row.img1.trim() !== "") {
            images += `<img src="${row.img1}" width="106" height="73" onclick="openModal('${row.img1}')" style="cursor:pointer;">`;
          }
          if (row.img2 && row.img2.trim() !== "") {
            images += `<img src="${row.img2}" width="106" height="73" onclick="openModal('${row.img2}')" style="cursor:pointer;">`;
          }

          // icon処理(空欄ならデフォルトを使用)
          const iconUrl = row.icon && row.icon.trim() !== "" ? row.icon : "images/default_icon.png";
          const markerIcon = L.icon({
            iconUrl: iconUrl,
            iconSize: [32, 32],
            iconAnchor: [16, 32],
            popupAnchor: [0, -32]
          });

          // ポップアップ内容
          const popupContent = `
            <div class="popup-content">
              <h3>${row.name}</h3>
              ${descriptions}
              ${images}
            </div>
          `;

          // マーカー追加(カスタムアイコン付き)
          L.marker([lat, lng], { icon: markerIcon }).addTo(map).bindPopup(popupContent);
        }
      });
    }
  });

  // モーダル開閉
  window.openModal = function(imageSrc) {
    const modal = document.getElementById('image-modal');
    const modalImage = document.getElementById('modal-image');
    modalImage.src = imageSrc;
    modal.style.display = 'block';
  };

  window.closeModal = function() {
    const modal = document.getElementById('image-modal');
    modal.style.display = 'none';
  };

  // モーダル外クリックで閉じる
  window.onclick = function(event) {
    const modal = document.getElementById('image-modal');
    if (event.target === modal) {
      modal.style.display = 'none';
    }
  };
});