From 70a77e189a09d180fd42d5f0cdceb7e0cbd903ce Mon Sep 17 00:00:00 2001 From: Yasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com> Date: Sat, 7 Nov 2026 13:17:22 +0900 Subject: kodaira-parks.json: 「テーブル」を「野外卓」に改名し、フィルタとアイコンを更新 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 草地広場フィルタは草地広場のみを対象にし、「野外卓/縁台」を追加 - 市内・周辺公園データと編集画面の「テーブル」を「野外卓」に統一 - じゃぶじゃぶ池を水色の水滴+波紋アイコンに変更 - 野外卓はキャンプテーブル、ペットは犬のアイコンに変更 - フィルタ時に非該当の公園ポリゴンを消さず点滅表示を維持 --- scripts/park-editor.html | 6 +-- src/components/ParkMap.astro | 67 +++++++++++++++++++++------------ src/components/ParksFilters.astro | 4 ++ src/components/ParksTable.astro | 19 +++------- src/content/docs/kodaira-data/parks.mdx | 4 +- src/data/kodaira-nearby-parks.json | 2 +- src/data/kodaira-parks.json | 2 +- src/data/park-icons.ts | 6 ++- src/data/parks-rows.ts | 4 +- 9 files changed, 65 insertions(+), 49 deletions(-) diff --git a/scripts/park-editor.html b/scripts/park-editor.html index bd2cc1c..7d6ac56 100644 --- a/scripts/park-editor.html +++ b/scripts/park-editor.html @@ -142,7 +142,7 @@ const DATASETS = { FIELD("面積㎡", "面積㎡"), FIELD("種別", "種別"), FIELD("設置者", "設置者"), FIELD("状態", "状態"), FIELD("トイレ", "トイレ"), FIELD("水飲み場", "水飲み場"), FIELD("ベンチ・椅子", "ベンチ・椅子"), - FIELD("テーブル", "テーブル"), FIELD("シェルター等", "シェルター
パーゴラ
東屋"), + FIELD("野外卓", "野外卓
縁台"), FIELD("シェルター等", "シェルター
パーゴラ
東屋"), FIELD("防災用具", "防災用具"), FIELD("ペット", "ペット"), FIELD("ボール遊び", "ボール
遊び"), @@ -163,7 +163,7 @@ const DATASETS = { FIELD("住所", "住所"), FIELD("町名", "町名"), FIELD("種別", "種別"), FIELD("設置者", "設置者"), FIELD("状態", "状態"), FIELD("トイレ", "トイレ"), FIELD("水飲み場", "水飲み場"), - FIELD("ベンチ・椅子", "ベンチ・椅子"), FIELD("テーブル", "テーブル"), + FIELD("ベンチ・椅子", "ベンチ・椅子"), FIELD("野外卓", "野外卓
縁台"), FIELD("シェルター等", "シェルター・パーゴラ・東屋"), FIELD("防災用具", "防災用具"), FIELD("ペット", "ペット"), FIELD("ボール遊び", "ボール遊び"), FIELD("試合形式のボール遊び", "試合形式のボール遊び"), @@ -608,7 +608,7 @@ function corruptLabel(inp) { const PARK_EXPORT_HEAD = ["番号", "確認", "メモ", "公園名", "住所", "Googleマップ"]; const PARK_EXPORT_KEYS = [ "町名", "種別", "面積㎡", "設置者", "状態", - "トイレ", "水飲み場", "ベンチ・椅子", "テーブル", "シェルター等", + "トイレ", "水飲み場", "ベンチ・椅子", "野外卓", "シェルター等", "草地広場", "多目的広場", "築山", "じゃぶじゃぶ池", "防災用具", "ボール遊び", "ペット", "試合形式のボール遊び", "遊具", "時計", "駐車場", "その他設備", "備考", "緯度", "経度", diff --git a/src/components/ParkMap.astro b/src/components/ParkMap.astro index b7ac130..a0a26e6 100644 --- a/src/components/ParkMap.astro +++ b/src/components/ParkMap.astro @@ -132,20 +132,20 @@ align-items: center; justify-content: center; box-sizing: border-box; - width: 16px; - height: 16px; + width: 18px; + height: 18px; border: 1px solid #c8e6c9; border-radius: 4px; background: #e8f5e9; color: #2e7d32; - font-size: 10px; + font-size: 11px; font-weight: 700; line-height: 1; } :global(.park-popup-ico svg) { display: block; - width: 12px; - height: 12px; + width: 14px; + height: 14px; } :global(.park-popup-ico-water) { border-color: #90caf9; @@ -160,7 +160,12 @@ :global(.park-popup-ico-pond) { border-color: #81d4fa; background: #e1f5fe; - color: #0277bd; + color: #29b6f6; + } + :global(.park-popup-ico-pet) { + border-color: #ffcc80; + background: #fff3e0; + color: #ef6c00; } :global(.park-popup-meta) { margin-top: 0.1rem; @@ -630,7 +635,7 @@ color: #f9a825; } :global(.park-play-pond) { - color: #0277bd; + color: #29b6f6; } :global(.park-play-rope) { color: #00838f; @@ -1071,8 +1076,18 @@ .filter((s) => DISASTER_KEEP.test(s)) .join("、"); const waterRaw = String(rec?.["水飲み場"] || "").trim(); - // 水飲み場は数量ではなく有無だけを示す。 - const water = waterRaw ? (/[??]/.test(waterRaw) ? "あり?" : "あり") : "なし"; + // 水飲み場は数量ではなく有無だけを、分かるように表示する。 + const water = waterRaw + ? /[??]/.test(waterRaw) + ? "水飲み場あり?" + : "水飲み場あり" + : "水飲み場なし"; + // ○/〇 などの表記は「〜あり」にして意味が分かるようにする。 + const presence = (label: string, value: unknown) => { + const v = String(value ?? "").trim(); + if (!v) return ""; + return /^[○〇◯あり有1]+$/.test(v) ? `${label}あり` : v; + }; // ボール遊びは、試合形式の可否を括弧書きで添える。 const ballText = String(rec?.["ボール遊び"] || "").trim(); const matchText = String(rec?.["試合形式のボール遊び"] || "").trim(); @@ -1084,14 +1099,14 @@ トイレ: "便", 水飲み場: WATER_DROP_ICON, "ベンチ・椅子": PARK_ICONS.bench.svg, - テーブル: "台", + 野外卓: PARK_ICONS.picnic.svg, "シェルター等": "屋", 草地広場: "草", 多目的広場: "広", - 築山: "山", + 築山: PARK_ICONS.mountain.svg, じゃぶじゃぶ池: PARK_ICONS.pond.svg, - ボール遊び: "球", - ペット: "犬", + ボール遊び: PARK_ICONS.ball.svg, + ペット: PARK_ICONS.dog.svg, 時計: "時", 防災用具: "災", }; @@ -1100,15 +1115,15 @@ ["トイレ", rec?.["トイレ"]], ["水飲み場", water], ["ベンチ・椅子", rec?.["ベンチ・椅子"]], - ["テーブル", rec?.["テーブル"]], + ["野外卓", rec?.["野外卓"]], ["シェルター等", rec?.["シェルター等"]], - ["草地広場", rec?.["草地広場"]], - ["多目的広場", rec?.["多目的広場"]], - ["築山", rec?.["築山"]], - ["じゃぶじゃぶ池", rec?.["じゃぶじゃぶ池"]], + ["草地広場", presence("草地広場", rec?.["草地広場"])], + ["多目的広場", presence("多目的広場", rec?.["多目的広場"])], + ["築山", presence("築山", rec?.["築山"])], + ["じゃぶじゃぶ池", presence("じゃぶじゃぶ池", rec?.["じゃぶじゃぶ池"])], ["ボール遊び", ball], ["ペット", rec?.["ペット"]], - ["時計", rec?.["時計"]], + ["時計", presence("時計", rec?.["時計"])], ["防災用具", disaster], ].filter(([, value]) => value && String(value).trim()); const detailHtml = rows @@ -1121,7 +1136,9 @@ ? "park-popup-ico park-popup-ico-bench" : labelText === "じゃぶじゃぶ池" ? "park-popup-ico park-popup-ico-pond" - : "park-popup-ico"; + : labelText === "ペット" + ? "park-popup-ico park-popup-ico-pet" + : "park-popup-ico"; return `
${rowIcons[labelText] || ""}${escapePopup(String(value))}
`; }) .join(""); @@ -1879,7 +1896,7 @@ } else { lyr.setStyle(name ? MATCHED_STYLE : UNMATCHED_STYLE); markSelected(lyr, false); - markBlink(lyr, false); + markBlink(lyr, true); } }); nearbyEntries.forEach(({ name, layer: lyr }) => { @@ -1909,9 +1926,10 @@ markBlink(lyr, false); lyr.bringToFront?.(); } else { - lyr.setStyle(DIM_STYLE); + // 該当しない公園も「すべて」のときと同じ点滅表示のままにする。 + lyr.setStyle(name ? MATCHED_STYLE : UNMATCHED_STYLE); markSelected(lyr, false); - markBlink(lyr, false); + markBlink(lyr, true); } }); @@ -1927,8 +1945,9 @@ markSelected(lyr, true); lyr.bringToFront?.(); } else { - lyr.setStyle(NEARBY_DIM_STYLE); + lyr.setStyle(nearbyBaseStyle(lyr)); markSelected(lyr, false); + markBlink(lyr, true); } }); diff --git a/src/components/ParksFilters.astro b/src/components/ParksFilters.astro index 5675eb9..88b78eb 100644 --- a/src/components/ParksFilters.astro +++ b/src/components/ParksFilters.astro @@ -61,6 +61,10 @@ const facilityTypes = [ 草地広場 +