정보
-
업무명 : 아이디엘 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 Programming 및 IDL 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
'프로그래밍 언어 > IDL' 카테고리의 다른 글
[IDL] 아이디엘 대기과학 전공자를 위한 IDL (Interactive Data Language) 소개 (0) | 2020.03.24 |
---|---|
[IDL] 아이디엘 이미지 처리 (Image Processing) 교육 연수 (0) | 2020.03.23 |
[IDL] 아이디엘 히마와리 8호 (Himawari-8/AHI) 기상 위성 자료를 이용한 RGB 합성영상 가시화 (0) | 2019.08.30 |
[IDL] 아이디엘 통계 결과를 테일러 다이어그램 (Taylor Diagram) 가시화 (0) | 2019.07.25 |
[IDL] 아이디엘 히마와리 8호 (Himawari-8/AHI) 기상 위성 자료를 이용한 RGB 합성 및 천리안 1호 (COMS/MI) 기상 위성 자료로부터 에어로졸 광학두께 (AOD) 중첩 (0) | 2019.07.25 |
최근댓글