IDL/Mapping

IDL에서 지도의 표출 및 활용법에 관하여 [11]

이상우_idl 2015. 4. 30. 15:13
728x90
반응형

이번에는 지도상에서 특정 지점을 중심으로 하는 원을 그리되, 이 원은 특정한 색상으로 채우는 작업을 시도해보고자 합니다. 그리고 여러 지점들에 대하여 이러한 원을 그릴 경우 서로 겹치는 부분이 생길 수도 있는데, 이렇게 겹치는 부분의 색상이 더 짙어지는 효과까지도 얻을 수 있습니다. 특정한 지점을 중심으로 하는 원을 그리기 위해서는 ELLIPSE라는 내장함수를 사용합니다. 먼저 기반이 되는 지도를 그리기 위하여 다음과 같은 내용의 예제코드를 작성하였습니다. MAP, MAPCONTINENTS 함수를 사용하여 경위도 영역 및 대륙 경계선을 그리고 투영법은 Lambert Conformal Conic을 사용했다는 점 등은 앞서 지도를 그려봤던 과정들과 거의 유사합니다.


win = WINDOW(DIMENSIONS=[700, 600])

m = MAP('Lambert Conformal Conic', LIMIT=[25, 105, 45, 135], $

  STANDARD_PAR1=30, STANDARD_PAR2=60, $

  ASPECT_RATIO=1, MARGIN=0.05, /CURRENT)

mc = MAPCONTINENTS('GSHHS_i_L1.shp', THICK=2)

mg = m.MapGrid

mg.Linestyle = 2

mg.LABEL_POSITION = 0

mg.Clip = 0


다만 이번 예제코드의 내용을 잘 보면, 이전의 경우들과는 약간 다른 몇몇 차이점들이 존재합니다. 가장 먼저 MAP 함수의 ASPECT_RATIO 속성의 값을 이번에는 0이 아닌 1로 설정해보았습니다. 이렇게 설정하면 지도의 가로/세로 비율을 그래픽창의 크기에 맞추지 않고 IDL이 직접 판단하여 적절한 비율로 고정시키게 됩니다. 그리고 MAPCONTINENTS 함수에 ‘GSHHS_i_L1.shp’라는 문자값이 첫번째 인자로 들어가 있는 것이 눈에 띕니다. 이것은 이른바 Shape 파일이라고 하는데 대륙 경계선을 구성하는 경위도 값들을 담은 외부 자료입니다. 대륙 경계선 자료는 물론 IDL도 기본적으로 내장하고 있지만, 때에 따라서는 외부로부터 가져온 Shape 파일을 직접 쓰게 되는 경우도 생깁니다. 이럴 경우 그 Shape 파일을 현재 작업 디렉토리에 갖고 있는 상태에서, 그 파일의 이름을 이와 같이 인자로 주면 됩니다. 여기서 사용한 GSHHS는 미국 국립 해양대기국(NOAA) 산하에 있는 국립 환경정보센터(NCEI)에서 제공하는 고해상도 자료로서 A Global Self-consistent Hierarchical High-resolution Geography Database의 약어입니다. 계속 업데이트가 되고 있는 자료이고, 다음 웹페이지에서 가장 최신의 경계선 자료를 받을 수 있다는 점도 알아두면 좋을 것 같습니다.


http://www.ngdc.noaa.gov/mgg/shorelines/gshhs.html


어쨌든 이와 같은 바탕 지도를 그린 후 다음과 같이 ELLIPSE 함수를 사용하여 세 지점을 중심으로 한 타원형 폴리곤을 중첩하여 표출할 수 있습니다. ELLIPSE 함수의 처음 두 인자는 중심이 되는 지점의 경도 및 위도 값에 해당됩니다. 그리고 MAJOR, MINOR는 그리고자 하는 타원의 장반경 및 단반경에 해당되는데, 만약 MINOR 없이 MAJOR만 사용할 경우에는 그 길이를 반영으로 하는 원이 그려지게 됩니다. 다만 이러한 길이 값들은 좌표계가 경위도 기반인 상태에서 유효하기 때문에 /DATA가 사용되었습니다. 그리고 FILL_COLOR 속성을 사용하여 타원의 내부를 Blue 색상으로 채우면서, TRANSPARENCY라는 속성에 50이라는 값을 부여한 것이 눈에 띕니다. 이것은 구현된 타원형 폴리곤의 투명도에 해당되며, 0이면 완전 불투명이고 100이면 완전 투명이 됩니다. 50이라면 반투명 정도라고 볼 수 있을겁니다.


ell1 = ELLIPSE(126.97, 37.57, MAJOR=7, MINOR=6, /DATA, $

  FILL_COLOR='blue', TRANSPARENCY=50)

ell2 = ELLIPSE(116.38, 39.92, MAJOR=7, MINOR=6, /DATA, $

  FILL_COLOR='blue', TRANSPARENCY=50)

ell3 = ELLIPSE(121.50, 31.20, MAJOR=7, MINOR=6, /DATA, $

  FILL_COLOR='blue', TRANSPARENCY=50)


이렇게 ELLIPSE 함수를 사용하여 세 개의 지점들에 대한 타원들을 그려보면 서로가 조금씩 겹치게 됩니다. 그리고 겹치는 부분은 투명도가 더 낮아지는 효과까지도 얻을 수 있습니다. 다음 그림은 그 결과입니다.



그리고 대륙 경계선 내부를 다음과 같은 방식으로 특정 색상으로 채워넣은 상태에서 그려도 타원들의 겹치는 부분에 대한 투명도 처리는 별 지장없이 구현이 됩니다. 다음 그림은 이와 같이 대륙 경계선 내부를 특정 색상으로 채워넣은 상태에서 동일한 방식의 그림을 그려본 결과입니다.


mc = MAPCONTINENTS('GSHHS_i_L1.shp', THICK=2, FILL_COLOR='gold')



참고로, 여기서 사용된 대륙 경계선 자료는 위의 웹페이지에서 최근에 다운로드한 GSHHS 2015년 1월 1일 현재의 자료임을 밝혀둡니다. 어쨌든, 이와 같은 방법으로 타원형 폴리곤에 대하여 투명도 설정을 간편하게 할 수 있기 때문에, 이렇게 겹치는 부분들이 더 짙어지는 효과까지도 자연스럽게 얻을 수 있다는 장점이 있습니다. 여기서 사용한 경계선 자료 파일들도 이 게시물에 함께 첨부해두겠습니다.


GSHHS_i_L1.shp

GSHHS_i_L1.shx


지금까지 여러가지 방법으로 지도의 세부적인 특성들을 설정하고, 비교적 간단한 형태의 중첩 표출 방법들도 살펴보았습니다. 이어지는 다음 회차 게시물부터는 2차원 자료를 지도상에 중첩하여 표출하는 방법들에 대하여 구체적으로 살펴볼 생각입니다.



GSHHS_i_L1.shp
6.95MB
GSHHS_i_L1.shx
0.25MB
반응형