IDL/Mapping

Near Side Perspective 투영법을 이용한 지도 표출

이상우_IDL 2021. 10. 26. 13:53
728x90

IDL에서 지도를 표출하는데 있어서 여러가지 투영법(Projection)들이 존재하고 주요 투영법들에 관해서는 제가 이 블로그를 통하여 여러 차례 소개해드린 바 있습니다. 오늘은 지도 투영법들 중에서 Near Side Perspective라는 투영법을 사용하여 지도를 표출하는 방법 및 예제를 소개해보고자 합니다. 표출에 있어서는 NG 체계에서 MAP 함수를 사용하는 방법을 사용할 것입니다.

 

Near Side Perspective 투영법은 마치 지구로부터 일정 거리만큼 떨어진 상태에서 지구 구체를 바라보는 듯한 느낌으로 표출하는 방식인데요. 예전에 제가 DG 체계의 MAP_SET 명령에서 지원되는 Satellite라는 투영법에 관하여 소개하는 게시물을 올린 적이 있는데 그 투영법과 비슷합니다. 그리고 용어 사용에 있어서 제가 여기서는 Near Side Perspective를 NSP라고 부르겠습니다. 그러면 NG 체계에서 MAP 함수를 사용하여 NSP 투영법의 지도를 표출하는 방법을 예제를 통하여 살펴봅시다. 그 내용은 다음과 같습니다.

 

clon = 127.0
clat = 37.0
win = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)
m = MAP('Near Side Perspective', $
  CENTER_LONGITUDE=clon, CENTER_LATITUDE=clat, $
  HORIZON_COLOR='black', $
  TITLE='Near Side Perspective', MARGIN=0.1, /CURRENT)
mc = MAPCONTINENTS(COLOR='green')
m.MapGrid.Linestyle = 1
m.MapGrid.GRID_LONGITUDE = 15
m.MapGrid.GRID_LATITUDE = 15

 

이와 같이 MAP 함수에서 투영법의 이름을 'Near Side Perspective'라고 명시해야 합니다. 그리고 중심이 되는 경도 및 위도를 설정하기 위하여 CENTER_LONGITUDE, CENTER_LATITUDE 속성을 사용하였고, 여기서는 한반도 지역이 중심이 되도록 해보았습니다. 또한 윤곽선의 경우는 HORIZON_COLOR 속성을 통하여 검은 실선이 되도록 처리하였습니다. 그리고 맵 개체인 m의 격자선 관련 하위 개체인 MapGrid에 대한 설정을 추가하였는데, 경도 및 위도 격자선들의 간격은 GRID_LONGITUDE, GRID_LATITUDE 속성을 통하여 일률적으로 15도로 설정하고, 격자선의 형태는 LINESTYLE 속성을 통하여 점선(dotted line)이 되도록 하였습니다. 이러한 과정에 의하여 표출된 지도의 모습은 다음 그림과 같습니다.

 

 

이와 같이 마치 한반도 상공 아주 높은 고도에서 바라본 지구의 모습과 같은 느낌입니다. 그런데 여기서 좀 더 신경써야 할 부분은 바로 그림에서 표출되는 지구의 형태인데, 사실 NSP 투영법에서는 지구를 구체(Sphere)로 가정하는 것이 디폴트 설정입니다. 정확히는 장반경과 단반경이 모두 6370997m인 구체라는 전제하에 표출이 됩니다. 만약 구체가 아닌 타원체(Ellipsoid)의 형태가 되도록 표출하려면 어떻게 해야 할까요? 물론 이는 별도의 설정을 통하여 가능한데, 바로 SEMIMAJOR_AXIS 및 SEMIMINOR_AXIS 속성을 사용해야 합니다. 각 속성에 대하여 장반경 및 단반경 값을 m 단위로 명시해주면 됩니다. 실제로 지도 표출에 있어서 지구 타원체에 대한 다양한 기하학적 정의들(Clarke 1866, GRS 1980, WGS 84 등)이 존재합니다. 예를 들어 Clarke 1866 타원체로 표출하고 싶다면 위의 과정에서 MAP 함수가 사용된 부분을 다음과 같이 수정해야 합니다.

 

m = MAP('Near Side Perspective', $
  CENTER_LONGITUDE=clon, CENTER_LATITUDE=clat, $
  SEMIMAJOR_AXIS=6378206.4, SEMIMINOR_AXIS=6356583.8, $
  HORIZON_COLOR='black', $
  TITLE='Near Side Perspective', MARGIN=0.1, /CURRENT)

 

다만 이와 같이 장반경과 단반경이 미세하게 차이가 나는 타원체인 경우는 육안으로는 구체와 구분하기가 쉽지는 않습니다. 그래서 육안으로 확연히 구분될 정도의 타원체로 표출하기 위하여 다음과 같이 단반경의 값을 대폭 낮추는 다소 극단적인 설정을 시도해보았습니다.

 

m = MAP('Near Side Perspective', $
  CENTER_LONGITUDE=clon, CENTER_LATITUDE=clat, $
  SEMIMAJOR_AXIS=6378206.4, SEMIMINOR_AXIS=5356583.8, $
  HORIZON_COLOR='black', $
  TITLE='Near Side Perspective', MARGIN=0.1, /CURRENT)

 

물론 지구가 이렇게까지 극단적인 타원체인 것은 결코 아니겠지만, 어쨌든 이러한 기하학적 정의도 제대로 반영되는지 확인해보기 위한 것입니다. 이렇게 표출된 결과는 다음 그림과 같습니다.

 

 

이와 같이 타원체로서의 기하학적 특성은 제대로 반영이 된 것을 볼 수 있습니다. 하지만 이 그림에서는 한가지 문제점이 있는데, 윤곽선의 형태가 부드럽지 못하고 매우 거칠게 나타난다는 것입니다. 이것은 일종의 버그라고 보시면 됩니다. 사실 MAP 함수의 NSP 투영법에서 지구를 구체(Shpere) 외에 타원체(Ellipsoid)로도 정의할 수 있는 기능이 지원되기 시작된 것이 IDL 8.6.1 버전부터였는데, 도입된지 얼마 안된 기능이라서 그런 것인지는 모르겠으나 이 문제가 아직까지는 수정되지 못하고 있는 상태입니다. 아쉽지만 나중에라도 빨리 수정되길 기대해봅니다. 그래서 일단 차선책으로 그냥 윤곽선을 아예 표시하지 않는 것이 차라리 더 나을지도 모르겠습니다. 즉 다음과 같이 아예 HORIZON_COLOR 속성을 빼버리는 것입니다.

 

m = MAP('Near Side Perspective', $
  CENTER_LONGITUDE=clon, CENTER_LATITUDE=clat, $
  SEMIMAJOR_AXIS=6378206.4, SEMIMINOR_AXIS=5356583.8, $
  TITLE='Near Side Perspective', MARGIN=0.1, /CURRENT)

 

이렇게 하여 표출된 결과는 다음 그림과 같습니다.

 

 

물론 이것도 아주 만족스러운 상태라고 보기는 어렵겠지만 NSP 투영법에서 지구를 구체(Sphere)가 아닌 타원체(Ellipsoid)로 정의하여 표출할 경우에는 이러한 부분을 감안해야 할 것 같습니다. 그리고 NSP 투영법에서 또 하나 고려해야 할 요소는 바로 시점의 고도(Height)입니다. 즉 지구 표면으로부터 얼마나 높은 곳에서 바라보는 모습이 되도록 표출할 것이냐의 문제인데요. NSP 투영법에서 고도의 디폴트 값은 35800000m입니다. 즉 앞서 표출했던 결과들은 모두 디폴트 고도를 기준으로 한 것들입니다. 물론 고도의 값도 별도로 설정이 가능한데 이를 위해서는 HEIGHT 속성을 사용합니다. 그러면 HEIGHT 속성을 사용하여 고도를 디폴트 값이 아닌 다른 값으로 설정해봅시다. 이를 위하여 앞서 MAP 함수가 사용된 부분을 다음과 같이 수정해보겠습니다.

 

m = MAP('Near Side Perspective', $
  CENTER_LONGITUDE=clon, CENTER_LATITUDE=clat, $
  HEIGHT=10000000, $
  HORIZON_COLOR='black', $
  TITLE='Near Side Perspective', MARGIN=0.1, /CURRENT)

 

여기서는 지구를 다시 디폴트인 구체(Sphere)로 정의한 상태에서 고도의 값을 10000000m로 디폴트 값보다 대폭 낮춰서 설정해본 것입니다. 결과는 다음 그림과 같습니다.

 

 

이 그림을 앞서 우리가 맨 처음에 표출했던 그림과 비교해보면 고도가 달라졌음을 확인할 수 있습니다. 물론 디폴트보다 더 높은 고도로 설정하는 것도 HEIGHT 속성을 통하여 얼마든지 가능합니다.

 

오늘 소개한 Near Side Perspective 투영법을 이용한 지도 표출 방법에 관한 더 자세한 내용에 관해서는 IDL 도움말에서 MAP 함수에 관한 섹션을 참조하시면 됩니다. 다만 MAP 함수에 관한 내용뿐 아니라 MAP_PROJ_INIT 함수에 관한 섹션까지도 참조를 해야 합니다. 왜냐하면 제가 앞서 NSP 투영법에서 지구 구체의 기하학적 특성 및 고도 등에 관한 디폴트 수치들을 알려드렸는데, 이러한 구체적인 내용들은 MAP_PROJ_INIT 함수에 관한 섹션에서 기술되어 있기 때문입니다.

 

그러면 NSP 투영법에 관한 소개는 이 정도로 마치겠습니다. 그리고 NSP 투영법과 비슷하면서도 또 다른 GOES-R이란 투영법이 있는데, 이에 관한 내용도 준비가 되는대로 조만간 소개할 예정입니다.

LIST