정보

    • 업무명     : 기상 관측소 정보를 이용하여 태양 위치 시간 (일출/일몰/아침 골든/남중/저녁 골든/일몰/항해 박명/천문 박명/밤/아침 박명) 계산

    • 작성자     : 이상호

    • 작성일     : 2020-01-09

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

    • 안녕하세요? 기상 연구 및 웹 개발을 담당하고 있는 해솔입니다.

    • 인공위성 알고리즘 개발을 위해서 태양 위치 시간이 요구됩니다. 이러한 경우에 사용할 수 있는 태양과 달의 위치에 대한 계산을 도와주는 R 라이브러리 "suncale"를 소개하고자 합니다.

     

    [특징]

    • 인공위성 알고리즘 개발하기 위해서 태양 위치 시간이 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

     

    [기능]

    • 직달 일사량을 이용하여 일조량 산출 및 비교 분석

     

    [활용 자료]

    • 자료명 : 기상 관측소

    • 자료 종류 : 관측소 번호, 위도, 경도, 관측소명

    • 확장자 : dat

    • 기간 : 없음

    • 자료 해상도 : 없음

    • 제공처 : 기상개방포털

     

    [자료 처리 방안 및 활용 분석 기법]

    • 없음

     

    [사용법]

    • 입력 자료를 동일 디렉터리 위치

    • 소스 코드를 실행 (Rscript Calculate_Sun_Position_Time_Using_Weather_Station_Information.R)

    • 계산 결과를 확인

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • R v3.6.2

    • R Studio v1.2.5033

     

     소스 코드

    [명세]

    • 전역 설정

      • 최대 10 자리 설정

      • 메모리 해제

    # Set Option
    options(digits = 10)
    memory.limit(size = 9999999999999)

     

    • 라이브러리 읽기

    # Library Load
    library(data.table)
    library(tidyverse)
    library(lubridate)
    library(suncalc)
    library(DT)

     

    • 파일 읽기

    # File Read
    dfStation = fread("INPUT/Station_Information.dat", sep = "\t", header = FALSE, skip = 1)
    colnames(dfStation) = c("station", "lon", "lat", "stationName") 
    
    dplyr::tbl_df(dfStation)

     

     

    • Data Frame 설정

      • 날짜 선정

    # Set Data Frame
    dfData = dfStation %>%
       dplyr::mutate(date = lubridate::ymd("2020-01-09"))
    
    dplyr::tbl_df(dfData) 

     

     

    • Data Frame를 통해 L1 전처리

      • getSunlightTimes 속성을 통해 태양 위치 시간 계산 (아래 속성 참조)

      • 기상 관측소의 위도 및 경도를 기준으로 좌측 조인

     

    속성

    설명

    sunrise

    일출 시간 (태양의 머리가 수평선에서 나타나는 시간)

    sunriseEnd

    일출 시간 (태양의 모든 수평선에서 나타나는 시간)

    goldenHourEnd

    아침 골든 종료 시간

    solarNoon

    남중 시각 (태양의 고도가 가장 높은 위치에 있는 시간)

    goldenHour

    저녁 골든 시작 시간

    sunsetStart

    일몰 시간 (태양이 수평선에 나타나는 시간)

    sunset

    일몰 시간 (태양의 모든 수평선에 가라 앉는 시간) / 시민 박명 시작 시간 (태양이 숨어서 밖에서 활동할 수있는 시간)

    dusk

    항해 박명 시작 시간

    nauticalDusk

    천문 박명 시작 시간

    night

    밤의 시작 시간

    nadir

    밤의 가장 어두운 시간의 시작 시간

    nightEnd

    밤의 종료 시간

    nauticalDawn

    아침의 항해 박명 시작 시간

    dawn

    아침의 항해 박명 종료 시간

     

    # L1 Processing Using Data Frame
    dfDataL1 = getSunlightTimes(
       data = dfData
       , keep = c("night", "nadir", "nightEnd", "nauticalDawn", "dawn", "sunrise", "sunriseEnd", "goldenHourEnd", "solarNoon", "goldenHour", "sunsetStart", "sunset", "dusk", "nauticalDusk")
       ,  tz = "Asia/Seoul"
       ) %>% 
       dplyr::left_join(dfStation, by=c("lat" = "lat", "lon" = "lon"))
    
    datatable(dfDataL1)
    dfDataL1

     

     

     

    • L1 자료를 통해 출력

    # Write Using L1 Data Frame
    data.table::fwrite(
       dfDataL1
       , sep = ","
       , file = "OUTPUT/dfTimeDataL1.csv"
       , append = FALSE
       , row.names = FALSE
       , col.names = TRUE
       , dateTimeAs = "write.csv"
       , na = NA
    )

     

     

    [전체]

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

    [기상학/프로그래밍 언어]

    • sangho.lee.1990@gmail.com

    [해양학/천문학/빅데이터]

    • saimang0804@gmail.com
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기