GMT

보간을 통한 그리드 파일 생성 [surface]

작성자
heukchoo
작성일
2021-01-17 20:22
조회
481
 

GMT에서는 지형도와 같은 공간정보 영상을 만들때 netCDF 포맷의 바이너리 격자파일(그리드 파일)을 사용한다.

GMT에서 제공하는 그리드 파일 제작 툴은 surface, xyz2grd, nearneighbor 세 가지 이다.

 
이번 페이지에서는 surface를 설명한다.

 


 

본론에 앞서 맵 제작이 가능한 xyz 파일을 다운로드하는 방법을 설명한다.

미국 캘리포니아 샌디에고 소재의 스크립스 해양연구소에서는 미국 해양관측 위성인 Topex로 측량한 전지구의 고도자료(Topography)와 중력자료(Gravity)를 제공한다.

자료는 아래의 위치에서 위경도 범위를 입력하고 고도 또는 중력을 선택하여 다운받을 수 있다.
자료의 해상도는 약 1분 이다.

http://topex.ucsd.edu/cgi-bin/get_data.cgi

 
본 설명의 예시자료는 128/129/35/36 범위의 고도자료를 사용하였다.

 




Synopsis

gmt surface [ table ] -Goutputfile.nc -Iincrement -Rregion [ -Aaspect_ratio|m ] [ -Cconvergence_limit[%] ] [ -Lllower ] [ -Luupper ] [ -Mmax_radius ] [ -Nmax_iterations ] [ -Q ] [ -Ssearch_radius[m|s] ] [ -T[i|b]tension_factor ] [ -V[level] ] [ -Zover-relaxation_factor ] [ -aflags ] [ -bibinary ] [ -dinodata ] [ -eregexp ] [ -fflags ] [ -hheaders ] [ -iflags ] [ -r ] [ -:[i|o] ]






surface는 스플라인 함수를 사용하여 데이터가 비어있는 공간을 보간한다.
이를 이용하여 해상도가 낮은 공간 정보도 보간을 통해 해상도를 높일 수 있다.

예로 격자 해상도 1m인 데이터를 surface에서 -I 옵션으로 격자 해상도를 0.1m로 세분하여 그리드 파일을 만들면 1개 격자가 100개 격자로 세분 되며, 1개의 z 값이 100개의 값으로 보간되어 채워진다.

보간 과정에서 z값의 굴곡 정도를 조정(텐션값 조정) 할 수 있다.


surface는 blockmedian 등으로 제작한 균일한 밀도의 xyz 자료를 입력해야만 aliasing 등의 문제를 해결할 수 있다.
(예시의 Topex 자료는 약 1분 간격의 균질한 자료로서 그대로 사용함)

 
필수 옵션은 -G, -I, -R로서 -R은 공간 범위이다.

-G 옵션은 제작할 그리드 파일명을 지정한다. 확장자는 무관하나 nc 또는 grd 를 명시적으로 사용한다.

-I 옵션은 격자의 간격(혹은 크기) 이다.
단위는 분(m), 초(s), 미터(e), 피트(f), 킬로미터(k), 마일(M), 해리(n), US 측량 피트(u)가 있으며, 지정하지 않으면 도를 사용한다.


-T는 스플라인 곡선의 굴곡 정도를 조정하는 텐션 값을 설정한다.
'-T1' 과 같이 0~1사이의 값으로 지정한다.
텐션값이 크면 휘어진 줄을 당겨서 펴듯이 편평하게 만드는 효과를 보인다.

텐션 값이 과하면 z 값이 주변값과 변별력이 떨어지는 문제가 발생할 수 있다.
반대로 텐션값이 작으면 불필요한 굴곡이 발생할 수도 있다.

텐션이 부족하거나 과하면 실제의 형상을 잘 표현하지 못하거나 왜곡하게 된다.
따라서 자료의 종류에 따라 적정한 값을 설정해야 한다.

경험적으로 중력자료는 0.25, 경사가 급한 고도자료는 0.35, 공간적으로 균일한 자료는 1이 적정하다.


다음은 텐션값 차이를 보여주기 위한 스크립트와 결과이다.
격자 해상도 1m 데이터를 surface로 0.2m 해상도의 그리드 파일로 제작하였다.

스크립트의 makecpt, grdimage 등은 추후 페이지에서 설명한다.
makecpt -Ctopo -T-100/1200/10 > colors.cpt

gmt surface data.txt -Gdata.grd -R128/129/35/36 -I0.2m -T1

gmt grdimage data.grd -JM10c -Ccolors.cpt -B20m -K > data.ps

gmt grdcontour data.grd -J -C200 -O >> data.ps
 

 
gmt surface data.txt -Gdata.grd -R128/129/35/36 -I0.2m -T0 gmt surface data.txt -Gdata.grd -R128/129/35/36 -I0.2m -T1
 

결과에서 텐션값이 1인 경우 등치선의 세세한 커브(Curve)가 사라졌음을 알 수 있다.

위 스크립트 처럼 surface 는 그리드 파일만 만드는 명령이다.

차차 grdimage 등과 함께 공부하여 맵을 그리는 방법을 터득하면 재미있을 것이다.

또한 개발되고 있는 GMT6 버전에서 -M 옵션을 사용하여 데이터가 없는 구간을 NaN 처리하는 기능을 개발하는 것으로 보인다.
기대해 볼만 하다.
전체 0