IDL에서 DEM(Digital Elevation Model) 자료 파일을 읽고 처리 및 표출까지 해보는 방법을 소개하고 있습니다. 먼저 지난 회차 게시물에서는 한반도 지역에 대한 ASTER DEM V003 자료 파일을 예제로 사용하면서 이 파일을 읽고 이미지의 형태로 기본적인 표출만 하는 과정까지 진행해보았습니다. 오늘은 DEM 데이터를 이미지의 형태로 한반도 지도상에 중첩하여 표출하는 작업을 진행해보기로 합니다. 사용할 DEM 자료 파일은 지난 회차에서 사용했던 것과 동일합니다.
일단 READ_TIFF 함수를 사용하여 이 파일을 읽어서 배열로 가져오는 과정까지는 지난번과 동일하게 진행합니다.
file = 'ASTGTMV003_N36E126_dem.tif'
data = READ_TIFF(file, ORIENTATION=ori)
data = ROTATE(data, 7)
HELP, data
PRINT, MIN(data), MAX(data)
이제 표출 과정으로 넘어가야 합니다. 먼저 MAP 함수를 사용하여 한반도 영역을 커버하는 적절한 범위의 바탕 지도를 표출하는 과정부터 다음과 같이 시작합니다.
win_map = WINDOW(DIMENSIONS=[700, 800], /NO_TOOLBAR)
limit = [33, 124, 41, 131]
m = MAP('Geographic', LIMIT=limit, $
MARGIN=0.1, FONT_SIZE=11, CLIP=0, /CURRENT)
m.MapGrid.LABEL_POSITION = 0
m.MapGrid.LINESTYLE = 1
m.MapGrid.HORIZON_LINESTYLE = 0
여기서 지도의 범위는 동경 124~131도 그리고 북위 33~41도가 되도록 하였습니다. 다만 지도상에 이미지를 중첩해야 하는 작업이기 때문에 MAPCONTINENTS 함수를 사용하여 대륙경계선을 그리는 작업까지는 아직 진행하지 않은 상태입니다. 일단 DEM 데이터 이미지를 먼저 올려야 하는데, 이 때 중첩될 이미지의 위치 및 범위를 정확히 명시해줘야 합니다. 이 과정은 IMAGE 함수를 사용하여 다음과 같이 처리합니다.
lon0 = 126.0
lat0 = 36.0
imo = IMAGE(data, RGB_TABLE=75, MIN_VALUE=0, $
IMAGE_LOCATION=[lon0, lat0], IMAGE_DIMENSION=[1, 1], /OVERPLOT)
현재 사용중인 DEM 데이터의 위치가 동경 126.0 및 북위 36.0를 기점으로 양방향 1도씩 커버하는 영역에 해당되므로 위와 같이 IMAGE 함수의 IMAGE_LOCATION 및 IMAGE_DIMENSION 속성에 대하여 이러한 정보들을 부여하는 것이 반드시 필요합니다. 이렇게 이미지를 먼저 표출한 후에 MAPCONTINENTS 함수를 사용하여 대륙경계선을 표시하는 작업을 진행하면 됩니다. 또한 COLORBAR 함수를 사용하여 우측에 세로 방향의 컬러바를 삽입하는데, 이 때 컬러바가 위치할 공간을 충분히 확보하기 위하여 지도 개체에 대하여 Translate 메서드를 사용하여 지도의 위치를 적절히 재조정해주는 것이 좋습니다. 이러한 과정은 다음과 같습니다.
mc = MAPCONTINENTS(/HIRES)
m.Translate, -0.02, 0, 0, /NORMAL
cb_im = COLORBAR(ORIENTATION=1, TITLE='Height (m)', $
POSITION=[0.96, 0.2, 0.99, 0.8], /BORDER)
여기까지의 내용을 모두 실행하면 표출 결과는 다음 그림과 같을 것입니다.

일단 이 그림을 보면 한반도 영역을 커버하는 지도가 표시된 상태에서 그 위에 DEM 이미지가 제대로 중첩된 것을 알 수 있습니다. 실제로 이 영역은 충청남도의 서해 인접 지역에 해당됩니다. 그런데 이 그림에서는 지도의 범위가 DEM 이미지의 크기에 비하여 큰 편이기 때문에 DEM 이미지가 작게 보이는 감이 있습니다. 만약 지도의 범위를 좁힌다면 DEM 이미지가 더 크게 보이도록 하는 것이 가능할 것입니다. 이를 위하여 앞서 정의된 기준 좌표값들인 lon0, lat0를 이용하여 지도 개체 m의 LIMIT 속성의 값을 다음과 같이 변경해보면 어떨까 합니다.
m.LIMIT = [lat0-0.5, lon0-0.5, lat0+1.5, lon0+1.5]
m.MapGrid.FONT_SIZE = 9
여기서는 지도의 경위도 범위를 후속 조정하는 작업을 하고, 이로 인하여 좌표값 문자들이 가려지지 않도록 하기 위하여 문자 크기를 약간 줄이는 과정까지 추가하였습니다. 이러한 변경사항을 반영하면 결과는 다음 그림과 같습니다.

이와 같이 표출하면 지도와 중첩된 DEM 이미지가 좀 더 크게 보이도록 할 수 있습니다. 참고로 다른 위치에 대한 DEM 자료를 사용한 예제 그림들도 보면 다음과 같습니다.


이 데이터의 좌표는 'N37E128'이며 강원도 강릉 부근 지역에 해당됩니다. 어쨌든 1도x1도의 크기의 영역을 커버하는 DEM 자료 파일을 읽고 처리하여 그림까지 표출해보는 과정은 대략 위와 같습니다.
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > Mapping' 카테고리의 다른 글
| DEM 자료의 처리 및 표출 [1] (3) | 2025.07.09 |
|---|---|
| MAP 함수로 지도 표출시 여백의 설정 (0) | 2025.06.16 |
| 지도의 국경선 데이터의 변경 및 표출 (0) | 2023.12.14 |
| LCC 투영법 기반의 데이터 표출 및 지도 윤곽 처리 (0) | 2023.08.07 |
| 대륙 또는 해양의 마스킹(Masking) [2] (5) | 2023.02.06 |