반응형

     정보

    • 업무명    : 아이디엘 Terra/CERES 극궤도 기상 위성 자료를 이용한 지표면 특성 (Landcover) 및 운량 (Cloud Fraction)에 따른 가시화

    • 작성자    : 이상호

    • 작성일    : 2019-08-29

    • 설   명    :

    • 수정이력 :

      • 2020-03-24 : 소스 코드 명세 추가

     

     내용

    [개요]

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

    • 오늘 포스팅에서는 Terra/CERES 극궤도 기상 위성 자료를 이용한 지표면 특성 (Landcover) 및 운량 (Cloud Fraction)에 따른 가시화를 소개해 드리고자 합니다.

     

    [특징]

    • 기상 위성 자료를 이용하여 가시화를 위한 소프트웨어가 필요하며 이 프로그램은 이러한 목적을 달성하기 위해 고안된 소프트웨어

     

    [기능]

    • Terra/CERES 극궤도 기상 위성 자료에 대한 위/경도 및 이진 자료 읽기

    • 각 화소마다 분기문으로 컬러 부여

    • 각 카테고리 (지표면 특성 및 운량)별로 범례 추가

     

    [사용법]

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

    • 소스 코드를 실행 (idl -e Visualization_By_Landcover_And_Cloud_Fraction_Using_Terra_CERES_Data)

    • 가시화 결과를 확인

     

    [사용 OS]

    • Windows 10

    • Linux

     

    [사용 언어]

    • IDL v8.5

     

     소스 코드

    • 해당 작업을 하기 위한 컴파일 및 실행 코드는 IDL로 작성되었으며 가시화를 위한 라이브러리는 Coyote's Guide to IDL ProgrammingIDL Astronomy User's Library를 이용하였습니다.

    • 소스 코드는 단계별로 수행하며 상세 설명은 다음과 같습니다.

      • 1 단계는 주 프로그램은 작업 경로 설정, 아스키 파일 읽어 메모리상에 저장하고 가시화를 위한 초기 설정합니다.

      • 2 단계는 plots 매핑에 따라 영상 장면 표출하여 이미지 형식으로 저장합니다. 이 과정에서 포스트 스크립트 (PS) 형식에서 PNG로 변환합니다.

     

    [명세]

    • 작업 환경 설정

    cd, 'D:\할 일\Program\각종 자료\Aerosol mapping+RGB\modis hdf_ps_RGB x\Ozone'

     

    • 아스키 (ASCII) 파일 설정

    file = 'Terra_20150818_0000-0134.dat'

     

    • 파일 읽기

      • readcol를 통해 각 변수에 따른 포맷별로 읽기

    readcol, file, format='f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f,f', lon, lat, sza, ceres_rsr, ceres_albedo, rsr, rsr2, land_rsr, land_rsr2, albedo, albedo2, land_albedo, land_albedo2, sfc_albedo, ceres_landcover, ceres_sfc_albedo, clear_fraction

     

    • 가시화를 위한 초기 설정

      • set_plot를 통해 포스트 스크립트 (Post Script, PS) 형식으로 저장 및 세부 옵션

        • 그림 저장명 : filename

        • 폰트 : /SCHOOLBOOK

        • 폰트 굵게 : /BOLD

      • usersym를 통해 매핑을 위한 심볼 설정

      • 중심 위도 (clat), 중심 경도 (clon) 설정

      • loadct를 통해 컬러바 선택

      • cgmap_set를 통해 도법 (satellite) 설정

    n_color = 7
    clat = -0.031184  &  clon = 140.204602
    zmin =  0
    zmax = 8
    
    ps_name = 'land'
    
    set_plot,'ps'
    device, filename=ps_name+'.ps', decomposed=0, bits=8, /color, xsize=12, ysize=13, /inches,  $
    /schoolbook, /bold
    !p.font=0  &  !p.charsize=2.0 & !p.charthick=1.6  & !p.multi=[0,1,1]
    usersym,17.2*[0,1,1,0,0]/9,3.9*[0,0,1,1,0]/2,/fill
    
    start_color=zmin  &  end_color=zmax  &  colorn=end_color-start_color
    
    tvlct, r, g, b, /Get
    loadct, 33, ncolor=colorn 
    
    cgmap_set, /satellite, sat_p=[42159.934825,0,0], clat, clon, charsize=1.0, limit=[-90,-180,90,180], $
    position=[0.10,0.15,0.9,0.95], /isotropic, color='white'

     

    • 매핑을 위한 설정 및 가시화 : points

      • 지표면 특성 (ceres_landcover) 및 운량 (clear_fraction)에 따라 컬러 (color) 매핑

    for i=0L, lines-1 do begin
    
    	if ((ceres_landcover[i] ge 1 and ceres_landcover[i] le 6) or (ceres_landcover[i] ge 8 and ceres_landcover[i] le 14) $
    		or (ceres_landcover[i] eq 18) or (ceres_landcover[i] eq 7) or (ceres_landcover[i] eq 16) )  then begin  
            if (clear_fraction[i] gt 95  and  clear_fraction[i] le 100) then begin
                plots, lon[i], lat[i], psym=8, symsize=0.4, color=0
            endif else if (clear_fraction[i] gt 50  and  clear_fraction[i] le 95) then begin
                plots, lon[i], lat[i], psym=8, symsize=0.4, color=1
            endif else if (clear_fraction[i] gt 5  and  clear_fraction[i] le 50) then begin
                plots, lon[i], lat[i], psym=8, symsize=0.4, color=2
            endif else if(clear_fraction[i] ge 0  and  clear_fraction[i] le 5) then begin
                plots, lon[i], lat[i], psym=8, symsize=0.4, color=3            
            endif else begin
            endelse
    	endif else begin
    	endelse
    
        if(ceres_landcover[i] eq 17) then begin               
            if (clear_fraction[i] gt 95  and  clear_fraction[i] le 100) then begin
            	plots, lon[i], lat[i], psym=8, symsize=0.4, color=4
            endif else if (clear_fraction[i] gt 50  and  clear_fraction[i] le 95) then begin
              	plots, lon[i], lat[i], psym=8, symsize=0.4, color=5
            endif else if (clear_fraction[i] gt 5  and  clear_fraction[i] le 50) then begin
            	plots, lon[i], lat[i], psym=8, symsize=0.4, color=6
            endif else if(clear_fraction[i] ge 0  and  clear_fraction[i] le 5) then begin
            	plots, lon[i], lat[i], psym=8, symsize=0.4, color=7
            endif else begin
            endelse   
        endif else begin
        endelse
    
    endfor

     

    • cgtext 및 cgLegend를 통해 범례 설정 및 세부 옵션

      • 그림에서와 같이 글자 색 (운형)와 심볼 모양 (통계값 종류)에 따라 LAND, SEA, SD 및 R, Bias, RMSE에 따라 별도 범례 설정

      • charsize : 글자 크기

      • charthick : 글자 굵기

      • alignment : 글자 정렬

      • color : 글자 색

      • font : cgPS_Open에서 설정한 폰트 반영

      • Psyms : 심볼 모양

      • SymSize : 심볼 크기

      • Color : 심볼 색

      • TCOLORS : 심볼 색

    cgtext, 0.61, 0.74, 'LAND :', charsize=2.5, charthick=3.0, alignment=0, color='black', font=0, /normal
    
    cgLegend, Title=['  Clear', '  Partly cloudy', '  Mostly cloudy', '  Overcast'], PSyms=[-15], $
    	SymSize=3.0, Color=[0, 1, 2, 3], Location=[0.62, 0.71], $
    	Length=0, VSpace=3.5, charsize=2.2, TCOLORS=[0, 1, 2, 3] 
    
    cgtext, 0.61, 0.54, 'OCEAN :', charsize=2.5, charthick=3.0, alignment=0, color='black', font=0, /normal
    
    cgLegend, Title=['  Clear', '  Partly cloudy', '  Mostly cloudy', '  Overcast'], PSyms=[-15], $
    	SymSize=3.0, Color=[4, 5, 6, 7], Location=[0.62, 0.51], $
    	Length=0, VSpace=3.5, charsize=2.2, TCOLORS=[4,5,6,7]

     

    • 컬러바 설정

    cgcolorbar,range=[zmin,zmax],  ncolor=colorn, position=[0.15,0.09,0.85,0.13],  $
    	yminor=0, ytickinterval=0, xminor=5, xstyle=1+8, ystyle=4, $
    	xthick=5, ythick=5, ticklen=0.29999, charsize=1.9

     

    • 지도 맵 설정

    cgmap_gshhs, 'gshhg'+path_sep()+'gshhs_i.b', color='black', /outline, level=4, thick=1.0
    cgmap_continents, /continents,  /hires, color='black', mlinethick=0.001, thick=1.0, limit=[-90,-180,90,180]

     

    • 도법에 대한 격자 보조선 설정

      • cgmap_grid를 기준 위/경도 (lats, lons)에 따라 텍스트 (lats_names, lons_names) 및 격자 보조선 삽입

      • cgtext를 통해 그림 제목 삽입

    lats = [-90, -60, -30, 0, 30, 60, 90]
    lats_names = ['','', '', ' ', '','', '']
    
    lons = [10, 80, 110, 140, 170, -160, -10]
    lons_names = ['','', '', '', '', '','']
    
    cgmap_grid, color='black', /label, lats=lats,  latlabel=170, lonlabel=-5, latnames=lats_names, lons=lons, lonnames=lons_names, clip_text=0, linestyle=1, noclip=0, /horizon, charsize=1.7
    cgtext, 0.5, 0.965, ps_name, charsize=2, charthick=1.6, alignment=0.5, color='black', font=0, /normal

     

    • 포스트 스크립트 형식 (PS)을 PNG로 변환

      • device를 통해 포스크 스크립트 정상 종료

      • convert를 통해 PNG 이미지 형태로 변환

      • file_delete를 통해 포스트 스크립트 삭제

    device, /close_file
    
    com  = 'convert -flatten -background white '+ps_name+'.ps'+' '+file_basename(ps_name, '.ps')+'.png'
    spawn, com
    
    file_delete, ps_name+'.ps'

     

    • Terra/CERES 자료를 이용한 지표면 특성과 운량에 따른 매핑

     

    [전체]

     

     참고 문헌

    [논문]

    • 없음

    [보고서]

    • 없음

    [URL]

    • 없음

     

     문의사항

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

    • sangho.lee.1990@gmail.com

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

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