diff --git a/map.js b/map.js
index 5d31e70..7ab3571 100644
--- a/map.js
+++ b/map.js
@@ -13,251 +13,56 @@
popupAnchor: [0, -32] // ポップアップの表示位置
});
-// 店舗データ
-const snacks = [
- { name: "スナック緑",
- lat: 38.91784466465069,
- lng: 139.83580858552295,
- description1: "定休日:月曜日 営業時間 19:00〜0:00",
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックLink",
- lat: 38.918328820566366,
- lng: 139.83473570196918,
- description1: "定休日:なし 営業時間 20:00〜1:00",
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックCherir",
- lat: 38.91731041980675,
- lng: 139.8348859056667,
- description1: "定休日:日曜日 営業時間 20:00〜0:00",
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナック待夢里",
- lat: 38.9161802,
- lng: 139.8314272,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
+ fetch('snack.csv')
+ .then(response => response.text())
+ .then(text => {
+ const rows = text.split('\n').filter(row => row.trim());
+ const headers = rows[0].split(',').map(h => h.trim());
- { name: "アモーレ",
- lat: 38.9182771,
- lng: 139.8339734,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックRJ",
- lat: 38.9197306,
- lng: 139.8300578,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナック美麗",
- lat: 38.9189692,
- lng: 139.8318661,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックエミ",
- lat: 38.9177248,
- lng: 139.8352511,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナック・ジャスミン",
- lat: 38.9173162,
- lng: 139.8360995,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "ラボンヌ",
- lat: 38.9198029,
- lng: 139.830132,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "セブンマキ",
- lat: 38.9188466,
- lng: 139.8328239,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
+ for (let i = 1; i < rows.length; i++) {
+ const values = rows[i].split(',').map(v => v.replace(/^"|"$/g, '').trim());
+ const data = {};
+ headers.forEach((key, index) => data[key] = values[index] || '');
- { name: "ドルフィン",
- lat: 38.9176609,
- lng: 139.8336603,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "パラダイス。",
- lat: 38.9180537,
- lng: 139.8313297,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナック志保",
- lat: 38.9178898,
- lng: 139.8349414,
- description1: "定休日:日、月",
- description2: "営業時間:20:30〜0:30",
- description3: "店内情報:店内は落ち着いた雰囲気で、スナックには窓がない、置いてるお酒はママの好みで年齢層はやや高め。",
- mama: "ママメモ:ママはワインがすき。",
- img1: 'images/siho1.jpg',
- img2: 'images/siho2.jpg',
- icon: 'images/favicon-32x32.png' // 個別アイコンのパス
- },
-
- { name: "スナック+マーブル",
- lat: 38.918994,
- lng: 139.8341698,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックCline",
- lat: 38.9180537,
- lng: 139.8313297,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "セレナーデ",
- lat: 38.9177181,
- lng: 139.834623,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナック バタフライ",
- lat: 38.9180537,
- lng: 139.8313297,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックゆーみん",
- lat: 38.9180537,
- lng: 139.8313297,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックKa・Na・De",
- lat: 38.91762,
- lng: 139.83947,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックわかな",
- lat: 38.9203849,
- lng: 139.8388024,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "ゆーとぴあ〔夢想郷〕",
- lat: 38.9214027,
- lng: 139.8432495,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナック+暖",
- lat: 38.9203021,
- lng: 139.8343288,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナックべに花",
- lat: 38.91796,
- lng: 139.83456,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "スナック・プルメリア",
- lat: 38.9175525,
- lng: 139.8314215,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "ふらっと",
- lat: 38.9213477,
- lng: 139.8433158,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "シーズ",
- lat: 38.9196868,
- lng: 139.8277188,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "Glossy★",
- lat: 38.9179889,
- lng: 139.8310129,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "Snack+Roppongi",
- lat: 38.9214815,
- lng: 139.8244913,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "OPENHEART",
- lat: 38.9201247,
- lng: 139.8341646,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "リヨン2",
- lat: 38.918098668221646,
- lng: 139.83401441368036,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "K",
- lat: 38.909465506993946,
- lng: 139.83573882021062,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "シャングリラ",
- lat: 38.918033,
- lng: 139.8338931,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "サラ",
- lat: 38.9196951473271,
- lng: 139.8321927134644,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "CAROL",
- lat: 38.9180039,
- lng: 139.8353658,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "クオーレ",
- lat: 38.9176328,
- lng: 139.8341622,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "ブルーローズ",
- lat: 38.9180112,
- lng: 139.835356,
- icon: 'images/snack-icon.png' // 個別アイコンのパス
- },
-
- { name: "CLUB Ma Cherie",
- lat: 38.9178582,
- lng: 139.8339079,
- description1: "定休日:日",
- description2: "営業時間:20:00〜0:00",
- description3: "店内情報:カラオケがなく、お話がメインのお店。接待の方でも使えるお店となっており、年齢の若い子から大人のキャストもいるため話が合わないことがない。",
- mama: "ママの一言:20代から30代のキャストが揃っています、きれいな子たちとお話ができるのでぜひ来てください。",
- img1: 'images/ma cheri1.JPG',
- img2: 'images/ma cheri2.JPG',
- icon: 'images/favicon-32x32.png' // 個別アイコンのパス
- }
-];
+ const lat = parseFloat(data.latitude);
+ const lng = parseFloat(data.longitude);
+ if (isNaN(lat) || isNaN(lng)) continue;
+
+ const isOpen = !isClosedToday(data.description1) && isOpenNow(data.description2);
+ const iconPath = isOpen ? (data.icon || 'images/snack-icon.png') : 'images/favicon-door-32x32.png';
+
+ const customIcon = L.icon({
+ iconUrl: iconPath,
+ iconSize: [32, 32],
+ iconAnchor: [16, 32],
+ popupAnchor: [0, -32]
+ });
+
+ const description = [data.description1, data.description2, data.description3, data.mama]
+ .filter(Boolean)
+ .map(d => d.trim())
+ .join('
');
+
+ const image1 = data.img1 && data.img1.trim() !== '' ? data.img1 : 'images/snacktitle.png';
+ const image2 = data.img2 && data.img2.trim() !== '' ? data.img2 : 'images/snacktitle.png';
+
+ const popupContent = `
+
${description}
+