/** * BlueForest Hirosaki - 避難所マップ(evacuation-map)専用スクリプト * 「避難所・防災アプリ案内」ページ(スラッグ: evacuation-info)でのみ読み込まれます。 * * データ出典:国土地理院「指定緊急避難場所・指定避難所データ」(青森県全域) * https://www.gsi.go.jp/bousaichiri/hinanbasho.html * * データ本体は data/evac-sites.json(指定緊急避難場所)・data/shelters.json(指定避難所) * から読み込みます。地点情報そのものを編集したい場合は、このJSファイルではなく * それぞれのJSONファイルを編集してください(理論上は国土地理院サイトから再取得して * 差し替える形になります)。 */ (function () { 'use strict'; var DISASTER_LABELS = { flood: '洪水', landslide: '崖崩れ・土石流・地滑り', stormsurge: '高潮', earthquake: '地震', tsunami: '津波', fire: '大規模な火事', inlandflood: '内水氾濫', volcano: '火山現象' }; function initEvacMap() { var mapEl = document.getElementById('evac-map'); if (!mapEl || typeof L === 'undefined') return; var map = L.map('evac-map').setView([40.75, 140.6], 8); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors', maxZoom: 19 }).addTo(map); function makeGroup() { if (typeof L.markerClusterGroup === 'function') { return L.markerClusterGroup({ maxClusterRadius: 60, disableClusteringAtZoom: 16 }); } return L.layerGroup(); } var siteLayer = makeGroup(); // 指定緊急避難場所(災害種別で絞り込み可) var shelterLayer = makeGroup(); // 指定避難所 var siteMarkers = []; // { marker, types: [...] } var activeDisasters = Object.keys(DISASTER_LABELS); // 初期状態は全種別表示 function siteMatchesFilter(types) { // いずれかの選択中の災害種別に対応していれば表示 for (var i = 0; i < types.length; i++) { if (activeDisasters.indexOf(types[i]) !== -1) return true; } return false; } function rebuildSiteLayer() { siteLayer.clearLayers(); siteMarkers.forEach(function (item) { if (siteMatchesFilter(item.types)) { siteLayer.addLayer(item.marker); } }); } function typeBadges(types) { if (!types.length) return '(対応災害種別の記載なし)'; return types.map(function (t) { return DISASTER_LABELS[t] || t; }).join('・'); } // ─── 指定緊急避難場所を読み込み ─── fetch(window.BF_EVAC_DATA_URL_SITES) .then(function (res) { return res.json(); }) .then(function (data) { data.forEach(function (s) { var marker = L.circleMarker([s.lat, s.lng], { radius: 7, fillColor: '#c9a84c', color: '#1a1f2e', weight: 1, fillOpacity: 0.9 }).bindPopup( '' + s.n + '
' + s.a + '
' + '対応災害種別: ' + typeBadges(s.d) + '' ); siteMarkers.push({ marker: marker, types: s.d || [] }); }); rebuildSiteLayer(); siteLayer.addTo(map); updateCount(); }) .catch(function (err) { console.error('避難場所データの読み込みに失敗しました', err); }); // ─── 指定避難所を読み込み ─── fetch(window.BF_EVAC_DATA_URL_SHELTERS) .then(function (res) { return res.json(); }) .then(function (data) { data.forEach(function (s) { var popup = '' + s.n + '
' + s.a; if (s.t) { popup += '
受入対象: ' + s.t + ''; } var marker = L.circleMarker([s.lat, s.lng], { radius: 7, fillColor: '#5b7fa8', color: '#1a1f2e', weight: 1, fillOpacity: 0.9 }).bindPopup(popup); shelterLayer.addLayer(marker); }); shelterLayer.addTo(map); updateCount(); }) .catch(function (err) { console.error('避難所データの読み込みに失敗しました', err); }); function updateCount() { var countEl = document.getElementById('evac-map-count'); if (!countEl) return; var shown = 0; siteMarkers.forEach(function (item) { if (siteMatchesFilter(item.types)) shown++; }); countEl.textContent = '指定緊急避難場所 ' + shown + ' / ' + siteMarkers.length + ' 件を表示中'; } // ─── レイヤー表示切替(指定緊急避難場所 / 指定避難所) ─── document.querySelectorAll('.evac-layer-toggle').forEach(function (cb) { cb.addEventListener('change', function () { var key = cb.getAttribute('data-layer'); var layer = key === 'sites' ? siteLayer : shelterLayer; if (cb.checked) { map.addLayer(layer); } else { map.removeLayer(layer); } }); }); // ─── 災害種別フィルター ─── document.querySelectorAll('.evac-disaster-filter').forEach(function (cb) { cb.addEventListener('change', function () { activeDisasters = Array.from(document.querySelectorAll('.evac-disaster-filter:checked')) .map(function (el) { return el.getAttribute('data-disaster'); }); rebuildSiteLayer(); updateCount(); }); }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initEvacMap); } else { initEvacMap(); } })();
Warning: Cannot modify header information - headers already sent by (output started at /home/c0161186/public_html/blueforest.jp/wp-content/themes/blueforest/functions.php:1) in /home/c0161186/public_html/blueforest.jp/wp-includes/sitemaps/class-wp-sitemaps-renderer.php on line 126
https://www.blueforest.jp/wp-sitemap-posts-post-1.xmlhttps://www.blueforest.jp/wp-sitemap-posts-page-1.xmlhttps://www.blueforest.jp/wp-sitemap-taxonomies-category-1.xmlhttps://www.blueforest.jp/wp-sitemap-users-1.xml