- HNS_SUBSTANCE 테이블 마이그레이션 SQL 추가 (002_hns_substance.sql) - HNS 검색/상세 API 구현 (hnsRouter, hnsService) - HNS 시드 스크립트 추가 (seedHns.ts, 20종 물질 데이터) - 프론트엔드 HNSSubstanceView: 정적 HNS_SEARCH_DB → API 호출 전환 - HNSSearchSubstance 타입 common/types/hns.ts로 분리 - Mock 데이터 이동: data/ → common/mock/ (vesselMockData, backtrackMockData) - layerDatabase.ts → common/services/layerService.ts 이동 - layerData.ts → common/data/layerData.ts 이동 - scat/index.ts 누락 수정 + .gitignore scat 규칙 수정 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
214 lines
11 KiB
TypeScript
Executable File
214 lines
11 KiB
TypeScript
Executable File
export interface Vessel {
|
|
mmsi: number
|
|
imo: string
|
|
name: string
|
|
typS: string
|
|
flag: string
|
|
status: string
|
|
speed: number
|
|
heading: number
|
|
lat: number
|
|
lng: number
|
|
draft: number
|
|
depart: string
|
|
arrive: string
|
|
etd: string
|
|
eta: string
|
|
gt: string
|
|
dwt: string
|
|
loa: string
|
|
beam: string
|
|
built: string
|
|
yard: string
|
|
callSign: string
|
|
cls: string
|
|
cargo: string
|
|
color: string
|
|
markerType: string
|
|
}
|
|
|
|
export const VESSEL_TYPE_COLORS: Record<string, string> = {
|
|
Tanker: '#ef4444',
|
|
Chemical: '#ef4444',
|
|
Cargo: '#22c55e',
|
|
Bulk: '#22c55e',
|
|
Container: '#3b82f6',
|
|
Passenger: '#a855f7',
|
|
Fishing: '#f97316',
|
|
Tug: '#06b6d4',
|
|
Navy: '#6b7280',
|
|
Sailing: '#fbbf24',
|
|
}
|
|
|
|
export const VESSEL_LEGEND = [
|
|
{ type: 'Tanker', color: '#ef4444' },
|
|
{ type: 'Cargo', color: '#22c55e' },
|
|
{ type: 'Container', color: '#3b82f6' },
|
|
{ type: 'Fishing', color: '#f97316' },
|
|
{ type: 'Passenger', color: '#a855f7' },
|
|
{ type: 'Tug', color: '#06b6d4' },
|
|
]
|
|
|
|
export const mockVessels: Vessel[] = [
|
|
{
|
|
mmsi: 440123456, imo: '9812345', name: 'HANKUK CHEMI', typS: 'Tanker', flag: '🇰🇷',
|
|
status: '항해중', speed: 8.2, heading: 330, lat: 34.60, lng: 127.50,
|
|
draft: 5.8, depart: '여수항', arrive: '부산항', etd: '2026-02-25 08:00', eta: '2026-02-25 18:30',
|
|
gt: '29,246', dwt: '49,999', loa: '183.0m', beam: '32.2m', built: '2018', yard: '현대미포조선',
|
|
callSign: 'HLKC', cls: '한국선급(KR)', cargo: 'BUNKER-C · 1,200kL · IMO Class 3',
|
|
color: '#ef4444', markerType: 'tanker',
|
|
},
|
|
{
|
|
mmsi: 440234567, imo: '9823456', name: 'DONG-A GLAUCOS', typS: 'Cargo', flag: '🇰🇷',
|
|
status: '항해중', speed: 11.4, heading: 245, lat: 34.78, lng: 127.80,
|
|
draft: 7.2, depart: '울산항', arrive: '광양항', etd: '2026-02-25 06:30', eta: '2026-02-25 16:00',
|
|
gt: '12,450', dwt: '18,800', loa: '144.0m', beam: '22.6m', built: '2015', yard: 'STX조선',
|
|
callSign: 'HLDG', cls: '한국선급(KR)', cargo: '철강재 · 4,500t',
|
|
color: '#22c55e', markerType: 'cargo',
|
|
},
|
|
{
|
|
mmsi: 440345678, imo: '9834567', name: 'HMM ALGECIRAS', typS: 'Container', flag: '🇰🇷',
|
|
status: '항해중', speed: 18.5, heading: 195, lat: 35.00, lng: 128.80,
|
|
draft: 14.5, depart: '부산항', arrive: '싱가포르', etd: '2026-02-25 04:00', eta: '2026-03-02 08:00',
|
|
gt: '228,283', dwt: '223,092', loa: '399.9m', beam: '61.0m', built: '2020', yard: '대우조선해양',
|
|
callSign: 'HLHM', cls: "Lloyd's Register", cargo: '컨테이너 · 16,420 TEU',
|
|
color: '#3b82f6', markerType: 'container',
|
|
},
|
|
{
|
|
mmsi: 355678901, imo: '9756789', name: 'STELLAR DAISY', typS: 'Tanker', flag: '🇵🇦',
|
|
status: '⚠ 사고(좌초)', speed: 0.0, heading: 0, lat: 34.72, lng: 127.72,
|
|
draft: 8.1, depart: '여수항', arrive: '—', etd: '2026-01-18 12:00', eta: '—',
|
|
gt: '35,120', dwt: '58,000', loa: '190.0m', beam: '34.0m', built: '2012', yard: 'CSBC Taiwan',
|
|
callSign: '3FZA7', cls: 'NK', cargo: 'BUNKER-C · 150kL 유출 · ⚠ 사고선박',
|
|
color: '#ef4444', markerType: 'tanker',
|
|
},
|
|
{
|
|
mmsi: 440456789, imo: '—', name: '제72 금양호', typS: 'Fishing', flag: '🇰🇷',
|
|
status: '조업중', speed: 4.1, heading: 120, lat: 34.55, lng: 127.35,
|
|
draft: 2.1, depart: '여수 국동항', arrive: '여수 국동항', etd: '2026-02-25 04:30', eta: '2026-02-25 18:00',
|
|
gt: '78', dwt: '—', loa: '24.5m', beam: '6.2m', built: '2008', yard: '통영조선',
|
|
callSign: '—', cls: '한국선급', cargo: '어획물',
|
|
color: '#f97316', markerType: 'fishing',
|
|
},
|
|
{
|
|
mmsi: 440567890, imo: '9867890', name: 'PAN OCEAN GLORY', typS: 'Bulk', flag: '🇰🇷',
|
|
status: '항해중', speed: 12.8, heading: 170, lat: 35.60, lng: 126.40,
|
|
draft: 10.3, depart: '군산항', arrive: '포항항', etd: '2026-02-25 07:00', eta: '2026-02-26 04:00',
|
|
gt: '43,800', dwt: '76,500', loa: '229.0m', beam: '32.3m', built: '2019', yard: '현대삼호중공업',
|
|
callSign: 'HLPO', cls: '한국선급(KR)', cargo: '석탄 · 65,000t',
|
|
color: '#22c55e', markerType: 'cargo',
|
|
},
|
|
{
|
|
mmsi: 440678901, imo: '—', name: '여수예인1호', typS: 'Tug', flag: '🇰🇷',
|
|
status: '방제지원', speed: 6.3, heading: 355, lat: 34.68, lng: 127.60,
|
|
draft: 3.2, depart: '여수항', arrive: '사고현장', etd: '2026-01-18 16:30', eta: '—',
|
|
gt: '280', dwt: '—', loa: '32.0m', beam: '9.5m', built: '2016', yard: '삼성중공업',
|
|
callSign: 'HLYT', cls: '한국선급', cargo: '방제장비 · 오일붐 500m',
|
|
color: '#06b6d4', markerType: 'tug',
|
|
},
|
|
{
|
|
mmsi: 235012345, imo: '9456789', name: 'QUEEN MARY', typS: 'Passenger', flag: '🇬🇧',
|
|
status: '항해중', speed: 15.2, heading: 10, lat: 33.80, lng: 127.00,
|
|
draft: 8.5, depart: '상하이', arrive: '부산항', etd: '2026-02-24 18:00', eta: '2026-02-26 06:00',
|
|
gt: '148,528', dwt: '18,000', loa: '345.0m', beam: '41.0m', built: '2004', yard: "Chantiers de l'Atlantique",
|
|
callSign: 'GBQM2', cls: "Lloyd's Register", cargo: '승객 2,620명',
|
|
color: '#a855f7', markerType: 'passenger',
|
|
},
|
|
{
|
|
mmsi: 353012345, imo: '9811000', name: 'EVER GIVEN', typS: 'Container', flag: '🇹🇼',
|
|
status: '항해중', speed: 14.7, heading: 220, lat: 35.20, lng: 129.20,
|
|
draft: 15.7, depart: '부산항', arrive: '카오슝', etd: '2026-02-25 02:00', eta: '2026-02-28 14:00',
|
|
gt: '220,940', dwt: '199,629', loa: '400.0m', beam: '59.0m', built: '2018', yard: '今治造船',
|
|
callSign: 'BIXE9', cls: 'ABS', cargo: '컨테이너 · 14,800 TEU',
|
|
color: '#3b82f6', markerType: 'container',
|
|
},
|
|
{
|
|
mmsi: 440789012, imo: '—', name: '제85 대성호', typS: 'Fishing', flag: '🇰🇷',
|
|
status: '조업중', speed: 3.8, heading: 85, lat: 34.40, lng: 126.30,
|
|
draft: 1.8, depart: '목포항', arrive: '목포항', etd: '2026-02-25 03:00', eta: '2026-02-25 17:00',
|
|
gt: '65', dwt: '—', loa: '22.0m', beam: '5.8m', built: '2010', yard: '목포조선',
|
|
callSign: '—', cls: '한국선급', cargo: '어획물',
|
|
color: '#f97316', markerType: 'fishing',
|
|
},
|
|
{
|
|
mmsi: 440890123, imo: '9878901', name: 'SK INNOVATION', typS: 'Chemical', flag: '🇰🇷',
|
|
status: '항해중', speed: 9.6, heading: 340, lat: 35.80, lng: 126.60,
|
|
draft: 6.5, depart: '대산항', arrive: '여수항', etd: '2026-02-25 10:00', eta: '2026-02-26 02:00',
|
|
gt: '11,200', dwt: '16,800', loa: '132.0m', beam: '20.4m', built: '2020', yard: '현대미포조선',
|
|
callSign: 'HLSK', cls: '한국선급(KR)', cargo: '톨루엔 · 8,500kL · IMO Class 3',
|
|
color: '#ef4444', markerType: 'tanker',
|
|
},
|
|
{
|
|
mmsi: 440901234, imo: '9889012', name: 'KOREA EXPRESS', typS: 'Cargo', flag: '🇰🇷',
|
|
status: '항해중', speed: 10.1, heading: 190, lat: 36.20, lng: 128.50,
|
|
draft: 6.8, depart: '동해항', arrive: '포항항', etd: '2026-02-25 09:00', eta: '2026-02-25 15:00',
|
|
gt: '8,500', dwt: '12,000', loa: '118.0m', beam: '18.2m', built: '2014', yard: '대한조선',
|
|
callSign: 'HLKE', cls: '한국선급', cargo: '일반화물',
|
|
color: '#22c55e', markerType: 'cargo',
|
|
},
|
|
{
|
|
mmsi: 440012345, imo: '—', name: 'ROKS SEJONG', typS: 'Navy', flag: '🇰🇷',
|
|
status: '작전중', speed: 16.0, heading: 270, lat: 35.30, lng: 129.50,
|
|
draft: 6.3, depart: '부산 해군기지', arrive: '—', etd: '—', eta: '—',
|
|
gt: '7,600', dwt: '—', loa: '165.9m', beam: '21.4m', built: '2008', yard: '현대중공업',
|
|
callSign: 'HLNS', cls: '군용', cargo: '군사작전',
|
|
color: '#6b7280', markerType: 'military',
|
|
},
|
|
{
|
|
mmsi: 440023456, imo: '—', name: '군산예인3호', typS: 'Tug', flag: '🇰🇷',
|
|
status: '대기중', speed: 5.5, heading: 140, lat: 35.90, lng: 126.90,
|
|
draft: 2.8, depart: '군산항', arrive: '군산항', etd: '—', eta: '—',
|
|
gt: '180', dwt: '—', loa: '28.0m', beam: '8.2m', built: '2019', yard: '통영조선',
|
|
callSign: 'HLGS', cls: '한국선급', cargo: '—',
|
|
color: '#06b6d4', markerType: 'tug',
|
|
},
|
|
{
|
|
mmsi: 440034567, imo: '—', name: 'JEJU WIND', typS: 'Sailing', flag: '🇰🇷',
|
|
status: '항해중', speed: 6.8, heading: 290, lat: 33.35, lng: 126.65,
|
|
draft: 2.5, depart: '제주항', arrive: '제주항', etd: '2026-02-25 10:00', eta: '2026-02-25 16:00',
|
|
gt: '45', dwt: '—', loa: '18.0m', beam: '5.0m', built: '2022', yard: '제주요트',
|
|
callSign: '—', cls: '—', cargo: '—',
|
|
color: '#fbbf24', markerType: 'sail',
|
|
},
|
|
{
|
|
mmsi: 440045678, imo: '—', name: '제33 삼양호', typS: 'Fishing', flag: '🇰🇷',
|
|
status: '조업중', speed: 2.4, heading: 55, lat: 35.10, lng: 127.40,
|
|
draft: 1.6, depart: '통영항', arrive: '통영항', etd: '2026-02-25 05:00', eta: '2026-02-25 19:00',
|
|
gt: '52', dwt: '—', loa: '20.0m', beam: '5.4m', built: '2006', yard: '거제조선',
|
|
callSign: '—', cls: '한국선급', cargo: '어획물',
|
|
color: '#f97316', markerType: 'fishing',
|
|
},
|
|
{
|
|
mmsi: 255012345, imo: '9703291', name: 'MSC OSCAR', typS: 'Container', flag: '🇨🇭',
|
|
status: '항해중', speed: 17.3, heading: 355, lat: 34.10, lng: 128.10,
|
|
draft: 14.0, depart: '카오슝', arrive: '부산항', etd: '2026-02-23 08:00', eta: '2026-02-25 22:00',
|
|
gt: '197,362', dwt: '199,272', loa: '395.4m', beam: '59.0m', built: '2015', yard: '대우조선해양',
|
|
callSign: '9HA4713', cls: 'DNV', cargo: '컨테이너 · 18,200 TEU',
|
|
color: '#3b82f6', markerType: 'container',
|
|
},
|
|
{
|
|
mmsi: 440056789, imo: '9890567', name: 'SAEHAN PIONEER', typS: 'Tanker', flag: '🇰🇷',
|
|
status: '항해중', speed: 7.9, heading: 310, lat: 34.90, lng: 127.10,
|
|
draft: 5.2, depart: '여수항', arrive: '대산항', etd: '2026-02-25 11:00', eta: '2026-02-26 08:00',
|
|
gt: '8,900', dwt: '14,200', loa: '120.0m', beam: '18.0m', built: '2017', yard: '현대미포조선',
|
|
callSign: 'HLSP', cls: '한국선급(KR)', cargo: '경유 · 10,000kL',
|
|
color: '#ef4444', markerType: 'tanker',
|
|
},
|
|
{
|
|
mmsi: 440067890, imo: '9891678', name: 'DONGHAE STAR', typS: 'Cargo', flag: '🇰🇷',
|
|
status: '항해중', speed: 11.0, heading: 155, lat: 37.55, lng: 129.30,
|
|
draft: 6.0, depart: '속초항', arrive: '동해항', etd: '2026-02-25 12:00', eta: '2026-02-25 16:30',
|
|
gt: '6,200', dwt: '8,500', loa: '105.0m', beam: '16.5m', built: '2013', yard: '대한조선',
|
|
callSign: 'HLDS', cls: '한국선급', cargo: '일반화물 · 목재',
|
|
color: '#22c55e', markerType: 'cargo',
|
|
},
|
|
{
|
|
mmsi: 440078901, imo: '—', name: '제18 한라호', typS: 'Fishing', flag: '🇰🇷',
|
|
status: '귀항중', speed: 3.2, heading: 70, lat: 33.30, lng: 126.30,
|
|
draft: 1.9, depart: '서귀포항', arrive: '서귀포항', etd: '2026-02-25 04:00', eta: '2026-02-25 15:00',
|
|
gt: '58', dwt: '—', loa: '21.0m', beam: '5.6m', built: '2011', yard: '제주조선',
|
|
callSign: '—', cls: '한국선급', cargo: '어획물 · 갈치/고등어',
|
|
color: '#f97316', markerType: 'fishing',
|
|
},
|
|
]
|