[M_Map Tutorial] M_Map Projection

SEANDOPREP·2023년 11월 3일
0

[M_Map Tutorial]

목록 보기
1/4

M_Map Tutorial 시리즈는 M_Map 공식 User Guide를 기반으로 작성되었음을 미리 밝힙니다.

이번 포스트에서는 Projection에 대해 알아보겠습니다. M_Map의 설치 방법이 궁금하신 분들은 지난 포스트를 참고해주시길 바랍니다.

What's Projection?

일반적으로, 지구와 같은 3차원 타원체(구에 매우 가까운)를 2차원 평면에 나타내는 것을 Map projection이라고 부릅니다. 이때, 어떤 projection 방법을 선택하는가에 따라서 왜곡되는 위치와 그 정도가 달라지는데요. 3차원 물체를 2차원으로 축소하는 과정에서 어느 정도의 왜곡은 피할 수 없기에, 우리가 관심있는 영역을 잘 표현하기 위해서는 적절한 projection 방법을 선택해야 합니다.

M_Map에서는 아래와 같이 굉장히 많은 projection 방법을 제공합니다.


Stereographic
Orthographic
Azimuthal Equal-area
Azimuthal Equidistant
Gnomonic
Satellite
Albers Equal-Area Conic
Lambert Conformal Conic
Mercator
Miller Cylindrical
Equidistant Cylindrical
Cylindrical Equal-Area
Oblique Mercator
Transverse Mercator
Sinusoidal
Gall-Peters
Hammer-Aitoff
Mollweide
Robinson
UTM

M_Map에서는 두 가지 방법을 통해 위의 Projection들이 각각 어떤 특징을 가지는지 알 수 있습니다.

먼저, m_proj('set', '투영 방법') 명령어는 투영 방법에 따라 조정할 수 있는 기본 하이퍼파라미터에 대한 정보를 제공해줍니다.

% Example1

m_proj('set','stereographic'); 

[return]
'Stereographic'                                   
<,'lon<gitude>',center_long>                      
<,'lat<itude>', center_lat>                       
<,'rad<ius>', ( degrees | [longitude latitude] )>
<,'rec<tbox>', ( 'on' | 'off' )>   

두 번째로, m_proj get 명령어는 현재 설정한 Projection의 정보를 알려줍니다.

% Example2

m_proj('sinusoidal');
m_proj get

[return]
Current mapping parameters -
Projection: Sinusoidal  (function: mp_tmerc)
longitudes: -90  30 (centered at -30)    
latitudes: -65  65             
Rectangular border: off    

m_proj 명령어는 projection을 초기화하는 데에 사용됩니다. 관심있는 지역에 적절한 projection 방법을 찾았다면, 위의 두 명령어를 활용하여 초기화 방법을 파악하고 본인이 원하는 설정으로 초기화를 해주면 됩니다.

List of Projection

각 Projection의 특징들을 조금 더 자세히 알아봅시다.

Azimuthal projections

이름에서도 알 수 있듯이, Azimuth angle(방위각, meridian angle)을 기준으로 하는 projection 방법입니다. 따라서, 중심에서 다른 모든 점들로의 방향, 또는 방위각이 정확하게 표현되는 특징을 가지며 이 방법을 통해 만든 지도들은 대부분 원형 경계를 가지고 있습니다. 아래의 파라미터들은 Azimuthal projection map의 중심점을 특정하는 데에 사용됩니다.

  1. 위경도
<,'lon<gitude>',center_long>
<,'lat<itude>', center_lat> 

중심 점의 위도 및 경도입니다. 지정한 경도가 지도의 중심을 수직으로 가로지르는 기준선이 됩니다.

  1. 지도 반경
<,'rad<ius>', ( degrees | [longitude latitude] )> 

중심 점으로부터 얼마나 떨어진 영역까지 보여줄지를 설정할 수 있습니다. 계산은 극좌표계를 기준으로 하는데요. 예를 들어, 90을 위도 값에 넣어주면 중심을 기준으로 90도씩 멀어지니 반구(hemisphere)만큼 표현할 수 있게 됩니다.

  1. 지도 경계
<,'rec<tbox>', ( 'on' | 'off' | 'circle' )> 

지도의 경계를 특정합니다. on을 해주면 지도 경계가 사각형으로 설정됩니다.

  1. 회전
<,'rot<angle>', degrees CCW> 

중심이 되는 경도선을 회전시킵니다. 입력한 각도만큼 중심경도선이 반시계 방향으로 회전합니다.

아래는 Azimuthal projections에 속하는 projection들 입니다.

Stereographic

중심점을 중심으로 각도는 정확하게 반영되지만, 실제 면적에 약간의 왜곡이 존재하게 되는 투영법입니다. 극 지역을 표현할 때 주로 사용됩니다.

Orthographic

각도와 면적이 실제와 약간 차이가 있습니다. 그러나, 지구를 밖에서 바라보는 시점으로 지구를 표현할 수 있습니다. M_Map의 로고 역시 이 투영법으로 제작되었네요.

Azimuthal Equal-Area

이름에서도 알 수 있듯이, 면적 크기는 보존합니다만 각은 보존하지 못합니다.

Azimuthal Equidistant

면적과 각 모두 보존하지 않지만, 중심점을 기준으로 한 거리 및 방향이 같은 투영법입니다.

Gnomonic

모든 선을 원의 일부로 표현하는 투영법입니다. 즉, 중심을 통과하는 직선(실제로는 곡선이지만 직선처럼 보이는)을 포함한 모든 선이 원 가장자리의 일부를 이루는데요. 이 방법은 지도의 가장자리에 큰 왜곡을 유발하기 때문에 지도 반경(radius)을 20~30도로 작게 유지해야 합니다.

Satellite

위성에서 지구를 바라보는 관점으로 지도 반경(radius) 대신 'altitude'를 입력해줘야 합니다.

<,'alt<itude>',altitude_fraction > 

예를 들어, altitude가 1이면 지구 반지름만큼 떨어진 거리에서 위성이 관찰한 지구의 모습을 보여줍니다.

Cylindrical and Pseudo-cylindrical Projections

커다란 원통으로 지구를 감싸는 원리로 지도를 표현하는 투영법입니다. 횡방향으로 넓은 지역, 또는 중위도 지역을 표현할 때 자주 사용됩니다. 커다란 원통의 옆면에 투영된 지도를 펼쳐 표현하기 때문에 지도 경계는 대부분 사각형입니다.

Mercator

원통의 옆면이 지구의 적도선과 접하도록 투영하는 방법으로, 적도와 가까울수록 정확도가 높다는 특징을 가집니다. 지도 경계는 위도와 경도로 지정해줄 수 있습니다.

<,'lon<gitude>',( [min max] | center)> 
<,'lat<itude>', ( maxlat | [min max])> 

위도를 지정할 땐 maxlat에 단일값을 입력함으로써 북반구, 남반구 쪽으로 같은 각도만큼 떨어진 경계를 표현할 수 있으며, min max로 불균일한 경계를 표현할 수도 있습니다. 다만 원문에 적도를 포함하지 않을 때는 사용하지 말라고 특히 강조되어있으니, 꼭 적도를 포함하는 위도 범위에만 적용하길 바랍니다.

Miller Cylindrical

Mercator와 유사한 특징을 가집니다. 세계 지도를 표현할 때 이쁘게 표현 가능하다는 것이 장점이며 대신 각도와 면적 모두 보존되지 않습니다.

Cylindrical Equal-Area

면적을 보존한 방법이지만...원문에서는 그냥 사용하지 않는 것을 추천합니다. 극 부분에서 오차가 너무 크기 때문에 그렇다고 하네요.

Equidistant cylindrical

역시 Mercator와 유사하지만, 거리를 보존합니다. 동일 간격으로 떨어진 위경도선으로 이뤄져 있으며 데이터를 빠르게 표현할 때 효과적이라고 합니다. Plate Carree라는 방식(grid를 생성하여 표현하는 방법)에 유리하다고 하네요.

Oblique Mercator

아래 그림처럼 투영하는 방법으로 기다란 해안선 지역이나 조금 이상하게(?) 생긴 지역을 대상으로 효과적입니다.

아래의 파라미터들로 투영 속성을 조정할 수 있습니다.

  1. 지도 경계
<,'lon<gitude>',[ G1 G2 ]>  
<,'lat<itude>', [ L1 L2 ]> 

두 개의 점인 (G1,L1)와 (G2,L2)가 각각 원의 왼쪽 상단과 오른쪽 하단을 의미합니다.

  1. 지도 크기
<,'asp<ect>',value> 

구와 원통의 접선에 수직인 방향으로 지도의 크기가 정해집니다. aspect는 가로세율 비율로, 1이면 사각형이며 그보다 작으면 더 얇은 지도가 됩니다. 1보다 큰 값을 넣을 순 있지만 권장하진 않습니다.

  1. 방향
<,'dir<ection>',( 'horizontal' | 'vertical' ) 

말 그대로 horizontal, vertical 둘 중 하나로 접선의 방향을 설정해줍니다.

Oblique Mercator를 사용할 때에는 가끔 오류가 생길 때가 있는데, 이럴 때는 위경도 부분을 약간 수정해주면 대부분 해결됩니다. 두 점이 잘못 설정되면 알고리즘 계산시에 불안정한 부분이 있어서 오류가 난다고 하네요. 오류가 나면 두 점을 약간만 수정해줍시다.

Transverse Mercator

아래와 같이 원통을 옆으로 눕힌 다음에 투영한 방법입니다. 앞서 소개한 Oblique 투영법의 특수한 case이기도 합니다. 주로 큰 스케일의 지도를 표현할 때 사용합니다.

아래의 파라미터들로 투영 속성을 조정할 수 있습니다.

  1. 지도 경계
<,'lon<gitude>',[min max]> 
<,'lat<itude>',[min max]> 

지도의 경계는 위처럼 위경도를 경계로 표현할 수 있습니다.

<,'rec<tbox>', ( 'on' | 'off' )> 

또한, rec 속성에 'on'을 넣어줌으로써 정확한 사각형으로도 표현가능합니다.

  1. 중앙 경도선
<,'clo<ngitude>',value> 

일반적으로 중앙 자오선을 접선으로 설정하는 것이 옳지만, UTM과 같은 특정 시스템의 경우 지도 중심에 존재하지 않는 중심 경도선을 활용할 수 있기 때문에 중앙 경도선을 따로 지정할 수 있습니다. 아래의 UTM 부분을 참고합시다.

Universal Transverse Mercator (UTM)

기본적으로 속성은 Transverse Mercator와 유사합니다. UTM은 위도 차이가 별로 나지 않는 작은 지역을 대상으로 할 때 특히 효과적입니다. UTM은 지구 전체를 타원체로 간주하여, 방위각을 60개의 부분으로 나눈 뒤에 각 부분을 zone이라고 부릅니다.

<,'zon<e>', value 1-60> 
<,'hem<isphere>',value 0=N,1=S> 

위와 같이 설정해주지 않아도 알아서 계산되니 굳이 설정할 필요는 없습니다.

<,'ell<ipsoid>', ellipsoid>

타원체가 어떻게 생겼느냐에 따라 결과가 달라집니다. ellipsoid는 기본적으로 'normal'로 설정되어있으며(구) 다양한 타원체(ex. wgs84)를 적용할 수 있습니다. 특히 UTM은 위치를 표시할 때 다른 좌표계와는 다르게 easting-northing 방법을 사용하기 때문에 타원체의 모양을 적절하게 잘 설정해줘야 합니다. 이러한 특징 때문에 UTM을 사용할 때면 m_grid로 위경도 grid를 만드는 것이 권장됩니다. 아래 그림처럼 Grid를 만들어주면 좌표 계산 방법을 보다 직관적으로 잘 이해할 수 있습니다.

Sinusoidal

원기둥을 활용한 투영법과 유사하여 위도선이 평행하기 때문에 "pseudo-cylindrical"라고 불립니다. 그러나 자오선이 사인파처럼 휘어있어 동일 면적을 유지하는 투영법입니다.

Gall-Peters

위도선과 자오선이 모두 평행하지만, vertical scale이 왜곡되어 동일 면적을 유지하는 방법입니다. 극으로 갈수록 왜곡이 심해지기 때문에 열대지역에서 주로 사용됩니다.

Conic Projections

이름 그대로 아래와 같이 삼각뿔에 지도를 투영한 방법입니다. 원뿔의 꼭짓점은 구의 회전축 상에 위치하며, 특정 위도와 접하거나 두 개의 다른 위도에서 구(지구)와 교차합니다. 동서방향으로 넓은 중위도 지역에 유용한 투영법입니다.

기본 속성은 다음과 같습니다.

  1. 지도 경계
<,'lon<gitude>',[min max]> 
<,'lat<itude>',[min max]> 

지도의 경계는 위처럼 위경도를 경계로 표현할 수 있습니다.

  1. 중앙 경도선
<,'clo<ngitude>',value> 

기본값은 주어진 경도 범위의 중간 지역이며, 범위 밖의 무작위 값으로도 설정가능합니다.

  1. 평행선
<,'par<allels>',[lat1 lat2]> 

특정 위도에 평행선을 그릴 수 있습니다. 기본적으로 위도 범위의 1/3, 2/3에 자동으로 그려지도록 설정되어 있습니다.

  1. 지도 경계
<,'rec<tbox>', ( 'on' | 'off' )> 

앞서 살펴본 지도 경계 속성과 같은 역할을 합니다. 표현할 지역이 넓지 않으면 'off'를 권장합니다.

  1. 타원체
<,'ell<ipsoid>', ellipsoid>

기본 설정은 구로 되어 있으나, 원하는 타원 자표계를 설정할 수도 있습니다. 이는, 좌표 변환을 하는 경우에만 유용하게 사용된다고 합니다(ex. 특정 격자형 좌표계 -> Conic projections)

  1. 좌표 변환시
<,'ori<gin>', [long lat]>
[long,lat]=m_xy2ll(x-false_easting,y-false_northing);

위 속성들은 좌표 변환을 진행할 때 고려할 수 있는 속성들입니다. 첫 줄은 기존 좌표계의(변환 전) 중심 점을 의미합니다. 이때, long lat은 false eastings, northings의 형태로 넣어줘야 하므로 두 번째 줄을 활용해서 변환하는 과정이 선행되어야 합니다.

Albers Equal-Area Conic

등면적이지만 각도를 유지하지 않습니다.

Lambert Conformal Conic

등각이지만 면적을 유지하지 않습니다.

Miscellaneous global projections

일반적으로 지구 전체를 나타낼 때 사용하며 오로지 예쁘게 보이기 위한 용도로 사용되는 Projection 방법들입니다. 개인적으로 논문 figure를 만들 때 자주 사용될 것 같진 않아서 설명은 생략하고, 추후에 Mollweide를 사용한 예제만 한 번 살펴보고 넘어가도록 하겠습니다.

Hammer-Aitoff

Mollweide

Robinson

Kavrayski VII

Robinson과 비슷하지만 더 단순하다고 합니다.

How can we choose appropriate Projection method?

본문에서는 적절한 투영 방법이 지도를 그리는 면적에 따라 달라진다고 말합니다.

전 세계

보통 전세계의 지도는 Mercator를 기본으로 하지만, Miller Cylindrical 지도는 극지방을 과도하게 강조하지 않기에 Mercator 대신 고려해볼만한 선택지입니다. 또 다른 방법으로는 Hammer-Aitoff와 Mollweide 방식이 있습니다만 적도가 지도 범위에 포함되지 않는다면 권장되진 않습니다. 이외에도, Robinson 투영법은 IPCC 리포트나 내셔널지오그래픽에도 쓰인 방식이라 이 방법도 고려해볼만 한 것 같네요.

북/남쪽 범위가 크지만 그다지 넓지 않은 곳

북아메리카, 남아메리카, 북대서양, 남대서양과 같은 지역에는 Sinusoidal, Mollweide 투영법이 좋습니다. 매우 큰 규모의 지도라면 Transverse Mercator도 효과적입니다.

반구 또는 반구 내 작은 지역

호주, 미국, 지중해, 북대서양에는 conic 투영법이 효과적입니다. conic 투영법의 종류는 거의 상관없다고 합니다.

위의 예시보다 작은 지역

위보다 작은 지역이라면 사실 투영법의 종류가 중요하진 않다고 합니다. 원문에서는 Oblique Mercator를 주로 추천하는데요. 이외에도 Transverse Mercator나 Conic 투영법도 좋다고 합니다. UTM과 Grid를 함께 사용하는 것도 좋은 방법이라고 언급하고 있습니다. 또한, 극지역에는 Stereographic 투영법이 주로 사용됩니다.

투영법이 어떻게 구성되어 있는지 알 수 있는 가장 좋은 방법은 기본 세팅되어 있는 지도를 그려보는 것입니다. 아래 코드를 활용한다면 원하는 지역에 알맞은 투영법을 찾기 보다 쉬울 것 같네요.

m_proj('stereographic');  % Example for stereographic projection
m_coast;
m_grid;

Map scale

M_Map은 보통 현재 사용하고 있는 축을 기준으로 축척을 맞추지만, 보다 멋진 그림을 그리기 위해 축척을 임의로 조정해야만 하는 경우도 있습니다.

m_scale(250000);

위의 코드를 활용하면 축척을 1:250000으로 설정해줍니다. 만약 현재 축척을 알고 싶다면, 매개 변수 없이 m_scale을 호출하면 해당 값이 계산되고 반환됩니다. 또한 기본 축척으로 돌아가고 싶다면 m_scale('auto')를 입력하면 됩니다.

Map scale을 마지막으로 이번 포스트를 마치겠습니다. 개인적으로 하나하나 다 외울 필요는 전혀 없을 것 같고, 그냥 필요할 때 하나씩 찾아보는 용도로 이 글을 사용하시면 좋을 것 같네요. 원래 이 뒤에 Map coordinate system과 관련된 예제를 실으려고 했으나 글이 너무 길어진 것 같아 다음에 따로 다루도록 하겠습니다. 다음에는 Coastlines and Bathymetry에 관한 글로 다시 돌아오겠습니다. 읽어주셔서 감사합니다.

profile
SATELLITE GEOSCIENCE & AI

0개의 댓글