DEM(Digital Elevation Model)은 수치표고모델이라고도 하는데 식생 및 인공구조물 등을 제외한 지형 자체만의 표고(Elevation) 값을 뜻합니다. 그리고 DEM 자료는 경도 및 위도 방향으로 일정한 간격으로 표고 값을 측정한 자료로서 원격탐사, 기상, 지질 등 다양한 분야에서 널리 사용되는 자료이기도 합니다. 주로 인공위성들에 의하여 측량되는 이러한 데이터는 그 종류가 다양하며 관측 위성의 종류 및 관측의 해상도에 따라 세분화됩니다. 이러한 자료들은 일반에게 공개적으로 배포되는 경우도 많지만 그렇지 않은 경우도 있습니다. 물론 IDL에서도 DEM 자료를 읽고 처리 및 표출하는 것이 가능합니다. 그래서 이번 기회에 그러한 방법을 예제와 함께 소개해보고자 합니다.
먼저 어떤 DEM 자료를 사용할 것인가를 결정해야 하는데, 아무래도 공개적으로 배포되고 있고 획득하기가 비교적 용이한 자료를 대상으로 하는 것이 좋을 것 같습니다. DEM 자료의 배포처는 다양하지만 여기서는 NASA에서 배포하는 DEM 자료들 중 하나인 ASTER(Advanced Spaceborne Thermal Emission and Reflection Radiometer) 위성 자료를 사용해보기로 합니다. 그리고 ASTER DEM 자료는 세부적으로 몇가지 종류가 있는데 여기서는 V003에 해당되는 자료를 대상으로 하겠습니다. ASTER DEM V003 자료는 NASA에서 운영중인 Earthdata Search 웹사이트에서 받을 수 있는데 그 주소는 아래와 같습니다.
https://search.earthdata.nasa.gov/search/?fi=ASTER
그래서 이 웹사이트에서 제가 수신한 DEM 자료 파일을 사용해보기로 하겠습니다. 참고로 여기서 배포되는 ASTER DEM 자료는 경도 및 위도 방향으로 각각 1도 만큼의 크기를 갖는 격자로 분할되어서 TIFF 형식의 파일로 제공됩니다. 즉 1도x1도 크기의 격자가 하나의 파일에 해당됩니다. 그리고 해상도는 30m입니다. 하나의 파일 내에는 표고 값들이 3601x3601의 구조를 갖는 배열로 수록되어 있습니다. 그래서 만약 한반도 영역에 대한 전체 데이터를 얻고자 할 경우에는 경위도 범위에 따라서는 대략 40~60개 정도의 파일들을 받아야 합니다. 실제로 이 웹페이지에서 한반도 영역의 DEM 자료를 받는 인터페이스의 모습을 보면 다음 그림과 같습니다.

여기서는 편의상 하나의 섹터(1도x1도)에 대한 파일을 수신하여 예제로 사용해보겠습니다. 물론 이렇게 자료 파일을 수신하려면 가입 및 로그인이 필요합니다. 제가 수신한 파일은 경도 및 위도 좌표가 (126, 36)인 섹터에 해당되며 이 파일을 아래에 첨부합니다.
그러면 지금부터 이 파일을 읽고 처리해봅시다. IDL에서 TIFF 형식의 파일을 읽으려면 READ_TIFF 함수를 사용하는 것을 권장합니다. 그 과정은 다음과 같습니다.
file = 'ASTGTMV003_N36E126_dem.tif'
data = READ_TIFF(file, ORIENTATION=ori)
PRINT, ori
1
여기서는 READ_TIFF 함수를 사용할 때 ORIENTATION 키워드에 변수 ori를 부여하여 이 변수를 통하여 값을 돌려받는 것에 주목할 필요가 있습니다. 이것은 TIFF 형식의 파일 내에 수록된 2차원 이미지 배열이 어떤 식으로 회전된 상태인가를 알려주는 값이라고 보면 됩니다. 실제로 이 값은 1로 얻어지는데, 이럴 경우에는 IDL에서 ROTATE 함수를 사용하여 회전을 시켜줘야 합니다. 즉 TIFF 파일에 수록된 데이터의 회전 상태에 대한 보정을 해줘야 비로소 우리가 볼 때 정방향이 되기 때문입니다. 따라서 다음과 같은 처리 과정이 추가적으로 실행되어야 합니다.
data = ROTATE(data, 7)
여기서 ROTATE 함수의 두번째 인수 값이 7이 되어야 하는 이유는 IDL 도움말에서 READ_TIFF 함수에 관한 섹션에 제시된 테이블을 참조하면 됩니다. 즉 이 테이블에는 READ_TIFF 함수의 ORIENTATION 키워드로 얻어진 값과 ROTATE 함수의 회전 방향 인덱스 사이의 대응 관계가 제시되어 있는데, 이 테이블의 내용을 참조하여 회전을 시켜주는 것이 필요함을 유의하면 됩니다. 이러한 과정에 의하여 얻어진 배열 data에 관한 정보를 살펴보면 다음과 같습니다.
HELP, data
PRINT, MIN(data), MAX(data)
DATA INT = Array[3601, 3601]
0 779
이와 같이 3601x3601의 구조를 갖는 2차원 배열이며 정수형의 표고 값들로 구성되어 있습니다. 값들의 범위는 0~779이며 이것은 미터(m) 단위의 표고 값에 해당됩니다. 그러면 적절한 크기의 그래픽 창을 띄우고 이 데이터를 이미지의 형태로 표출해봅시다. 그 과정은 다음과 같습니다.
win_im = WINDOW(DIMENSIONS=[700, 600], /NO_TOOLBAR)
im = IMAGE(data, RGB_TABLE=75, MIN_VALUE=0, MARGIN=0.05, /CURRENT)
im.Translate, -0.07, 0, 0, /NORMAL
cb_im = COLORBAR(ORIENTATION=1, TITLE='Height (m)', $
POSITION=[0.94, 0.2, 0.98, 0.8], /BORDER)
이와 같이 WINDOW 및 IMAGE 함수를 사용하면 됩니다. 여기서는 75번 컬러테이블을 사용하였는데 DEM 자료의 표고 값들이라는 특성과 비교적 잘 맞는 컬러테이블인 것 같아서 사용해보았습니다. 그리고 IMAGE 함수에서 MIN_VALUE의 값을 0으로 설정하여 이미지 표출시 최소값이 0이 되도록 하였습니다. 실제로 섹터의 위치에 따라서는 data 배열 내 값들 중 최소값이 (-)인 경우도 있긴 하지만, 어차피 이 데이터가 수심이 아닌 표고 값이라는 특성을 감안하면 (-)값이 큰 의미는 없다고 보고 최소값을 이렇게 0으로 설정해둔 것입니다. 그 외에도 COLORBAR 함수를 사용하여 세로 방향의 컬러바를 우측에 배치하였고 이를 위하여 이미지를 약간 왼쪽으로 이동시키는 과정까지 포함되어 있습니다. 이러한 과정에 의하여 표출된 그림의 모습은 다음과 같습니다.

이와 같이 표고 값의 높낮이를 색상으로 구분할 수 있습니다. 그리고 이 데이터가 수록된 TIFF 파일의 이름에는 해당 영역의 좌표를 뜻하는 문자가 포함되어 있는데, 이 파일의 경우는 'N36E126'이라는 문자열이 포함되어 있습니다. 따라서 이 데이터는 동경 126도 및 북위 36도 지점으로부터 각 방향으로 1도를 커버하는 섹터에 해당되며 이는 경도 126~127도 및 위도 36~37도 범위에 해당됩니다. 실제로 이 섹터는 충청남도의 서해 인접 지역에 해당됩니다. 참고로 다른 섹터에 대한 자료를 이용하여 표출해본 그림을 보면 다음과 같습니다. 이 데이터의 경우는 'N37E128' 섹터이며 강원도 강릉 부근 지역에 해당됩니다.

어쨌든 ASTER DEM 자료가 수록된 TIFF 파일을 읽어서 위와 같이 이미지로 표출하는 것이 가능합니다. 하지만 여기에서 그치지 않고 이제는 지도와 함께 DEM 데이터 이미지를 중첩하여 표출해보는 것이 필요할 것 같습니다. 그러면 이러한 작업에 관해서는 다음 회차에서 소개해보기로 하겠습니다.
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > Mapping' 카테고리의 다른 글
| DEM 자료의 처리 및 표출 [2] (2) | 2025.07.15 |
|---|---|
| MAP 함수로 지도 표출시 여백의 설정 (0) | 2025.06.16 |
| 지도의 국경선 데이터의 변경 및 표출 (0) | 2023.12.14 |
| LCC 투영법 기반의 데이터 표출 및 지도 윤곽 처리 (0) | 2023.08.07 |
| 대륙 또는 해양의 마스킹(Masking) [2] (5) | 2023.02.06 |