GMT 区域填色,判断点是否在多边形内
psxy
绘制多段数据,画出多个闭合的多边形:
gmt psxy xx.dat -Rg -JX15c/10c -Bx60 -By30 -W1p -L > test.ps
#xx.dat
>
40 20
80 20
80 60
20 60
>
130 10
120 35
160 20
170 -10
120 -30
>
230 10
240 25
220 40
240 5
290 -20
要实现区域填色,有两种方法,分别是使用
-G
选项和使用 -C
选项。
如果数据是单一则可以直接-Gred
##station data
103 13
104 15
105 16
107 18
# 第二种数据是分隔,xx.dat modify:
> -Gred
30 20
90 20
90 60
30 60
> -G0/100/20
120 10
150 35
180 20
160 -10
130 -30
> -G0/0/120
200 10
230 25
240 40
280 5
300 -20
可以使用 -C
选项指定要使用的 cpt 文件,且每段数据的头段记录中加上 -Zval
。
下面的命令中使用了增加了 -Ca.cpt
选项:
0 red
1 blue
2 200/0/20
3 0/0/120
4 100/100/100
#xx.dat改成
> -Z0
30 20
90 20
90 60
30 60
> -Z2
120 10
150 35
180 20
160 -10
130 -30
> -Z3
200 10
230 25
240 40
280 5
300 -20
判断点是否在多边形内
a.dat content
2 2
7 5
5 8
4 7
2 5
>b.dat content
1 1
3 3
5 5
7 7
4 6
6 8
6 2
#
gmt gmtselect points.xy -Fpolygon.xy
output:
3 3
5 5
4 6
#!/bin/bash
J=X10c/10c
R=0/10/0/10
PS=test.ps
gmt psbasemap -J$J -R$R -B1 -K > $PS
# 绘制多边形
gmt psxy polygon.xy -J$J -R$R -W2p -L -K -O >> $PS
# 绘制所有数据点:红色圆圈
gmt psxy points.xy -J$J -R$R -Sc0.2c -Gred -K -O >> $PS
# 绘制多边形内的数据点:蓝色三角
gmt gmtselect points.xy -Fpolygon.xy | gmt psxy -J$J -R$R -St0.8c -W2p,blue -K -O >> $PS
gmt psxy -J$J -R$R -T -O >> $PS
#刷选不在多边形内
$ gmt gmtselect points.xy -Fpolygon.xy -If
1 1
7 7
6 8
6 2