Newer
Older
2025-shino / map4.js
import { createClient } from "https://esm.sh/@supabase/supabase-js";

// ====== 🔥 ここを書き換える場所 🔥 ======
const SUPABASE_URL = "https://ogtlmtnjkpsxsqzqlacj.supabase.co";
const SUPABASE_ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im9ndGxtdG5qa3BzeHNxenFsYWNqIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjMyOTU3NjUsImV4cCI6MjA3ODg3MTc2NX0.JnCE7oUQwrSgGqiu-QRbwnaLBZrO8JX1_RUb37VIMFI";
// ======================================

const supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY);

(function () {
  const urlParams = new URLSearchParams(window.location.search);
  const groupName = urlParams.get("group");

  document.getElementById("groupNameDisplay").textContent =
    `グループ名:${groupName}`;

  const map = L.map("map").setView([35.0, 135.0], 5);

  L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
    maxZoom: 18,
  }).addTo(map);

  let myMarker = null;

  // --- 現在地取得 ---
  navigator.geolocation.watchPosition(async (pos) => {
    const lat = pos.coords.latitude;
    const lng = pos.coords.longitude;

    if (!myMarker) {
      myMarker = L.marker([lat, lng], {
        title: `あなた(${groupName})`,
      }).addTo(map);
      map.setView([lat, lng], 16);
    } else {
      myMarker.setLatLng([lat, lng]);
    }

    // --- Supabase に保存 ---
    await supabase.from("locations").insert({
      group_name: groupName,
      lat,
      lng,
    });

  });

  // --- 他メンバーの現在地を表示 ---
  setInterval(async () => {
    const { data } = await supabase
      .from("locations")
      .select("*")
      .eq("group_name", groupName)
      .order("updated_at", { ascending: false })
      .limit(20);

    data.forEach((row) => {
      L.circleMarker([row.lat, row.lng], {
        radius: 6,
        color: "#0984e3",
        fillColor: "#74b9ff",
        fillOpacity: 0.9,
      }).addTo(map);
    });
  }, 5000);

})();