IDL에서 표출된 지도에서 라벨 문자들이라면 당연히 경위도 격자들에 대응되는 경위도 값들을 뜻합니다. 지도를 표출하게 되면 어떤 투영법에서든간에 경위도 격자선 및 경위도 값 문자들이 함께 표시되는 것이 기본입니다. 오늘은 이렇게 지도상에서 표시되는 라벨 문자들에 대하여 그 형식(Format)을 제어하는 방법을 관련 예제들과 함께 소개해보고자 합니다. 일단 지도부터 먼저 표출해놓고 시작합니다.
win = WINDOW(DIMENSIONS=[800, 700], /NO_TOOLBAR)
limit = [33, 121, 41, 131]
m = MAP('Lambert Conformal Conic', LIMIT=limit, $
STANDARD_PAR1=30, STANDARD_PAR2=60, $
CENTER_LONGITUDE=126, CENTER_LATITUDE=35, $
HORIZON_LINESTYLE=0, HORIZON_THICK=2, $
Font_Size=10, CLIP=0, ASPECT_RATIO=0, $
MARGIN=0.1, /CURRENT)
m.MapGrid.GRID_LONGITUDE = 1
m.MapGrid.GRID_LATITUDE = 1
m.MapGrid.LINESTYLE = 1
m.MapGrid.LABEL_POSITION = 0
mc = MAPCONTINENTS(/HIRES, FILL_COLOR='gold')
이와 같이 LCC(Lambert Conformal Conic) 투영법의 지도를 먼저 표출해봅니다. 이러한 표출 방식은 제가 이 블로그에서 여러 차례 소개했던 적이 있고 여기서도 별로 특별할 것은 없습니다. 표출된 모습은 다음 그림과 같습니다.
여기서는 일단 한반도 영역 전반을 커버하도록 경위도 범위를 설정한 상태입니다. 이제 약간의 변화를 줘서 지도의 중심을 좀 내리고 경위도 범위도 좁혀서 남서쪽 영역을 자세히 표시하도록 조정해봅시다. 이를 위한 과정은 다음과 같습니다.
win = WINDOW(DIMENSIONS=[800, 700], /NO_TOOLBAR)
limit = [33.5, 124.5, 36.5, 127.5]
m = MAP('Lambert Conformal Conic', LIMIT=limit, $
STANDARD_PAR1=30, STANDARD_PAR2=60, $
CENTER_LONGITUDE=126, CENTER_LATITUDE=35, $
HORIZON_LINESTYLE=0, HORIZON_THICK=2, $
Font_Size=10, CLIP=0, ASPECT_RATIO=0, $
MARGIN=[0.12, 0.15, 0.05, 0.05], /CURRENT)
m.MapGrid.GRID_LONGITUDE = 0.5
m.MapGrid.GRID_LATITUDE = 0.5
m.MapGrid.LINESTYLE = 1
m.MapGrid.LABEL_POSITION = 0
mc = MAPCONTINENTS(/HIRES, FILL_COLOR='gold')
여기서는 맨 처음 제시한 예제 코드와의 차이점은 진한색으로 표시하였습니다. 주요 변경 사항들을 보면, 중심 위도를 35로 낮추고 경위도 범위를 3도x3도로 좁히고 격자선 간격을 0.5로 줄이고 지도의 왼쪽 및 아래쪽 여백을 넓혔습니다. 이렇게 표출된 모습은 다음 그림과 같습니다.
그러면 여기서 경도 및 위도의 값을 나타내는 라벨 문자들에 주목해봅시다. 맨 처음과 달리 이번에는 그 간격이 0.5도로 조정된 상태입니다. 그러다보니 값들이 소수점이 붙는 실수형이 되면서, 예를 들어 경도의 경우 125도, 125도 30분, 126도 등과 같은 식으로 60분할 방식(도, 분, 초로 나눠지는)으로 표시가 됩니다. 위도 값들도 마찬가지입니다. 이것은 IDL의 지도 표출 방식에서는 디폴트입니다. 즉 경도 또는 위도의 격자값들이 정수로 떨어지지 않고 실수형으로 가게 될 경우에는 값들이 60분할 방식으로 표시됩니다. 사실 지도의 표출에 있어서는 이러한 방식이 일반적이기는 합니다. 그런데 경우에 따라서는 이렇게 60분할 방식 대신 그냥 소수점이 붙은 실수 형태 그대로 표시하고 싶을 수도 있습니다. 즉 125.0, 125.5 126.0, 126.5 이런 식으로 말입니다.
일단 이런 방식으로 표시하는 것은 가능은 합니다. 다만 약간 귀찮은 과정이 더 필요합니다. 이를 위해서는 MAP 함수의 LABEL_FORMAT 속성을 사용해야 하는데, 별도의 함수 프로그램을 정의하여 이 속성에 부여해야 하기 때문입니다. 그러면 이 방법을 소개해보겠습니다. 먼저 다음과 같은 내용을 담은 프로그램 파일을 따로 만들어두는 것이 필요합니다.
FUNCTION MapGrid_Labels, orientation, location, fractional, defaultlabel
IF (location EQ 0) THEN $
RETURN, orientation ? 'Equator' : 'Prime Meridian'
degree = '!M' + STRING(176b) ; Use the Math symbol
label = STRING(location, FORMAT='(F0.3)')+degree
suffix = orientation ? ((location LT 0) ? 'S' : 'N') : $
((location LT 0) ? 'W' : 'E')
RETURN, label+suffix
END
즉 이러한 내용을 mapgrid_labels.pro라는 IDL 프로그램 파일로 따로 저장해두는 것입니다. 그리고 앞서 제시했던 예제에서는 다음과 같이 MAP 함수 내에서 LABEL_FORMAT 속성을 추가적으로 사용해야 합니다.
win = WINDOW(DIMENSIONS=[800, 700], /NO_TOOLBAR)
limit = [33.5, 124.5, 36.5, 127.5]
m = MAP('Lambert Conformal Conic', LIMIT=limit, $
STANDARD_PAR1=30, STANDARD_PAR2=60, $
CENTER_LONGITUDE=126, CENTER_LATITUDE=35, $
HORIZON_LINESTYLE=0, HORIZON_THICK=2, $
Font_Size=10, CLIP=0, ASPECT_RATIO=0, $
LABEL_FORMAT='MapGrid_Labels', $
MARGIN=[0.12, 0.15, 0.05, 0.05], /CURRENT)
m.MapGrid.GRID_LONGITUDE = 0.5
m.MapGrid.GRID_LATITUDE = 0.5
m.MapGrid.LINESTYLE = 1
m.MapGrid.LABEL_POSITION = 0
mc = MAPCONTINENTS(/HIRES, FILL_COLOR='gold')
이와 같은 변동사항들을 반영하여 다시 결과를 얻어보면 그 모습은 다음 그림과 같습니다.
이 그림을 보면 경도 및 위도 값 문자들의 형식이 기존의 60분할 방식이 아닌 일반적인 실수의 형태인 것을 확인할 수 있습니다. 여기서는 소수점 밑으로 세번째 자리까지 표시되도록 하였습니다. 만약 두번째 자리까지만 표시되도록 하고 싶다면 mapgrid_labels 프로그램 내에서 해당 내용을 수정하면 됩니다.
label = STRING(location, FORMAT='(F0.2)')+degree
즉 이 mapgrid_labels라는 프로그램의 내용을 적절히 수정함으로써 지도상의 라벨 문자들이 내가 원하는 형식으로 표시되도록 할 수 있습니다. 그리고 만약 위와 같이 실수형 값과 방향문자(N, S, E, W)가 합쳐지는 방식 대신 +, - 기호와 실수형 값이 합쳐지는 방식을 사용하고자 한다면 mapgrid_labels 프로그램의 내용을 다음과 같이 수정하면 됩니다.
FUNCTION MapGrid_Labels, orientation, location, fractional, defaultlabel
IF (location EQ 0) THEN $
RETURN, orientation ? 'Equator' : 'Prime Meridian'
degree = '!M' + STRING(176b) ; Use the Math symbol
label = STRING(location, FORMAT='(F0.3)')+degree
prefix = orientation ? ((location LT 0) ? '-' : '+') : $
((location LT 0) ? '-' : '+')
RETURN, prefix+label
END
이러한 변동사항을 반영하여 다시 표출해보면 결과는 다음 그림과 같습니다.
이와 같이 MAP 함수의 LABEL_FORMAT 속성에 부여될 함수 부프로그램을 따로 만들어서 사용하면, 지도 표출시 라벨 문자들의 형식을 커스터마이즈할 수 있다는 것을 잘 알아두시면 좋을 것 같습니다.
'IDL > Mapping' 카테고리의 다른 글
대륙 또는 해양의 마스킹(Masking) [2] (5) | 2023.02.06 |
---|---|
대륙 또는 해양의 마스킹(Masking) [1] (0) | 2023.01.31 |
GOES 16/17 데이터의 표출 (0) | 2022.05.31 |
천리안 위성 2A호(GK2A)의 데이터 표출 [3] (0) | 2021.11.18 |
GOES-R 투영법을 이용한 지도 표출 (0) | 2021.10.28 |