정보

    • 업무명     : 육지 및 해양에 대한 마스킹 (Masking) 처리 및 가시화

    • 작성자     : 이상호

    • 작성일     : 2020-03-08

    • 설   명      :

    • 수정이력 :

     

     내용

    [개요]

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

    • 일반적으로 기상 자료 (수치 예측 모델, 위성 자료)를 이용할 경우 전체 영역 (기온)에 대해서 필요하나 일부 산출물은 육지 (예. 지표면 온도) 또는 해양 (예. 해수면 온도) 영역에 필요합니다.

    • 따라서 오늘 포스팅은 육지 및 해양에 대한 마스킹 처리 및 가시화를 소개해 드리고합니다.

     

    [특징]

    • 육지 또는 해양 영역에 대한 자료 처리하기 위해서 마스킹 기술이 요구되며 이 프로그램은 이러한 목적을 달성하기 위한 소프트웨어

     

    [기능]

    • Rwalc 패키지에서 gshhsMask 함수를 통해 육/해양 마스킹

    • metR 패키지에서 MaskLand 함수를 통해 육/해양 마스킹

    • spData 패키지에서 geom_sf 함수를 통해 육지 마스킹

     

    [활용 자료]

    • 없음

     

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

    • 없음

     

    [사용법]

    • 소스 코드 참조

     

    [사용 OS]

    • Windows 10

     

    [사용 언어]

    • R v3.6.3

    • R Studio v1.2.5033

     

     소스 코드

    [명세]

    • 전역 설정

      • 최대 10 자리 설정

      • 메모리 해제

      • 영어 인코딩 설정

      • 폰트 설정

    # Set Option
    memory.limit(size = 9999999999999)
    options(digits = 10)
    Sys.setlocale("LC_TIME", "english")
    font = "Palatino Linotype"

     

    • 라이브러리 읽기

    # Library Load
    library(extrafont)
    library(tidyverse)
    library(lubridate)
    library(spData)
    library(RWalc)
    library(noncompliance)
    library(metR)

     

    • 데이터 프레임 설정

      • 변수 설정

        • 기준 위도 : -90에서 90까지 0.5 간격

        • 기준 경도 : 0에서 360까지 0.5 간격

      • 데이터 프레임 설정

        • 즉 기준 위도 (-90)를 기준으로 기준 경도 (0-360, 0.5 간격) 설정

    # Set Variable
    nRefLat = seq(-90, 90, 0.5)
    nRefLon = seq(0, 360, 0.5)
    
    # Set Data Frame
    dfData = noncompliance::expand.grid.DT(
       nRefLat
       , nRefLon
       , col.names = c("nLat", "nLon")
       )
    
    dplyr::tbl_df(dfData)

     

     

    Land Sea Mask (1) : gshhsMask

     

    • gshhsMask

      • Rwalc 패키지에서 gshhsMask 함수를 이용하여 마스킹 분류

      • 그 결과 육지의 경우 TRUE이고 해양에서는 FALSE로 반환

    mask = RWalc::gshhsMask(res = c("0.1", "0.05"), land = TRUE, latmin = -90, latmax = 90)
    
    
    dfGshhsMaskData = dfData %>%
       dplyr::mutate(
          isLand = mask(0, nLon, nLat)
       )
    
    dplyr::tbl_df(dfGshhsMaskData)

     

     

    ggplot(data = dfGshhsMaskData, aes(x = nLon, y = nLat, fill = isLand)) +
       theme_bw() +
       geom_tile() +
       labs(
          title = "Gshhs Mask : Land (TRUE) and Sea (FALSE)"
          , x = ""
          , y = ""
       ) +
       metR:::theme_field() + 
       theme(text = element_text(family = font)) +
       ggsave(filename = paste0("FIG2/Gshhs_Mask.png"), width = 10, height = 6, dpi = 600)

     

     

    Land Sea Mask (2) : MaskLand

     

    • MaskLand

      • metR 패키지에서 MaskLand 함수를 이용하여 마스킹 분류

      • 그 결과 육지의 경우 TRUE이고 해양에서는 FALSE로 반환

    dfMaskLandData = dfData %>%
       dplyr::mutate(
          isLand = metR::MaskLand(nLon, nLat, mask = "world")
       )
    
    dplyr::tbl_df(dfMaskLandData)

     

     

    ggplot(data = dfGshhsMaskData, aes(x = nLon, y = nLat, fill = isLand)) +
       theme_bw() +
       geom_tile() +
       labs(
          title = "Gshhs Mask : Land (TRUE) and Sea (FALSE)"
          , x = ""
          , y = ""
       ) +
       metR:::theme_field() + 
       theme(text = element_text(family = font)) +
       ggsave(filename = paste0("FIG2/Gshhs_Mask.png"), width = 10, height = 6, dpi = 600)

     

     

    Land Sea Mask (3) : geom_sf

     

    • geom_sf

      • spData 패키지에서 geom_sf 함수를 이용하여 육지 마스킹

      • 그 결과 육지의 경우 grey80 색으로 덮어쓰기

    # Set Map Data 
    mapData = spData::world
    
    
    ggplot() +
       theme_bw() +
       geom_sf(data = mapData, fill = "grey80", color = "black") +
       labs(
          title = "Land Mask"
          , x = ""
          , y = ""
       ) +
       metR:::theme_field() + 
       theme(text = element_text(family = font)) +
       ggsave(filename = paste0("FIG2/Sf_Land_Mask.png"), width = 10, height = 6, dpi = 600)

     

     

    [전체]

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

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