/**
* 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