IDL/Mapping

천리안 위성 2A호(GK2A)의 데이터 표출 [2]

이상우_IDL 2020. 3. 13. 17:11
728x90

지난 회에 이어서 이번에는 천리안 2A호 위성의 동아시아 영역 데이터를 처리하여 표출하는 예제를 살펴보겠습니다. 사실 전반적인 코딩 내용은 지난 회에서 소개한 한반도 영역 데이터를 처리하는 방식과 거의 유사합니다. 다만 데이터 파일이 다르고 지도 표출에 있어서 경위도 범위가 달라지는 것 외에는 별로 특별히 다른 점이 없습니다. 우선 다음과 같이 데이터 파일 이름을 문자값으로 정의합니다.


file = 'data/KOMPSAT_2A/gk2a_ami_le1b_ir112_ea020lc_202002280300.nc'


그리고 이 파일 내에 포함된 변수(Variable)들의 목록을 NCDF_LIST 명령으로 살펴보면 다음과 같습니다.


NCDF_LIST, file, /VARIABLES


 data/KOMPSAT_2A/gk2a_ami_le1b_ir112_ea020lc_202002280300.nc

     # dimensions: 2

     # Variables: 1

     # Global attributes: 33

     There are no unlimited dimensions.

 

     Variables

           0  image_pixel_values: UINT(3000,2600) = UINT(dim_x,dim_y)


출력된 내용을 보면 동아시아 영역 데이터 역시 한반도 영역 데이터의 경우와 거의 유사한 것을 확인할 수 있습니다. 다만 데이터 배열의 구조는 3000x2600으로 한반도 영역 데이터의 900x900보다 훨씬 큰 것을 알 수 있습니다. 따라서 커버리지 역시 다른데, 그 부분에 대해서는 다음과 같이 파일 내에 포함된 전역속성들의 목록을 NCDF_LIST 명령으로 살펴보면 확인이 가능합니다.


NCDF_LIST, file, /GATT


     Global Attributes

           0  _NCProperties: version=1|netcdflibversion=4.4.1.1|hdf5libversion=1.8.14

           1  projection_type: lambert_conformal_conic

           2  standard_parallel1: 30.000000

           3  standard_parallel2: 60.000000

           4  origin_latitude: 38.000000

           5  central_meridian: 126.00000

           6  false_easting: 0.0000000

           7  false_northing: 0.0000000

           8  image_width: 3000

           9  image_height: 2600

          10  pixel_size: 2000.0000

          11  upper_left_easting: -2999000.0

          12  upper_left_northing: 2599000.0

          13  upper_right_easting: 2999000.0

          14  upper_right_northing: 2599000.0

          15  lower_left_easting: -2999000.0

          16  lower_left_northing: -2599000.0

          17  lower_right_easting: 2999000.0

          18  lower_right_northing: -2599000.0

          19  _CoordinateTransformType: 0.0000000

          20  _CoordinateAxisTypes: 0.0000000

          21  file_name: gk2a_ami_le1b_ir112_ea020lc_202002280300.nc

          22  origianl_sourece_file: gk2a_ami_le1b_ir112_fd020ge_202002280300.nc

          23  number_of_columns: 3000

          24  number_of_lines: 2600

          25  total_pixel_data_size: 7800000

          26  channel_center_wavelength: 11.2

          27  channel_spatial_resolution: 2.0

          28  data_processing_center: NMSC

          29  data_processing_mode: operation

          30  file_format_version: 1.0.0_20181120

          31  instrument_name: AMI

          32  satellite_name: GK-2A


이와 같이 출력된 전역속성들의 목록에서 image_width, image_height가 3000, 2600으로 되어 있는데, 이미지 데이터의 가로 및 세로 화소 크기에 해당됩니다. 그리고 pixel_size라는 항목의 값이 2000으로 되어 있는데, 이것은 이미지 데이터의 화소 한 개가 가로 및 세로 방향으로 2000m 즉 2km라는 의미입니다. 결국 이미지 데이터의 화소 한 개는 2km by 2km의 영역을 차지합니다. 그리고 이미지 데이터의 중심점에 대한 경도 및 위도에 해당되는 항목이 바로 central_meridian 및 origin_latitude이고 각각 126.0 및 38.0으로 되어 있습니다. 그리고 upper_left_easting, upper_right_easting은 이미지 격자 범위의 좌측상단 및 우측상단 지점의 X축 방향 거리 좌표에 해당됩니다. 즉 중심점을 기준으로 가로 방향으로 좌측으로는 2999km, 우측으로는 2599km까지 커버한다는 얘기입니다. 유사한 방식으로 생각하면 upper_left_northing, lower_left_northing은 이미지 격자 범위의 좌측상단 및 좌측하단 지점의 Y축 방향 거리 좌표에 해당됩니다. 즉 중심점을 기준으로 세로 방향으로 하단으로는 2599km, 상단으로는 2999km까지 커버한다는 얘기입니다. 그리고 기반 지도의 투영법 및 standard parallel에 해당되는 항목들도 보입니다. 이러한 정보들을 다음과 같이 추출하여 표출 과정에서 이용한 것입니다.


id = NCDF_OPEN(file)

NCDF_VARGET, id, 'image_pixel_values', img

HELP, img

NCDF_ATTGET, id, 'origin_latitude', latc, /GLOBAL

NCDF_ATTGET, id, 'central_meridian', lonc, /GLOBAL

NCDF_ATTGET, id, 'standard_parallel1', latsp1, /GLOBAL

NCDF_ATTGET, id, 'standard_parallel2', latsp2, /GLOBAL

PRINT, lonc, latc, latsp1, latsp2

NCDF_ATTGET, id, 'upper_left_easting', x_ul, /GLOBAL

NCDF_ATTGET, id, 'upper_right_easting', x_ur, /GLOBAL

NCDF_ATTGET, id, 'upper_left_northing', y_ul, /GLOBAL

NCDF_ATTGET, id, 'lower_left_northing', y_ll, /GLOBAL

PRINT, x_ul, x_ur, y_ul, y_ll

NCDF_ATTGET, id, 'image_width', nx, /GLOBAL

NCDF_ATTGET, id, 'image_height', ny, /GLOBAL

NCDF_ATTGET, id, 'pixel_size', dx, /GLOBAL

NCDF_ATTGET, id, 'pixel_size', dy, /GLOBAL

PRINT, nx, ny, dx, dy

NCDF_ATTGET, id, 'file_name', fname, /GLOBAL

NCDF_CLOSE, id

HELP, fname

fname = STRJOIN(STRING(fname))

PRINT, fname


지난 회 게시물에서는 전역속성 정보들에 대한 자세한 내용을 제가 미처 설명하지 못했었는데, 이번 회에서 이와 같이 보충하였습니다. 그러면 표출과정으로 들어가볼텐데, 구체적인 내용은 다음과 같습니다.


limit = [10, 75, 65, 177]

win = WINDOW(DIMENSIONS=[800500], /NO_TOOLBAR)

m = MAP('Lambert Conformal Conic', LIMIT=limit, $

  STANDARD_PAR1=latsp1, STANDARD_PAR2=latsp2, $

  CENTER_LONGITUDE=lonc, CENTER_LATITUDE=latc, $

  HORIZON_LINESTYLE=0, HORIZON_THICK=2, $

  Font_Size=11, CLIP=0, MARGIN=0.08, /CURRENT)

m.MapGrid.GRID_LONGITUDE = 10

m.MapGrid.GRID_LATITUDE = 10

m.MapGrid.LINESTYLE = 2

m.MapGrid.LABEL_POSITION = 0


먼저 LCC 투영법으로 지도를 표출하는데 있어서 앞서 추출한 전역속성 정보들이 이용되도록 하였습니다. 다만 지도 전체 범위는 아무래도 동아시아 영역이다보니 지난번 한반도 영역의 경우에 비해서는 더 커져야 합니다. 따라서 limit에서 경도 범위는 동경 75~177도, 위도 범위는 북위 10~65도로 정의하였습니다. 바로 이어서 이미지 데이터를 중첩하고 대륙경계선을 표시하고 상단에 파일명을 타이틀로 첨부하는 과정은 지난 회와 동일한 방식으로 다음과 같이 한꺼번에 처리하면 됩니다.


xs = FINDGEN(nx)*dx+x_ul

ys = FINDGEN(ny)*dy+y_ll

ctnum = COLORTABLE(67, /REVERSE)

im = IMAGE(REVERSE(img, 2), xs, ys, RGB_TABLE=ctnum, $

  GRID_UNITS=1, /OVERPLOT)

mc = MAPCONTINENTS(/HIRES, COLOR='black')

tx = TEXT(0.5, 0.94, fname, COLOR='blue', ALIGNMENT=0.5, $

  FONT_SIZE=14, /NORMAL)


이렇게 하여 얻은 결과 그림은 다음과 같습니다.



그리고 흑백 계열의 색상을 갖는 컬러테이블 0번을 적용하여 이미지를 표출해보고자 한다면, 이미지 및 대륙경계선 표출 부분만 다음과 같이 변경하여 처리하면 됩니다.


ctnum = 0

im = IMAGE(REVERSE(img, 2), xs, ys, RGB_TABLE=ctnum, $

  GRID_UNITS=1, /OVERPLOT)

mc = MAPCONTINENTS(/HIRES, COLOR='orange')


그러면 다음과 같은 결과 그림을 얻게 될 것입니다.



그래서 동아시아 영역의 데이터는 이와 같은 방식으로 처리하여 표출하면 될 것 같습니다. 지금까지 2회에 걸쳐서 천리안 2A호 위성의 한반도 및 동아시아 영역 데이터를 IDL에서 읽어서 처리하고 표출하는 예제를 소개해보았습니다. 나중에라도 천리안 2A호 위성 데이터의 처리 및 표출과 관련하여 또 다른 예제가 생긴다면 여기를 통하여 소개해보기로 하겠습니다.

LIST