From 0a5c32b728bd133da7c3afee1ae32413ee164c9d Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 1 Feb 2026 18:18:31 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=8C=80=ED=95=99=EA=B5=90=20geojson?= =?UTF-8?q?=20=ED=8C=8C=EC=9D=BC=20=EB=AA=A8=EB=93=88=20=EC=8A=A4=EC=BD=94?= =?UTF-8?q?=ED=94=84=20=EC=BA=90=EC=8B=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../waiting/boothMap/hooks/useGeoPolygon.ts | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/apps/nowait-user/src/pages/waiting/boothMap/hooks/useGeoPolygon.ts b/apps/nowait-user/src/pages/waiting/boothMap/hooks/useGeoPolygon.ts index 4e12a904..6074ed56 100644 --- a/apps/nowait-user/src/pages/waiting/boothMap/hooks/useGeoPolygon.ts +++ b/apps/nowait-user/src/pages/waiting/boothMap/hooks/useGeoPolygon.ts @@ -1,32 +1,36 @@ import axios from "axios"; import { useEffect, useState } from "react"; +let cachedPaths: { lat: number; lng: number }[][] | null = null; + export const useGeoPolygon = () => { const [paths, setPaths] = useState<{ lat: number; lng: number }[][]>([]); useEffect(() => { + if (cachedPaths) { + setPaths(cachedPaths); + return; + } + const fetchPolygons = async () => { try { const { data } = await axios.get("/geojson/university.geojson"); - // 좌표 변환 - const coords = data.features.map((feature: any) => { - return feature.geometry.coordinates[0].map( - ([lng, lat]: [number, number]) => ({ - lat, - lng, - }) - ); - }); - - if (coords.length > 0) { - setPaths(coords); // [외곽, 구멍] - } + const coords = data.features.map((feature: any) => + feature.geometry.coordinates[0].map( + ([lng, lat]: [number, number]) => ({ lat, lng }) + ) + ); + + cachedPaths = coords; + setPaths(coords); } catch (err) { console.error("GeoJSON에 오류가 발생 했습니다.:", err); } }; + fetchPolygons(); }, []); + return paths; -}; +}; \ No newline at end of file