IDL의 NG 체계에서 지원되는 그래픽 함수들은 대부분 MARGIN 또는 POSITION 속성을 지원합니다. 이러한 속성들은 그래픽 창 내에서 개별 그래픽 개체의 여백 또는 위치를 설정하는 역할을 합니다. MAP 함수의 경우도 마찬가지로 이러한 속성들을 지원합니다. 다만 MAP 함수의 경우는 MARGIN 또는 POSITION 속성을 사용하여 여백 또는 위치를 설정하는데 있어서 다른 그래픽 함수들과는 약간 다른 특성이 있기 때문에 유의가 필요합니다. 오늘은 이와 관련된 내용을 소개해보기로 합니다. 먼저 다음과 같이 WINDOW 함수로 그래픽 창을 띄우고 MAP 함수로 지도를 표출하는 예제를 살펴봅시다.
win = WINDOW(DIMENSION=[600, 600], /NO_TOOLBAR)
m = MAP('Geographic', LIMIT=[32, 124, 42, 132], $
MARGIN=0.1, FONT_SIZE=11, /CURRENT)
mc = MAPCONTINENTS(/HIRES, FILL_COLOR='khaki')
m.MapGrid.LABEL_POSITION = 0
m.MapGrid.LINESTYLE = 1
m.MapGrid.HORIZON_LINESTYLE = 0
이것은 한반도를 중심으로 한 지도를 표출하는 예제입니다. 먼저 WINDOW 함수를 사용하여 600x600 크기의 그래픽 창을 띄우고, MAP 함수를 사용하여 그 위에 지도를 표출합니다. 지도의 경도 및 위도 범위는 각각 동경 124~132도 및 북위 32~42도입니다. 그리고 MARGIN 속성의 값을 0.1로 설정하여 상하좌우 여백의 크기가 모두 0.1이 되도록 하였습니다. 이러한 내용을 실행하면 표출 결과는 다음 그림과 같습니다.

이 그림을 보면 우리가 의도했던 결과는 아님을 금방 알아챌 수 있습니다. 구체적으로 보면 상단 및 하단의 여백은 0.1이 맞는데, 좌측 및 우측의 여백은 0.1보다도 더 크다는 것이 바로 눈에 띕니다. 즉 상하좌우의 여백이 균일하게 처리되지 않았으며, 이러한 결과를 보면 MAP 함수의 MARGIN 속성이 유저가 의도한대로 작동하지 않을 수도 있음을 알 수 있습니다. 아마도 이러한 현상은 PLOT 등과 같은 다른 그래픽 함수들을 사용할 때에는 경험하지 못했던 현상일 수도 있습니다. 사실 MAP 함수의 이러한 특성의 이유 및 해결책은 간단합니다. 그 비밀은 바로 ASPECT_RATIO 속성이 쥐고 있습니다. 더 명확하게 얘기하면 MAP 함수에서ASPECT_RATIO 속성의 디폴트 값이 무엇이냐의 문제라고 보면 됩니다.
일단 ASPECT_RATIO 속성은 그래픽 개체의 크기의 가로/세로 비율을 설정하는데 있어서 원본 데이터에 충실할 것이냐(1) 아니면 무시할 것이냐(0)를 결정하는 역할을 합니다. 그리고 NG 체계에서 지원되는 거의 모든 그래픽 함수들이 이 속성을 지원합니다. 다만 이 속성의 디폴트 값이 그래픽 함수마다 다릅니다. 우리가 흔히 사용하는 PLOT, CONTOUR 등과 같은 대부분의 그래픽 함수들은 그 디폴트 값이 0입니다. 하지만 예외적인 케이스가 있는데 바로 IMAGE 및 MAP 함수입니다. 즉 IMAGE 및 MAP 함수들의 경우는 디폴트 값이 1입니다. 그래서 위에 표시된 지도의 경우 그 자체의 가로/세로 비율을 지키는 것이 우선이 됩니다. 위의 MAP 함수의 내용을 보면 투영법은 'Geographic'이고 경도 및 위도 범위가 각각 124~132 및 32~42로 설정되어 있습니다. 즉 가로/세로 비율이 8/10입니다. 하지만 그래픽 창의 경우는 600x600의 크기이므로 가로/세로 비율이 1/1입니다. 이러한 그래픽 창 내에 표출되는 지도가 그 자체의 가로/세로 비율을 어떻게든 유지하도록 표출되다보니 위와 같이 그림의 여백이 유저의 의도대로 반영되지 않았다고 보면 됩니다.
그렇다면 유저의 의도에 맞는 표출이 되도록 하려면 어떻게 하면 될까요? 바로 ASPECT_RATIO 속성을 사용하여 그 값을 0으로 설정하면 됩니다. 즉 지도 자체의 가로/세로 비율은 잊어버리고 그냥 유저가 설정한대로 움직이라는 의미입니다. 이를 위해서는 앞서 MAP 함수가 사용된 내용을 다음과 같이 수정하면 됩니다.
m = MAP('Geographic', LIMIT=[32, 124, 42, 132], $
ASPECT_RATIO=0, MARGIN=0.1, FONT_SIZE=11, /CURRENT)
이러한 변경사항을 반영하여 전체 내용을 다시 실행해보면 결과는 다음 그림과 같습니다.

이 그림을 보면 지도의 표출에 있어서 상하좌우 여백이 모두 0.1이 된 것을 확인할 수 있습니다. 물론 위의 그림을 보면 지도의 모습이 가로 방향으로 다소 길쭉하게 늘어난 것 같은 느낌이 들 수도 있겠지만, 이런 부분은 그래픽 창의 크기 및 지도 자체의 경위도 범위에 대한 좀 더 디테일한 설정을 통하여 유저가 다듬어나가야 할 것입니다. 이와 같이 지도의 표출에 있어서 ASPECT_RATIO 속성의 설정을 어떻게 할 것이냐의 문제는 다른 투영법을 사용할 경우에도 마찬가지로 신경을 써야 합니다. 그러면 이번에는 LCC(Lambert Conformal Conic) 투영법의 지도를 표시하는 예제를 살펴봅시다. 그 과정은 다음과 같습니다.
win = WINDOW(DIMENSION=[600, 600], /NO_TOOLBAR)
m = MAP('Lambert Conformal Conic', LIMIT=[33, 124, 41, 132], $
STANDARD_PAR1=30, STANDARD_PAR2=60, CENTER_LONGITUDE=128, $
MARGIN=0.1, CLIP=0, FONT_SIZE=11, /CURRENT)
mc = MAPCONTINENTS(/HIRES, FILL_COLOR='lavender')
m.MapGrid.LABEL_POSITION = 0
m.MapGrid.LINESTYLE = 1
m.MapGrid.HORIZON_LINESTYLE = 0
여기서는 MAP 함수에서 투영법을 'Lambert Conformal Conic'으로 설정하고 이 투영법의 특성에 맞는 추가적인 속성들이 사용되었습니다. 그리고 MARGIN 속성의 값을 0.1로 설정하였고 일단 ASPECT_RATIO 속성은 전혀 사용하지 않은 상태입니다. 그리고 지도의 경위도 범위는 앞선 예제와 동일합니다. 이 내용을 실행하면 표출 결과는 다음과 같습니다.

역시 이 그림을 보면 상하좌우 여백의 크기가 동일하지 않습니다. 즉 유저의 의도가 제대로 반영되지는 않은 상태임을 알 수 있습니다. 그러면 유저의 의도대로 상하좌우 여백이 모두 0.1로 균일하게 처리되도록 하려면 어떻게 하면 될까요? 해결책은 앞선 예제와 마찬가지입니다. 즉 MAP 함수에서 ASPECT_RATIO 속성의 값을 0으로 설정하면 됩니다. 따라서 위의 내용에서 MAP 함수가 사용된 부분만 다음과 같이 수정하면 됩니다.
m = MAP('Lambert Conformal Conic', LIMIT=[33, 124, 41, 132], $
STANDARD_PAR1=30, STANDARD_PAR2=60, CENTER_LONGITUDE=128, $
ASPECT_RATIO=0, MARGIN=0.1, CLIP=0, FONT_SIZE=11, /CURRENT)
이러한 변경사항을 반영하여 다시 실행하면 결과는 다음 그림과 같습니다.

이 그림을 보면 지도의 표출에 있어서 상하좌우 여백이 모두 0.1로 균일하게 처리된 것을 확인할 수 있습니다. 물론 지도의 투영법이 달라진다고 해도 유저의 판단에 따라서는 그래픽 창의 크기 및 지도 자체의 경위도 범위에 대한 추가적인 조정이 여전히 더 필요할 수도 있습니다. 어쨌든 MAP 함수를 사용하여 지도를 표시하는데 있어서 여백의 설정이 의도했던대로 되지 않는다는 느낌이 든다면 오늘 소개한 바와 같이 ASPECT_RATIO 속성에 주목을 하면 된다는 것을 염두에 두시면 좋을 것 같습니다. 그리고 이 속성에 관해서는 예전에 올렸던 관련 게시물도 또 있으므로 이 내용도 함께 참조하시기 바랍니다.
* 이 내용은 지난 2011년에 올렸던 게시물의 내용을 보강할 뿐 아니라 완전히 대체할 목적으로 작성되었습니다. 따라서 기존의 게시물은 삭제하였습니다.
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > Mapping' 카테고리의 다른 글
| DEM 자료의 처리 및 표출 [2] (2) | 2025.07.15 |
|---|---|
| DEM 자료의 처리 및 표출 [1] (3) | 2025.07.09 |
| 지도의 국경선 데이터의 변경 및 표출 (0) | 2023.12.14 |
| LCC 투영법 기반의 데이터 표출 및 지도 윤곽 처리 (0) | 2023.08.07 |
| 대륙 또는 해양의 마스킹(Masking) [2] (5) | 2023.02.06 |