- frontend/ 폴더로 프론트엔드 전체 이관 - signal-batch API 연동 (한국 선박 위치 데이터) - Tailwind CSS 4 + CSS 변수 테마 토큰 (dark/light) - i18next 다국어 (ko/en) 인프라 + 28개 컴포넌트 적용 - 레이어 패널 트리 구조 재설계 (카테고리별 온/오프, 범례) - Google OAuth 로그인 화면 + DEV LOGIN 우회 - 외부 API CORS 프록시 전환 (Airplanes.live, OpenSky, CelesTrak) - ShipLayer 이미지 탭 전환 (signal-batch / MarineTraffic) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
127 lines
7.7 KiB
TypeScript
127 lines
7.7 KiB
TypeScript
// ═══ 한글 국가명 라벨 데이터 ═══
|
|
// 중동 + 동아시아 지역 국가명 (지도 오버레이용)
|
|
|
|
export interface CountryLabel {
|
|
name: string; // 한글 국가명
|
|
nameEn: string; // 영문 (참고용)
|
|
lat: number;
|
|
lng: number;
|
|
rank: number; // 1=대국(큰글씨), 2=중간, 3=소국(작은글씨)
|
|
}
|
|
|
|
export const countryLabels: CountryLabel[] = [
|
|
// ── 중동 · 서아시아 ──
|
|
{ name: '이란', nameEn: 'Iran', lat: 32.5, lng: 53.7, rank: 1 },
|
|
{ name: '이라크', nameEn: 'Iraq', lat: 33.2, lng: 43.7, rank: 1 },
|
|
{ name: '사우디아라비아', nameEn: 'Saudi Arabia', lat: 24.0, lng: 45.0, rank: 1 },
|
|
{ name: '튀르키예', nameEn: 'Turkey', lat: 39.0, lng: 35.2, rank: 1 },
|
|
{ name: '이집트', nameEn: 'Egypt', lat: 26.8, lng: 30.8, rank: 1 },
|
|
{ name: '시리아', nameEn: 'Syria', lat: 35.0, lng: 38.5, rank: 2 },
|
|
{ name: '요르단', nameEn: 'Jordan', lat: 31.3, lng: 36.5, rank: 2 },
|
|
{ name: '레바논', nameEn: 'Lebanon', lat: 33.9, lng: 35.9, rank: 3 },
|
|
{ name: '이스라엘', nameEn: 'Israel', lat: 31.5, lng: 34.8, rank: 3 },
|
|
{ name: '쿠웨이트', nameEn: 'Kuwait', lat: 29.3, lng: 47.5, rank: 3 },
|
|
{ name: '바레인', nameEn: 'Bahrain', lat: 26.07, lng: 50.55, rank: 3 },
|
|
{ name: '카타르', nameEn: 'Qatar', lat: 25.3, lng: 51.2, rank: 3 },
|
|
{ name: 'UAE', nameEn: 'UAE', lat: 24.0, lng: 54.0, rank: 2 },
|
|
{ name: '오만', nameEn: 'Oman', lat: 21.5, lng: 57.0, rank: 2 },
|
|
{ name: '예멘', nameEn: 'Yemen', lat: 15.6, lng: 48.5, rank: 2 },
|
|
{ name: '아프가니스탄', nameEn: 'Afghanistan', lat: 33.9, lng: 67.7, rank: 1 },
|
|
{ name: '파키스탄', nameEn: 'Pakistan', lat: 30.4, lng: 69.3, rank: 1 },
|
|
{ name: '투르크메니스탄', nameEn: 'Turkmenistan', lat: 39.0, lng: 59.6, rank: 2 },
|
|
{ name: '우즈베키스탄', nameEn: 'Uzbekistan', lat: 41.4, lng: 64.6, rank: 2 },
|
|
{ name: '아르메니아', nameEn: 'Armenia', lat: 40.1, lng: 44.5, rank: 3 },
|
|
{ name: '아제르바이잔', nameEn: 'Azerbaijan', lat: 40.4, lng: 49.9, rank: 3 },
|
|
{ name: '조지아', nameEn: 'Georgia', lat: 42.3, lng: 43.4, rank: 3 },
|
|
{ name: '수단', nameEn: 'Sudan', lat: 16.0, lng: 30.2, rank: 2 },
|
|
{ name: '에리트레아', nameEn: 'Eritrea', lat: 15.2, lng: 39.8, rank: 3 },
|
|
{ name: '에티오피아', nameEn: 'Ethiopia', lat: 9.1, lng: 40.5, rank: 1 },
|
|
{ name: '소말리아', nameEn: 'Somalia', lat: 5.2, lng: 46.2, rank: 2 },
|
|
{ name: '지부티', nameEn: 'Djibouti', lat: 11.6, lng: 43.1, rank: 3 },
|
|
{ name: '리비아', nameEn: 'Libya', lat: 27.0, lng: 17.2, rank: 2 },
|
|
{ name: '키프로스', nameEn: 'Cyprus', lat: 35.1, lng: 33.4, rank: 3 },
|
|
|
|
// ── 페르시아만 해역 라벨 ──
|
|
{ name: '페르시아만', nameEn: 'Persian Gulf', lat: 27.0, lng: 51.5, rank: 2 },
|
|
{ name: '호르무즈 해협', nameEn: 'Strait of Hormuz', lat: 26.56, lng: 56.25, rank: 3 },
|
|
{ name: '오만만', nameEn: 'Gulf of Oman', lat: 24.5, lng: 58.5, rank: 3 },
|
|
{ name: '홍해', nameEn: 'Red Sea', lat: 20.0, lng: 38.5, rank: 2 },
|
|
{ name: '아덴만', nameEn: 'Gulf of Aden', lat: 12.5, lng: 47.0, rank: 3 },
|
|
{ name: '아라비아해', nameEn: 'Arabian Sea', lat: 16.0, lng: 62.0, rank: 2 },
|
|
{ name: '카스피해', nameEn: 'Caspian Sea', lat: 41.0, lng: 51.0, rank: 2 },
|
|
{ name: '지중해', nameEn: 'Mediterranean Sea', lat: 35.0, lng: 25.0, rank: 2 },
|
|
|
|
// ── 주요 도시 (이란) ──
|
|
{ name: '테헤란', nameEn: 'Tehran', lat: 35.69, lng: 51.39, rank: 2 },
|
|
{ name: '이스파한', nameEn: 'Isfahan', lat: 32.65, lng: 51.68, rank: 3 },
|
|
{ name: '타브리즈', nameEn: 'Tabriz', lat: 38.08, lng: 46.29, rank: 3 },
|
|
{ name: '시라즈', nameEn: 'Shiraz', lat: 29.59, lng: 52.58, rank: 3 },
|
|
{ name: '마슈하드', nameEn: 'Mashhad', lat: 36.30, lng: 59.60, rank: 3 },
|
|
{ name: '반다르아바스', nameEn: 'Bandar Abbas', lat: 27.18, lng: 56.28, rank: 3 },
|
|
{ name: '부셰르', nameEn: 'Bushehr', lat: 28.97, lng: 50.84, rank: 3 },
|
|
{ name: '나탄즈', nameEn: 'Natanz', lat: 33.51, lng: 51.92, rank: 3 },
|
|
{ name: '아바즈', nameEn: 'Ahvaz', lat: 31.32, lng: 48.67, rank: 3 },
|
|
{ name: '케르만', nameEn: 'Kerman', lat: 30.28, lng: 57.08, rank: 3 },
|
|
{ name: '케슘섬', nameEn: 'Qeshm Island', lat: 26.85, lng: 55.90, rank: 3 },
|
|
{ name: '하르그섬', nameEn: 'Kharg Island', lat: 29.24, lng: 50.31, rank: 3 },
|
|
|
|
// ── 주요 도시 (중동 기타) ──
|
|
{ name: '바그다드', nameEn: 'Baghdad', lat: 33.31, lng: 44.37, rank: 2 },
|
|
{ name: '에르빌', nameEn: 'Erbil', lat: 36.19, lng: 44.01, rank: 3 },
|
|
{ name: '다마스쿠스', nameEn: 'Damascus', lat: 33.51, lng: 36.28, rank: 3 },
|
|
{ name: '베이루트', nameEn: 'Beirut', lat: 33.89, lng: 35.50, rank: 3 },
|
|
{ name: '예루살렘', nameEn: 'Jerusalem', lat: 31.77, lng: 35.23, rank: 3 },
|
|
{ name: '텔아비브', nameEn: 'Tel Aviv', lat: 32.08, lng: 34.78, rank: 3 },
|
|
{ name: '리야드', nameEn: 'Riyadh', lat: 24.71, lng: 46.67, rank: 2 },
|
|
{ name: '두바이', nameEn: 'Dubai', lat: 25.20, lng: 55.27, rank: 3 },
|
|
{ name: '아부다비', nameEn: 'Abu Dhabi', lat: 24.45, lng: 54.65, rank: 3 },
|
|
{ name: '도하', nameEn: 'Doha', lat: 25.29, lng: 51.53, rank: 3 },
|
|
{ name: '앙카라', nameEn: 'Ankara', lat: 39.93, lng: 32.85, rank: 2 },
|
|
{ name: '인저를릭', nameEn: 'Incirlik AFB', lat: 37.00, lng: 35.43, rank: 3 },
|
|
{ name: '카이로', nameEn: 'Cairo', lat: 30.04, lng: 31.24, rank: 2 },
|
|
{ name: '무스카트', nameEn: 'Muscat', lat: 23.59, lng: 58.54, rank: 3 },
|
|
{ name: '사나', nameEn: 'Sanaa', lat: 15.37, lng: 44.19, rank: 3 },
|
|
{ name: '카불', nameEn: 'Kabul', lat: 34.53, lng: 69.17, rank: 3 },
|
|
|
|
// ── 주요 군사기지/시설 ──
|
|
{ name: '알우데이드 기지', nameEn: 'Al Udeid AB', lat: 25.12, lng: 51.32, rank: 3 },
|
|
{ name: '제벨알리 항', nameEn: 'Jebel Ali Port', lat: 25.01, lng: 55.06, rank: 3 },
|
|
{ name: '디에고가르시아', nameEn: 'Diego Garcia', lat: -7.32, lng: 72.42, rank: 3 },
|
|
|
|
// ── 동아시아 ──
|
|
{ name: '대한민국', nameEn: 'South Korea', lat: 36.0, lng: 127.8, rank: 1 },
|
|
{ name: '북한', nameEn: 'North Korea', lat: 40.0, lng: 127.0, rank: 1 },
|
|
{ name: '일본', nameEn: 'Japan', lat: 36.2, lng: 138.3, rank: 1 },
|
|
{ name: '중국', nameEn: 'China', lat: 35.9, lng: 104.2, rank: 1 },
|
|
{ name: '대만', nameEn: 'Taiwan', lat: 23.7, lng: 121.0, rank: 2 },
|
|
{ name: '러시아', nameEn: 'Russia', lat: 55.0, lng: 105.0, rank: 1 },
|
|
{ name: '몽골', nameEn: 'Mongolia', lat: 46.9, lng: 103.8, rank: 1 },
|
|
{ name: '필리핀', nameEn: 'Philippines', lat: 12.9, lng: 121.8, rank: 2 },
|
|
{ name: '베트남', nameEn: 'Vietnam', lat: 14.1, lng: 108.3, rank: 2 },
|
|
|
|
// ── 동해/서해/남해 해역 ──
|
|
{ name: '동해', nameEn: 'East Sea', lat: 38.5, lng: 132.0, rank: 2 },
|
|
{ name: '서해(황해)', nameEn: 'Yellow Sea', lat: 35.5, lng: 124.0, rank: 2 },
|
|
{ name: '남해', nameEn: 'South Sea', lat: 33.0, lng: 128.0, rank: 3 },
|
|
{ name: '동중국해', nameEn: 'East China Sea', lat: 28.0, lng: 126.0, rank: 2 },
|
|
{ name: '남중국해', nameEn: 'South China Sea', lat: 15.0, lng: 115.0, rank: 2 },
|
|
{ name: '태평양', nameEn: 'Pacific Ocean', lat: 25.0, lng: 155.0, rank: 1 },
|
|
|
|
// ── 인도양/아프리카 동부 ──
|
|
{ name: '인도', nameEn: 'India', lat: 20.6, lng: 79.0, rank: 1 },
|
|
{ name: '인도양', nameEn: 'Indian Ocean', lat: 0.0, lng: 75.0, rank: 1 },
|
|
];
|
|
|
|
/** GeoJSON FeatureCollection 변환 */
|
|
export function countryLabelsGeoJSON(): GeoJSON.FeatureCollection {
|
|
return {
|
|
type: 'FeatureCollection',
|
|
features: countryLabels.map((c, i) => ({
|
|
type: 'Feature' as const,
|
|
id: i,
|
|
geometry: { type: 'Point' as const, coordinates: [c.lng, c.lat] },
|
|
properties: { name: c.name, nameEn: c.nameEn, rank: c.rank },
|
|
})),
|
|
};
|
|
}
|