IDL/Mapping

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

이상우_idl 2015. 3. 16. 16:11
728x90
반응형

지도상에서의 좌표는 경도(Longitude)와 위도(Latitude)로 표시됩니다. 우리가 앞서 봤던 예제들을 보면 표출되는 지도에서는 항상 경도 및 위도를 나타내는 선들이 존재합니다. IDL에서는 이러한 선들을 Map Grid라고 합니다. 이러한 격자선들을 표출하는데 있어서도 다양한 속성들을 조정함으로써 우리의 목적에 맞는 지도를 얻을 수 있습니다. 그 방법들을 이번 게시물에서 예제들을 통하여 살펴보기로 하겠습니다. 이를 위하여 앞선 게시물이었던 [6]에서 Lambert Conformal Conic 투영법을 사용하여 지도를 구현했던 다음과 같은 예제코드를 다시 보면서 설명하기로 합니다.


win = WINDOW(DIMENSIONS=[800, 500])

m = MAP('Lambert Conformal Conic', LIMIT = [20, 100, 60, 160], $

  STANDARD_PAR1=30, STANDARD_PAR2=60, $

  FILL_COLOR='Dodger Blue', ASPECT_RATIO=0, MARGIN=0.05, /CURRENT)

mc = MAPCONTINENTS(FILL_COLOR='Gold', THICK=2)


앞서 이렇게 그려졌던 지도상의 경위도 좌표선들에 대한 여러가지 속성들을 조정해보겠습니다. 먼저 선들의 간격입니다. 이 예제코드를 실행하여 그렸던 그림을 보면 경도 및 위도 선들의 간격이 10도로 되어 있는 것을 볼 수 있었습니다. 이 간격을 5도로 재설정하고자 합니다. 이를 위해서는 그려져있는 지도의 Map Grid에 해당되는 속성을 먼저 뽑아낸 후, 이 속성에 대한 하위 속성들을 조정해야 합니다. 설명이 약간 복잡해 보이는데 실제로는 그리 복잡하지는 않습니다. 위의 내용에 바로 이어서 다음과 같은 내용들을 추가하면 됩니다.


mg = m.MapGrid

mg.Grid_Latitude = 5

mg.Grid_Longitude = 5

mg.Linestyle = 1


추가된 내용의 첫번째 줄에서는 이전에 MAP 함수로 생성된 개체인 m으로부터 MapGrid라는 내부 속성을 추출하여 mg라는 이름의 새로운 개체로 일단 저장을 해놓습니다. 그런 다음 이 mg라는 개체의 세부 속성들인 Grid_Latitude, Grid_Longitude의 값을 5로 설정하는데, 이 속성들은 각각 위도의 간격 및 경도의 간격을 의미합니다. 그리고 Linestyle이라는 세부 속성의 값을 1로 설정하여 경위도선들을 기존의 실선 대신 점선으로 그려보려고 합니다. 이와 같은 내용의 예제코드를 실행하면 다음 그림과 같이 경도 및 위도 선들을 점선으로 긋고 선들 사이의 간격도 기존의 10도에서 5도로 변경된 결과를 얻게 됩니다. 앞선 게시물인 [6]에서 그렸던 그림과 비교하면 그 차이를 바로 확인할 수 있습니다.



사실 이러한 MapGrid 속성의 하위에 속하는 세부적인 속성들의 종류도 상당히 많습니다. 구체적으로 어떤 세부 속성들이 지원되는가를 보려면 IDL 도움말에서 MAPGRID라는 내장함수에 대한 설명을 찾으면 됩니다. 그런데 이 대목에서 좀 혼동이 올 수 있습니다. 앞서 언급했던 MAP으로 생성된 개체의 속성인 MapGrid는 무엇이고, 방금 언급된 독립된 내장함수로서의 MAPGRID는 또 무엇인가가 좀 혼란스럽습니다. 그냥 사용하는 입장에서 쉽게 생각하려면 둘 다 동일하다고 봐도 됩니다. 즉 MAP 함수로 생성된 개체 자체는 내부적으로 무조건 MapGrid라는 속성을 갖게 되는데, MAPGRID라는 함수를 따로 사용해서 지도상에 또 다른 경위도 격자선 체계를 하나의 새로운 개체로서 추가할 수도 있습니다. 아마 다음 예제를 통해서 이 요상한 얘기에 대한 좀 더 이해가 쉬워질 수도 있을 것 같습니다.


이번에는 위의 내용에 이어서 새로운 경위도선을 첨가를 해보려고 합니다. 앞서 그려진 그림의 지도에서는 경위도 간격이 5도로 되어 있는데요. 여기서 국부적인 영역을 정하고 이 영역내에서만 경위도의 간격이 2.5도가 되도록 만들어보려고 합니다. 이를 위해서는 다음과 같이 MAPGRID 함수를 사용하여 독립적인 경위도선 개체를 추가적으로 생성해주면 됩니다.


mg_new = MAPGRID(LONGITUDE_MIN=120, LONGITUDE_MAX=140, $

  LATITUDE_MIN=30, LATITUDE_MAX=50, GRID_LONGITUDE=2.5, $

  GRID_LATITUDE=2.5, COLOR='red', LABEL_SHOW=0, THICK=2)


이 내용에 의하여 추가된 경위도선의 경우 기존의 것과 독립적인 특성을 갖도록 했습니다. 구체적으로 보면 경도 및 위도의 간격을 2.5도로 설정한 것외에도, 경도 및 위도의 범위를 _MIN, _MAX 등의 속성들을 통하여 따로 설정했고, 색상 및 두께도 독립적인 특성을 갖도록 하였습니다. 그리고 LABEL_SHOW라는 속성에 대하여 0이라는 값을 부여하였는데, 이것은 독립된 경위도선에 대해서 경도 및 위도 값 라벨들이 표시되지 않도록 한 것입니다. 그림이 너무 복잡해지지 않도록 하기 위하여 이러한 설정을 하는 것도 가능합니다. 이와 같은 내용까지 실행되면 다음 그림과 같이 추가적으로 경위도선 격자(Grid)가 그려지게 됩니다.



이번에는 경도와 위도의 값 라벨들의 위치를 조정해보려고 합니다. 앞서 얻었던 그림의 모습을 보면 다 괜찮은데 경도와 위도의 값을 나타내는 라벨 문자들이 모두 지도상의 가운데에 위치해 있습니다. 만약 일반적인 XY좌표 기반의 그래프를 그릴 때처럼 이 라벨 문자들을 경도축 및 위도축 외곽에 위치시키고자 한다면, 역시 MapGrid의 하위 속성인 LABEL_POSITION의 값을 조정해주면 됩니다. 이 속성의 디폴트값은 0.5입니다. 이 상태라면 좌표계의 한가운데를 따라서 값 문자들이 위치하게 됩니다. 즉 가운데 정렬이 되는 셈입니다. 하지만 이 값을 0으로 설정하면 어떻게 될까요? 그렇습니다. 바로 좌측 정렬이 되겠지요. 어쨌든 이러한 설정을 위해서는 위의 내용에 이어서 다음과 같은 내용만 추가하면 됩니다. 이렇게 실행하면 그 결과는 다음 그림과 같습니다.



이 그림을 보면 경도 및 위도 값을 나타내는 라벨 문자들이 모두 지도의 외곽으로 벗어나 있습니다. 구체적으로 보면 경도의 값 문자들은 맨 아래로 그리고 위도의 값 문자들은 맨 왼쪽으로 조정되어 있습니다. 만약 LABEL_POSITION의 값을 1로 하면, 반대로 됩니다. 즉 경도의 값 문자들은 맨 위로 그리고 위도의 값 문자들은 맨 오른쪽으로 조정됩니다. 그런데 예를 들어 경도의 값 문자들은 맨 아래로 하되 위도의 값 문자들은 맨 오른쪽으로 위치시키려면, 경도 및 위도별로 따로 설정을 해야 합니다. 이러한 설정을 하는 방법은 다음과 같습니다.


mg_lon = mg.LONGITUDES

FOR i = 0, N_ELEMENTS(mg_lon)-1 DO mg_lon[i].LABEL_POSITION = 0

mg_lat = mg.LATITUDES

FOR i = 0, N_ELEMENTS(mg_lat)-1 DO mg_lat[i].LABEL_POSITION = 1


즉, MapGrid 개체의 하위 속성인 LONGITUDE 및 LATITUDE에 해당되는 개체들을 모두 추출한 후 각각에 대하여 LABEL_POSITION이라는 세부속성을 조정하는 방식입니다. 이를 위하여 반복문이 사용되었습니다. 이와 같은 방식을 통하여, MapGrid 개체의 속성은 일괄조정도 가능하지만 경도 및 위도 각각에 대한 개별적 조정도 가능하다는 것을 확인할 수 있습니다. 어쨌든 이와 같이 라벨 문자들의 위치를 조정한 결과는 다음 그림과 같습니다.



사실 MapGrid의 하위에 속하는 세부적인 속성들의 종류는 앞서 언급한 것들외에도 선의 두께, 색상, 스타일 등을 비롯하여 여기서 일일이 언급하기 힘들 정도로 상당히 많습니다. 따라서 보다 더 자세한 내용은 IDL 도움말의 MAPGRID 함수에 관한 내용을 직접 참조하여 확인해보고 그 중 필요한 것을 골라서 사용하는 것이 바람직할 것으로 생각됩니다.

반응형