/**
* 대한민국 전국 시군구 경도 테이블
* 진태양시 보정을 위한 정밀 경도 데이터
* 출처: 국토지리정보원 공식 좌표 (행정구역 중심점 기준)
*/
/**
* 대한민국 전국 시군구 경도 (동경 기준, E)
* 총 229개 시군구 (2024년 기준)
*/
export const KOREA_CITY_LONGITUDE: Record<string, number> = {
// 특별시/광역시 (8개)
서울: 126.9784,
부산: 129.0756,
대구: 128.6014,
인천: 126.7052,
광주: 126.8526,
대전: 127.3845,
울산: 129.3114,
세종: 127.2890,
// 경기도 (31개)
수원: 127.0289,
성남: 127.1388,
고양: 126.8356,
용인: 127.1778,
부천: 126.7830,
안산: 126.8309,
안양: 126.9568,
남양주: 127.2164,
화성: 126.8311,
평택: 127.1120,
의정부: 127.0473,
시흥: 126.8031,
파주: 126.7800,
김포: 126.7156,
광명: 126.8653,
광주시: 127.2557,
군포: 126.9353,
하남: 127.2063,
오산: 127.0770,
양주: 127.0453,
이천: 127.4354,
안성: 127.2801,
구리: 127.1395,
의왕: 126.9684,
포천: 127.2003,
양평: 127.4873,
여주: 127.6376,
동두천: 127.0606,
과천: 126.9879,
가평: 127.5101,
연천: 127.0746,
// 강원특별자치도 (18개)
춘천: 127.7341,
원주: 127.9454,
강릉: 128.8965,
동해: 129.1143,
태백: 128.9858,
속초: 128.5918,
삼척: 129.1656,
홍천: 127.8897,
횡성: 127.9857,
영월: 128.4614,
평창: 128.3906,
정선: 128.6617,
철원: 127.3133,
화천: 127.7081,
양구: 127.9897,
인제: 128.1706,
고성: 128.4675,
양양: 128.6191,
// 충청북도 (11개)
청주: 127.4897,
충주: 127.9268,
제천: 128.1911,
보은: 127.7296,
옥천: 127.5721,
영동: 127.7842,
증평: 127.5826,
진천: 127.4339,
괴산: 127.7869,
음성: 127.6925,
단양: 128.3661,
// 충청남도 (15개)
천안: 127.1538,
공주: 127.1199,
보령: 126.6128,
아산: 127.0047,
서산: 126.4502,
논산: 127.0986,
계룡: 127.2479,
당진: 126.6465,
금산: 127.4881,
부여: 126.9100,
서천: 126.6919,
청양: 126.8024,
홍성: 126.6650,
예산: 126.8473,
태안: 126.2980,
// 전북특별자치도 (14개)
전주: 127.1479,
군산: 126.7369,
익산: 126.9576,
정읍: 126.8562,
남원: 127.3901,
김제: 126.8806,
완주: 127.1630,
진안: 127.4247,
무주: 127.6605,
장수: 127.5211,
임실: 127.2867,
순창: 127.1376,
고창: 126.7022,
부안: 126.7339,
// 전라남도 (22개)
목포: 126.3922,
여수: 127.6622,
순천: 127.4875,
나주: 126.7110,
광양: 127.6959,
담양: 126.9882,
곡성: 127.2919,
구례: 127.4636,
고흥: 127.2753,
보성: 127.0800,
화순: 126.9867,
장흥: 126.9066,
강진: 126.7672,
해남: 126.5990,
영암: 126.6965,
무안: 126.4819,
함평: 126.5167,
영광: 126.5119,
장성: 126.7843,
완도: 126.7552,
진도: 126.2632,
신안: 126.1085,
// 경상북도 (23개)
포항: 129.3650,
경주: 129.2249,
김천: 128.1140,
안동: 128.7294,
구미: 128.3443,
영주: 128.6240,
영천: 128.9389,
상주: 128.1592,
문경: 128.1871,
경산: 128.7414,
군위: 128.5726,
의성: 128.6974,
청송: 129.0572,
영양: 129.1126,
영덕: 129.3656,
청도: 128.7354,
고령: 128.2626,
성주: 128.2826,
칠곡: 128.4014,
예천: 128.4524,
봉화: 128.7325,
울진: 129.4006,
울릉: 130.9055,
// 경상남도 (18개)
창원: 128.6811,
진주: 128.1089,
통영: 128.4333,
사천: 128.0642,
김해: 128.8895,
밀양: 128.7465,
거제: 128.6211,
양산: 129.0375,
의령: 128.2618,
함안: 128.4065,
창녕: 128.4921,
고성군: 128.3232,
남해: 127.8924,
하동: 127.7514,
산청: 127.8735,
함양: 127.7253,
거창: 127.9094,
합천: 128.1657,
// 제주특별자치도 (2개)
제주: 126.5219,
서귀포: 126.5622,
};
/**
* 한국 표준시(KST) 기준 경도
* UTC+9 시간대의 중앙 경도 (동경 135도)
*/
export const KST_STANDARD_LONGITUDE = 135.0;
/**
* 경도 기반 진태양시 보정 계산
* @param longitude 경도 (동경 기준)
* @returns 보정 시간 (분 단위)
*/
export function calculateTrueSolarTimeOffset(longitude: number): number {
// 경도 1도 = 4분
// 한국 표준시(135°E)와의 차이를 분 단위로 계산
const timeDifferenceMinutes = (longitude - KST_STANDARD_LONGITUDE) * 4;
// 반올림하여 정수로 반환
return Math.round(timeDifferenceMinutes);
}
/**
* 도시 이름으로 진태양시 보정값 조회
* @param cityName 도시 이름
* @returns 보정 시간 (분 단위), 도시를 찾을 수 없으면 기본값 (서울 기준)
*/
export function getTrueSolarTimeOffsetByCity(cityName: string): number {
const longitude = KOREA_CITY_LONGITUDE[cityName];
if (longitude === undefined) {
// 기본값: 서울 경도 사용
console.warn(`도시 '${cityName}'을 찾을 수 없습니다. 서울 기준으로 계산합니다.`);
return calculateTrueSolarTimeOffset(KOREA_CITY_LONGITUDE['서울']!);
}
return calculateTrueSolarTimeOffset(longitude);
}
/**
* 주요 도시별 진태양시 보정값 미리 계산
*/
export const CITY_TRUE_SOLAR_TIME_OFFSET: Record<string, number> = {
서울: calculateTrueSolarTimeOffset(126.9784), // -32분
부산: calculateTrueSolarTimeOffset(129.0756), // -24분
대구: calculateTrueSolarTimeOffset(128.6014), // -26분
인천: calculateTrueSolarTimeOffset(126.7052), // -33분
광주: calculateTrueSolarTimeOffset(126.8526), // -33분
대전: calculateTrueSolarTimeOffset(127.3845), // -31분
울산: calculateTrueSolarTimeOffset(129.3114), // -23분
세종: calculateTrueSolarTimeOffset(127.2890), // -31분
제주: calculateTrueSolarTimeOffset(126.5219), // -34분
};