GK2A 위성 데이터 처리 마지막 포스트 내용은 간단한 시각화입니다.
자료를 받더라도 확인할 수 없으면 무용지물이겠죠?
간단한 시각화하는 방법을 알아보겠습니다.
1. 다운로드: https://climate-data-science.tistory.com/2
2. NC파일 읽기: https://climate-data-science.tistory.com/3
- 위도, 경도 메타 데이터 받기
위성 데이터는 특정 위도와 경도 좌표를 갖고 있고, 이를 기준으로 시각화를 해야합니다.
하지만 제가 다운로드 받은 위성 데이터에는 위도, 경도 자료가 없었습니다.
1. 웹사이트 접속
대체로 다른 위성 데이터에는 위도, 경도 데이터가 파일에 같이 포함되어있지만
제가 받은 자료의 경우 다음 웹사이트에서 위도, 경도 데이터를 찾을 수 있습니다.
https://datasvc.nmsc.kma.go.kr/datasvc/html/base/cmm/selectPage.do?page=static.software
웹사이트에 들어가서 위경도라 적힌 부분을 보시면 다양한 자료가 있습니다.
2. 위경도 자료 선택 후 다운로드
저도 처음에는 많은 파일 중에 무엇을 받아야 하는지 좀 많이 헷갈렸는데요.
다음 웹사이트에서 파일에 위경도 정보를 찾을 수 있습니다.
https://nmsc.kma.go.kr/homepage/html/base/bbs/selectBbs.do?bbsCd=00135&bbsUsq=200209
제가 사용한 파일명을 봅시다.
'gk2a_ami_le2_tqprof_ko020lc_202208130900.nc'
중간에 lc라고 적힌 부분이 Lambert Conformal Conic을 의미합니다.
실제로 제가 받은 파일의 변수 정보를 보면 [900(dim_y, 위도) x 900(dim_x, 경도)]차원의 배열입니다.
LCC 위경도, 한반도 2 km 자료의 행의 숫자가 810000 = [900 x 900]으로 변수의 차원과 일치합니다.
저는 LCC 도법, 한반도 2 km "TXT"파일을 이용했습니다.
- 간단한 시각화
1. 시각화를 위한 자료 읽기
import numpy as np
import pandas as pd
import netCDF4 as nc
inpath = '파일의 경로'
infile = 'gk2a_ami_le2_tqprof_ko020lc_202208130900.nc'
ncfile = nc.Dataset(f'{inpath}{infile}')
# T_profile (연직 온도장) 변수 읽기
var = ncfile.variables['T_profile'][:]
# 그리고자 하는 pressure level 선택
ilev = 46
plot_var = var[:,:,ilev] # [위도, 경도, 연직층]
# 위경도 자료 읽기
infile = 'latlon_ko_2000.txt'
latlon = pd.read_csv(infile,sep='\t', names=['lat','lon'], header=None)
lat = latlon['lat']
lon = latlon['lon']
lat2d = lat.values.reshape(900,900)
lon2d = lon.values.reshape(900,900)
2. 시각화
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
# 좌표계 설정
plt_crs = ccrs.PlateCarree()
proj = ccrs.LambertConformal(central_longitude=126, central_latitude=38,
standard_parallels =(30,60))
fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(111, projection=proj)
# 그림 설정
ax.set_extent([124,132,33,43], crs=plt_crs)
ax.coastlines(resolution='50m')
xlocs = range(125,133,2)
ylocs = range(33,45,3)
gl = ax.gridlines(crs=plt_crs, draw_labels=True, linewidth=1, color='gray', alpha=0.5, linestyle='--', xlocs=xlocs, ylocs=ylocs, x_inline=False, y_inline=False)
gl.top_labels=False
gl.right_labels=False
gl.bottom_labels = True
# 그림 그리기
vmin, vmax, nlevels = 285, 300, 16
levels = np.linspace(vmin, vmax, nlevels)
shadings = ax.contourf(lon2d, lat2d, plot_var, cmap='jet', transform=plt_crs, levels=levels)
# 칼라바
cbar = plt.colorbar(shadings, ax=ax, orientation='vertical', shrink=0.8)
cbar.set_label('K')
plt.show()
proj 변수를 정의할 때 central_longitude, central_latitude, standard는 변수는 다음의 파일을 참고해서 선언했습니다.
첨부파일의 KO (Korea/한반도 영역) 2.0km 부분에 원점 위도, 중심 자오선, standard parallel1, standard parallel2값입니다.
이것으로 GK2A 위성 데이터 처리를 마치겠습니다.
'대기과학 > 프로그래밍' 카테고리의 다른 글
[folium] 지도에 ASOS 관측소 위치 표시하기 (0) | 2024.05.10 |
---|---|
[python] 지도에 대한민국 행정 단위 경계 그리기 (1) | 2024.04.29 |
지도에 ASOS 관측소 위치 표시하기 (0) | 2024.04.25 |
[GK2A(천리안 2호) 위성 데이터 처리] 2. NC 파일 읽기 (1) | 2024.04.18 |
[GK2A(천리안 2호) 위성 데이터 처리] 1. 다운로드 (0) | 2024.04.18 |