fix(prediction): geo.ts 중복 함수 제거 및 null 좌표 참조 오류 수정

This commit is contained in:
jeonghyo.k 2026-03-16 11:51:48 +09:00
부모 a3b2787ba0
커밋 da077bf884
2개의 변경된 파일3개의 추가작업 그리고 19개의 파일을 삭제

파일 보기

@ -299,23 +299,6 @@ export function pointInPolygon(
return inside return inside
} }
/** 다각형 면적 (km²) — Shoelace formula, 구면 보정 포함 */
export function polygonAreaKm2(polygon: { lat: number; lon: number }[]): number {
if (polygon.length < 3) return 0
const n = polygon.length
const latCenter = polygon.reduce((s, p) => s + p.lat, 0) / n
const cosLat = Math.cos(latCenter * DEG2RAD)
let area = 0
for (let i = 0; i < n; i++) {
const j = (i + 1) % n
const x1 = polygon[i].lon * cosLat * EARTH_RADIUS * DEG2RAD / 1000
const y1 = polygon[i].lat * EARTH_RADIUS * DEG2RAD / 1000
const x2 = polygon[j].lon * cosLat * EARTH_RADIUS * DEG2RAD / 1000
const y2 = polygon[j].lat * EARTH_RADIUS * DEG2RAD / 1000
area += x1 * y2 - x2 * y1
}
return Math.abs(area) / 2
}
/** 원 면적 (km²) */ /** 원 면적 (km²) */
export function circleAreaKm2(radiusM: number): number { export function circleAreaKm2(radiusM: number): number {

파일 보기

@ -207,9 +207,10 @@ export function OilSpillView() {
useEffect(() => { useEffect(() => {
if (activeSubTab === 'analysis' && oilTrajectory.length === 0 && !selectedAnalysis) { if (activeSubTab === 'analysis' && oilTrajectory.length === 0 && !selectedAnalysis) {
const models = Array.from(selectedModels.size > 0 ? selectedModels : new Set<PredictionModel>(['OpenDrift'])) const models = Array.from(selectedModels.size > 0 ? selectedModels : new Set<PredictionModel>(['OpenDrift']))
const demoTrajectory = generateDemoTrajectory(incidentCoord, models, predictionTime) const coord = incidentCoord ?? { lat: 37.39, lon: 126.64 }
const demoTrajectory = generateDemoTrajectory(coord, models, predictionTime)
setOilTrajectory(demoTrajectory) setOilTrajectory(demoTrajectory)
const demoBooms = generateAIBoomLines(demoTrajectory, incidentCoord, algorithmSettings) const demoBooms = generateAIBoomLines(demoTrajectory, coord, algorithmSettings)
setBoomLines(demoBooms) setBoomLines(demoBooms)
setSensitiveResources(DEMO_SENSITIVE_RESOURCES) setSensitiveResources(DEMO_SENSITIVE_RESOURCES)
} }