HDF-EOS SWATH 데이터 읽기(AMSR-E Rain Data 예제)

HDF-EOS는 자유로운 HDF 포맷의 일부 형식을 강제하는 대신 Earth Observing  System(EOS) 이라는 이름에 걸맞게 지구과학적 자료를 저장하고 접근하는 데 편리하도록 설계되어 있습니다. 어쨌든 HDF-EOS는 HDF입니다. HDF-EOS는 세 가지의 Geospatial data 타입을 지원하는데, Grid, Point, Swath 입니다.

IDL은 HDF-EOS 를 지원하며, EOS_ 로 시작하는 루틴들이 모두 이를 위한 것입니다. EOS_GD_ 로 시작하는 루틴은 Grid 타입을 위한 것이며, EOS_PT_ 로 시작하면 Point, EOS_SW_ 로 시작하면 Swath 타입을 위한 루틴이란 의미입니다.

최근에 AMSR-E Rain 데이터를 다루어 볼 기회가 있었는데요, 사용자들이 자료 형식에 대한 부담감 때문에 걱정이 앞서서 시작을 못하시는 것 같습니다. 사실 그렇지 않습니다. 오히려 HDF-EOS 포맷이라고 하면 아주 정형화된 방법으로 읽는 것이라고 생각하셔도 됩니다.

NSIDC의 AMSR-E Rain 데이터에 대해서는 아래 링크를 참고하시면 될 것 같습니다.

 AMSR-E/Aqua L2B Global Swath Rain Rate/Type GSFC Profiling Algorithm

이 글에서는 AMSR_E_L2_rain_V11_201106191704_D.hdf 파일을 읽고 우리나라와 주변 영역에 대해 간단히 표출까지 해 보는 예를 보여 드리겠습니다. 어떤 HDF-EOS 든지 이렇게 시작하시면 됩니다. 물론 한두번 삽질은 각오 하셔야죠^_^.

IDL> file=’AMSR_E_L2_Rain_V11_201106191704_D.hdf’

일단 해당 자료에 대해 처음 사용하신다면, 이 안에 어떤 것들이 들어 있는지 한번 보셔야죠. IDL의 HDF_BROWSER()를 사용하여 조회할 수 있습니다.

HDF_BROWSER 함수를 이용해서 파일의 개요를 볼 수 있습니다.

HDF_BROWSER 함수를 이용해서 파일의 개요를 볼 수 있습니다.

그림과 같이 이 파일에는 하나의 Swath 데이터 세트가 있습니다.  1 Swaths 라고 된 부분을 더블클릭하거나 바로 위의 메뉴(처음에는 HDF-EOS Summary라고 되어 있어요)에서 SWATH를 선택하면 실제 Swath 데이터의 구조와 필드 이름을 볼 수 있습니다.

Swath 항목을 선택하면 Swath 이름과 Field 이름을 알 수 있습니다.

Swath 항목을 선택하면 Swath 이름과 Field 이름을 알 수 있습니다.

이 예제 파일에는 ‘L2B Rainfall Products’ 라는 이름의 Swath가 하나 들어 있네요. 데이터 필드를 마우스로 선택하고 Preview 버튼을 누르면 간략하게나마 데이터가 어떻게 들어 있는지 볼 수도 있습니다. 이 예제 파일에서는 Time, Latitude, Longitude, Rain Status, Rain Rate, Rain Type, Surface Type 이 필드 이름이고 이를 이용하여 데이터를 읽어 들일 수 있습니다.

이렇게 해당 파일의 정보를 알았으니, 이후 데이터를 읽는 작업은 정형화 되어 있습니다.

IDL> file_id=EOS_SW_OPEN(file)      ;파일 Open이죠. File ID를 받습니다.
IDL> swath_id = EOS_SW_ATTACH(file_id, ‘L2B Rainfall Products’)
;File ID와 Swath Name을 지정해 주면 Swath ID를 받습니다.

IDL> result=EOS_SW_READFIELD(swath_id, ‘Time’, time)
IDL> result=EOS_SW_READFIELD(swath_id, ‘Longitude’, lon)
IDL> result=EOS_SW_READFIELD(swath_id, ‘Latitude’, lat)

IDL> result=EOS_SW_READFIELD(swath_id, ‘Rain Status’, rain_status)
IDL> result=EOS_SW_READFIELD(swath_id, ‘Rain Rate’, rain_rate)
IDL> result=EOS_SW_READFIELD(swath_id, ‘Rain Type’, rain_type)
IDL> result=EOS_SW_READFIELD(swath_id, ‘Surface Type’, surface_type)
;위와 같이 SWATH ID와 관심 있는 Swath Field 이름, 그리고 데이터를 받아낼 변수명을 지정해 주면 읽기 끝!

IDL> ok = EOS_SW_DETACH(swath_id)
IDL> ok = EOS_SW_CLOSE(file_id)
;Swath를 닫고, File을 닫습니다. 정말 끝!

Field 이름이나 Swath 이름 같은 것 대소문자, 띄어쓰기까지 맞추어 써 주어야 인식합니다. 이 점은 대소문자 구분 안하고 사는 IDL 사용자들이 꼭 한번 실수하는 부분이죠(잘 아시죠… 누구 얘긴지).

Swath 데이터는 값에 해당하는 배열과 각 배열 요소의 위경도 좌표를 가진 배열을 제공합니다. 그래서 (Value, Lon, Lat) 형태로 Gridding을 하든 Contour 등을 이용해서 바로 그리든 2차원 평면상에 표출되는 데이터입니다(EOS가 원래 그런 거 하는 거 아니겠어요?)

다음과 같이 간단한 표출 예제를 보여 드리겠습니다.

IDL> m=map(‘Mercator’, limit=[25, 110, 50, 150], POSITION=[0.1, 0.2, 0.9, 0.85], Color=’light gray’)

IDL> c=contour(rain_rate*0.1, lon, lat, /FILL, OVERPLOT=m, GRID_UNITS=’degrees’, RGB_TABLE=39, TITLE=’AMSR Test’,  MIN_VALUE=0, MAX_VALUE=1.0, N_LEVELS=10)
; Value, lon, lat 형태로 자료를 사용하는 것을 보아 두십시오. 이렇게 데이터 세트를 제공하면 Contour 내부적으로 Gridding을 수행합니다.

IDL> mc = MAPCONTINENTS(COLOR=’sky blue’)
IDL> cb=COLORBAR(TITLE=’Rain Rate(mm/hr)’, TARGET=c)

Rain Rate를 표출해 보았는데요, 데이터 설명서에 Field 값 * 0.1을 하면 시간당 강수량(mm)로 환산된다고 하는군요. 그래서 0.1을 곱했습니다.

AMSR-E 데이터는 위성의 궤적을 따라 띠 형태로 자료가 존재합니다. 예제에서는 우리나라 주변 영역만 디스플레이 했습니다.

AMSR-E 데이터는 위성의 궤적을 따라 띠 형태로 자료가 존재합니다. 예제에서는 우리나라 주변 영역만 디스플레이 했습니다.

참~ 쉽죠… 라고 말씀드리지는 않겠습니다만, HDF-EOS라고 더 복잡한 것은 절대 아니라는 점에 대해서는 동의해 주셔야 합니다.^_^. HDF-EOS는 절대 부담스러운 포맷이 아니예요. 규약을 지켜서 데이터를 저장하도록 강요하는 포맷이기 때문에 읽는 쪽에서는 오히려 정형화 된 방법으로 처리할 수 있는 겁니다.