GMT

라인, 폴리곤, 심볼 그리기 [psxy]

작성자
heukchoo
작성일
2021-01-17 20:15
조회
959
Synopsis

psxy [ table ] -Jparameters -Rwest/east/south/north[/zmin/zmax][+r] [ -A[m|p|x|y] ] [ -B[p|s]parameters ] [ -Ccpt ] [ -Ddx/dy ] [ -E[x|y|X|Y][+a][+cl|f][+n][+wcap][+ppen] ] [ -F[c|n|r][refpoint] ] [ -Gfill ] [ -Iintens ] [ -K ] [ -L[+b|d|D][+xl|r|x0][+yl|r|y0][+ppen] ] [ -N[c|r] ] [ -O ] [ -P ] [ -S[symbol][size[u] ] [ -T ] [ -U[stamp] ] [ -V[level] ] [ -W[pen][attr] ] [ -Xx_offset ] [ -Yy_offset ] [ -aflags ] [ -bibinary ] [ -dinodata ] [ -eregexp ] [ -fflags ] [ -ggaps ] [ -hheaders ] [ -iflags ] [ -pflags ] [ -ttransp ] [ -:[i|o] ]

 



맵에 정보를 표현하는 방법은 다양하다.

항로를 그릴때는 라인을 사용 할 수 있고 구역을 그릴때는 폴리곤을 사용한다.
여러 의미있는 위치를 표시하거나 위치의 값을 표현할 때는 심볼을 사용하기도 한다.
또한 수온 분포도와 같이 면적으로 정보를 나타내는 방법도 있지만 이것은 추후 설명하기로 한다.

 
라인, 폴리곤, 심볼을 그릴때 psxy를 사용한다.
심볼은 종류가 매우 다양하여 자세한 설명은 다음으로 미루고 이 장에서는 간단히 소개만 하겠다.

 



psxy 는 표출할 도형의 위치 등의 값을 입력 받아 도형을 그린다.
따라서 값 형태(자료포맷)와 입력 방법에 대해 먼저 설명한다.
설명을 간단히 하기 위해 라인의 값을 예시로 한다.

 
값의 형태(Format)

라인은 점들(Way points)을 이어서 그린다. 따라서 라인을 그릴때는 x, y 값을 여러개 입력한다. 맵에서는 x, y가 경도, 위도가 될 것이다.

다음은 2열 3행으로 된 입력 값의 형태이다.
120   30
130   30
140   20
 

1열은 x, 2열은 y 값이다.
열의 수는 정확히 맞아야 오류가 안난다. 열의 구분은 공백이며 공백의 개수나 종류(스페이스 또는 탭)는 상관없다.

하나의 행은 하나의 점(Way point)이다.
위 예시에서는 3개의 Way point들을 연결하여 라인을 그린다.
열과 달리 행의 수는 제한이 없다.

단, 라인은 당연히 2행 이상이여야 하고, 공백의 행이 있는 경우 오류가 발생한다.

심볼의 경우 입력 값의 형태(열 수)가 다양하다. 그에 대한 설명은 이 장의 심볼 옵션에서 간략히 소개하고 다음에 자세히 설명하겠다.

 
파일을 이용한 값의 입력(File input)

기본적으로 값은 파일로 작성하여 입력한다.

다음은 각 플랫폼에서 값 파일을 입력하는 방법이다. 예시로서 옵션값은 기입하지 않았다.
(공통) $ psxy   파일명.txt   -J   -R   -B   -W   >   테스트.ps

(윈도우) $ type  파일명.txt  |  psxy   -J   -R   -B   -W   >   테스트.ps

(리눅스) $ cat  파일명.txt  |  psxy   -J   -R   -B   -W   >   테스트.ps

파일명의 .txt는 확장자로서 어떤것이라도(.dat .csv .aaa) 상관없다.

GMT에서는 기본적으로 파일명을 옵션처럼 사용하여 파일값을 입력받는다.(공통)
따라서 옵션과 같이 파일명도 명령어와 꺾쇠(>) 사이의 어느 위치에 있어도 상관없다.

다른 방법으로는 파일을 읽어 명령에 전달할 수도 있다.
파일을 읽어 출력하는 윈도우 cmd 명령은 type 이고, 리눅스에서는 cat 이다.
파이프라인(|)은 앞의 출력 값을 다음 명령의 입력값으로 전달한다는 의미이다.

파이프라인을 사용하면 gawk 등을 통해 자료를 가공하여 입력하는것도 가능하다.


지금까지 설명한 방법으로는 하나의 파일로 하나의 라인만을 입력할 수 있다.
따라서 여러개의 라인을 그리기 위해서는 여러개의 파일을 만들어 각각 psxy 명령을 써서 그려야 하는 불편이 있다.

다음은 여러개의 라인을 꺾쇠(>)로 구분하여 하나의 파일로 작성하는 방법이다.
120   30
130   30
140   20
>
150   10
140   15
>
120   10
125   15
150   5

위의 예제는 3개, 2개, 3개의 Way point로 된 라인 3개를 꺾쇠로 구분했다.
GMT4에서는 꺽쇠를 사용하기 위해서는 -M 옵션을 사용해야 하지만 GMT5에서는 자동으로 인식하므로 -M 옵션이 필요 없다.

 
표준입력을 이용한 값의 입력(Std input)

매번 파일을 만들어 그리는 것은 번거로운 일이다.

따라서 리눅스에서는 다음과 같이 표준입력(명령 프롬프트에서 입력)으로도 값 입력이 가능하다.
(리눅스 )
psxy   -J   -R   -B   -W   <   EOF   >   테스트.ps
135   40
120   30
>
160   23
170   33
EOF

역 더블꺾쇠(<)는 앞의 명령에 값을 입력한다는 의미이다.

EOF는 End Of File의 약자로 관례적으로 사용하며 다른 문자도 상관없다.
'< EOF' 는 다음 행부터 EOF 문자가 나올때 까지의 값들을 입력한다는 의미이다.
즉, 마지막 행의 EOF가 나올때 까지 이전 값들을 입력 값으로 받는다.

위 방법은 명령프롬프트에 한 행씩 일일히 입력하거나 스크립트로 만들어 사용할 수 있다.


심볼의 경우 하나의 행으로도 값을 입력할 수 있으며, 파이프라인을 쓰면 간결하게 표현할 수 있다.
(윈도우) $ echo  10   50  |  psxy   -J   -R   -B   -W   >   테스트.ps

(리눅스) $ echo  "10   50"  |  psxy   -J   -R   -B   -W   >   테스트.ps

echo는 다음에 오는 값을 단순히 출력하는 명령이다.

윈도우와 리눅스는 echo 명령 사용방법이 약간 다르다.
리눅스는 큰따옴표로 값을 묶었고, 윈도우는 큰따옴표를 사용하지 않았음을 주의해야 한다.

 



다음으로 실제 psxy 사용에 필요한 옵션의 설명과 사용 예시, 결과를 소개한다.
(처음에는 옵션 설명을 간단히 훑어본 후, 예시를 보면서 옵션을 하나씩 테스트해 보는것이 좋을 것이다)

 
-J 옵션

도법을 설정한다. (도법 소개글 참고)
참고로 psxy는 그래프를 그리기 위한 옵션값(X)도 있다.

 
-R 옵션

맵을 그릴 구역 범위를 설정한다.
(경도 최소값/경도 최대값/위도 최소값/위도 최대값)

 
-B 옵션

도곽을 설정한다.(pscoast 참고)

 
-W 옵션

라인, 폴리곤 테두리, 심볼 테두리의 선 굵기, 색,  모양을 설정한다.
‘-W0.1p’로 0.1 포인트 굵기로 선을 설정한다.(c 센티미터 i 인치 p 포인트)
‘-W0.1p,0/0/0’과 같이 선 굵기 다음에 콤마로 구분하여 선 색을 설정할 수 있다.
‘-W0.1p,0/0/0,-’과 같이 선 색 다음에 콤마로 구분하여 선 스타일을 설정할 수 있다.(- 대시 . 도트)
대시 도트는 혼용하여 다양하게 표현할 수 있다.(..- 도트도트대시 .-. 도트대시도트 등)
‘-W0.1p+s’과 같이 선 굵기 다음에 +s 값을 붙이면 Way point를 연결할 때 라인을 곡선으로 그린다.(기본은 직선)

 
-L 옵션

라인의 시작 점과 끝 점을 연결하여 폴리곤으로 만든다.
-L 옵션을 사용하지 않고 라인 입력 값(Way point)을 폐합하도록 작성여도 된다.

 
-G 옵션

폴리곤, 심볼에 면의 색을 설정한다.(pscoast 참고)

 
-C 옵션

값에 따라 다양한 색을 표현하기 위한 cpt(Color Pallete tables) 파일을 적용한다.
z 값이 있는 심볼의 경우(-S 옵션 참고) ‘-C파일명.cpt’으로 미리 작성한 cpt 파일을 사용하여 심볼의 z값을 심볼의 색으로 표현할 수 있다.

cpt파일에 대해서는 추후 설명하겠다.

 
-I 옵션

색의 밝기를 표현한다. 밝기는 -1에서 1까지 상대적으로 표현하며 기본은 0이다.
‘-I0.5’같이 표현하면 밝기가 0.5배 밝아진다.

 
-S 옵션

심볼을 사용한다.  심볼의 입력 값은 라인과 같이 기본적으로 x, y의 2열을 사용한다.
‘-Sa10p’와 같이 옵션 뒤의 a는 심볼의 종류를 나타내고 그 다음은 심볼의 크기를 나타낸다.

심볼의 크기는 옵션에 직접 입력할 수도 있고 입력 값의 3번째 열로 설정할 수도 있다.
130   30   10

위의 예제는 x, y, z의 3열로 구성된 입력 값이다.
z 값은 수온, 밀도 등 다양한 값일 수 있다.
위 예제처럼 3열의 값을 입력하고 ‘-Sap’와 같이 크기값을 빼면 z 값을 심볼 크기로 읽어 10p 크기의 심볼을 그린다.

또한, ‘-Sa30p’과 -C옵션을 사용하면 30p 크기의 심볼을 그리고, 입력한 cpt 파일(미리 작성한)에서 10(z값)에 해당하는 색을 심볼 색으로 한다.
‘-Sap’의 형태로 크기과 색을 사용하려면 입력 값을 4열로 해야 한다.
3열인 z값은 심볼 색이고 4열이 심볼의 크기가 된다.

 
-D 옵션

라인이나 심볼의 위치를 설정한 임의의 값 만큼 이동시킨다.
‘-D1/2’와 같이 x/y offset 값으로 원하는 만큼 옮길 수 있다.

 
-A 옵션

투영법에 상관없는 선을 그린다. psxy가 기본적으로 그리는 선은 두 점을 잇는 선이라 해도 맵의 경우 투영법에 따라 곡선으로도 표현된다.
-A 옵션은 투영법에 상관없이 선을 완전한 직선으로 표현한다.
'-Ax' 과 같이 첨자를 붙일 수 있으며, 첨자 x를 붙일 경우 두 점을 이을때 x축을 따라 가로로 먼저 선을 긋고 y축을 따라 세로로 선을 그어서 계단 형태로 선을 그린다. 첨자 y는 반대로 y축을 먼저 선을 긋는다.

첨자 m은 두 점을 이을때 경도를 따라 먼저 선을 긋고 다음으로 위도를 따라 선을 긋는다. 첨자 p는 반대로 위도를 따라 먼저 선을 긋는다.

 
-t 옵션

PDF 포맷에서 사용할 투명도를 설정한다.
1~100의 값을 지정한다.

 



예제1 - 종류별 선 그리기

입력 파일 내용(line.txt)
3   4
17   4

스크립트(-J옵션의 X 도법은 차후에 설명한다)

gmt psxy   line.txt   -JX15c/5c  -R0/20/0/5  -Ba1f1WESN  -W1p   -K  > line_test.ps

gmt psxy   line.txt   -J  -R  -B  -W1p,red,-   -D0/-1   -K   -O  >> line_test.ps

gmt psxy   line.txt   -J  -R  -B  -W1p,0/255/0,.   -D0/-2   -K   -O  >> line_test.ps

gmt psxy   line.txt   -J  -R  -B  -W3p,0/0/255,-..   -D0/-3   -O  >> line_test.ps
 

결과



 
예제2 - 선 및 폴리곤 그리기

입력 파일(line2.txt)
2   3
4   4
6   3

스크립트
gmt psxy   line2.txt   -JX15c/5c  -R0/20/0/5  -Ba1f1WESN  -W1p  -K  >  line_poligon_test.ps

gmt psxy   line2.txt   -J  -R  -B  -W1p+s  -D4/0  -K  -O  >>  line_poligon_test.ps

gmt psxy   line2.txt   -J  -R  -B  -W1p  -L  -D8/0  -K  -O  >>  line_poligon_test.ps

gmt psxy   line2.txt   -J  -R  -B  -W1p  -L  -Gyellow  -D0/-2  -K  -O  >>  line_poligon_test.ps

gmt psxy   line2.txt   -J  -R  -B  -W2p,blue,-  -L  -Gyellow  -D4/-2  -K  -O  >>  line_poligon_test.ps

gmt psxy   line2.txt   -J  -R  -B  -L  -Gyellow  -D8/-2  -O  >>  line_poligon_test.ps
 

결과




예제3 - 심볼 그리기

입력 파일인 point.txt의 값(2   1   10   50)
gmt psxy   point.txt   -JX15c/2c  -R0/20/0/2  -Ba1f1WESN  -Sa10p  -W1p  -K  >  symbol_test.ps

gmt psxy   point.txt   -J  -R  -B  -Sap  -W1p  -D2/0  -K  -O  >>  symbol_test.ps

gmt psxy   point.txt   -J  -R  -B  -Sa20p  -W1p  -D4/0  -K  -O  >>  symbol_test.ps

gmt psxy   point.txt   -J  -R  -B  -Sa30p  -W1p  -Gred  -D6/0  -K  -O  >>  symbol_test.ps

gmt psxy   point.txt   -J  -R  -B  -Sa30p  -Gred  -W1p,blue,-  -D8/0  -K  -O  >>  symbol_test.ps

gmt psxy   point.txt   -J  -R  -B  -Sa30p  -Gred  -D10/0  -K  -O  >>  symbol_test.ps

makecpt  -T0/50/10  -Crainbow  >  test.cpt

gmt psxy   point.txt   -J  -R  -B  -Sap  -Ctest.cpt  -D12/0  -O  >>  symbol_test.ps

makecpt는 cpt 파일을 만드는 명령이다.(추후 설명한다)


결과



 
예제4 - 응용

입력 파일(lines.txt)
125   35
128   35
128   40
125   40
>
129   33
132   33
132   37
129   37

입력 파일(points.txt)
124   34   0
125   35   10
126   36   20
127   37   30
128   39   40
129   40   50
130   41   60

스크립트
gmt pscoast  -JM15c  -R122/133/32/43  -Ba1f20mWesN  -Ggray  -Df  -K  >  psxy_test.ps

gmt psxy   lines.txt   -J  -R  -B  -W1p,red,.-  -L  -K  -O  >>  psxy_test.ps

makecpt -T0/60/10 -Crainbow > test.cpt

gmt psxy   points.txt   -J  -R  -B  -Sa30p  -Ctest.cpt  -O  >>  psxy_test.ps
 

결과

전체 0