在地图上绘制特定的经纬线

问题:想要在地图上只绘制某条经线或 / 和某条纬线,该如何实现?

GMT 中的 -B 选项可以用于控制是否绘制网格线以及网格线的间隔。如果精心设计 -B 选项中的网格间隔以及第一条网格线的偏移量,是可以使得整张图中只有一条经线或 / 和纬线并保证该经线 / 纬线落在合适的位置,但是这种方法相对来说比较麻烦且很难用于批量绘图。

最好的解决办法是,直接用 psxy 绘制经线和纬线。具体示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash
R=80/150/0/60
J=B116/20/25/45/15c
B=15
PS=map.ps
gmt psbasemap -J$J -R$R -B$B -P -K > $PS
gmt pscoast -J$J -R$R -Ggray -K -O >> $PS
echo 116.46 39.92 | gmt psxy -J$J -R$R -Sc0.5c -Gred -K -O >> $PS
##### 核心命令
``` bash
gmt psxy -J$J -R$R -W1p,blue,- -K -O -Am >> $PS << EOF
>
116.46 0
116.46 60
>
80 39.92
150 39.92
EOF
#####
gmt psxy -J$J -R$R -T -O >> $PS
rm gmt.*

以上代码的绘图效果如下:

最核心的命令已经在脚本中标出,该脚本中绘制了两条线段:

>
116.46 0
116.46 60
>
80 39.92
150 39.92

分别代表经线和纬线。

通常,GMT 会将两点按大圆路径连接起来。一条经线恰好是一个大圆路径,而一条纬线则不是大圆路径,因而需要做一些特殊的处理,即使用 -Am-Ap 选项。 -Am 使得两点之间连线时先沿着经线走再沿着纬线走,-Ap 选项使得两点之间连线时先沿着纬线走再沿着经线走。此处,用 -Am-Ap 效果都是一样的,可以试着把 -Am 选项去掉再绘图,来理解为什么要使用这个选项。

两条线段里,分别使用了 -R 选项中 Y 轴的范围和 X 轴的范围,所以以上代码完全可以通过定义变量来适应任意的情况。为了简单起见,就不再写更通用的版本了。