绘制图中图

如果绘制的地图区域范围很小,读者可能不清楚所画区域的位置。 这时,往往需要在地图的一角,绘制一个图中图表示区域的位置。

解决这个问题的整体思路应该是在原图的合适位置画出一个底图,然后在这个新底图上绘图。 要实现这个思路,有几个问题需要解决:

  1. 把新底图放到原图的正确位置
  2. 新底图上的绘图命令必须要能知道新底图的位置信息

gmt 的 psbasemap 模块可以实现这一个需求。 绘图脚本:

#!/bin/bash

PS=draw-inset-map.ps
R=139.2E/140.5E/34.8N/36N
gmt pscoast -R$R -JM18c -Baf -BWSne -Df -W2p -A1000 -Glightbrown -Sazure1 --FORMAT_GEO_MAP=dddF -P -K > $PS
gmt psbasemap -R -J -DjTL+w6c/7c+o0.2c/0.2c+stmp -F+gwhite+p1p+c0.1c+s -O -K >> $PS

read x0 y0 w h < tmp
# x0 和 y0 是图中图左下角的坐标
# w 是图中图的宽度
# h 是图中图的高度
gmt pscoast -R129E/146E/30N/46N -JM$w -Df -W1p -A1000 -Glightbrown -Sazure1 -K -O -X$x0 -Y$y0 >> $PS
gmt psbasemap -R -J -D$R -F+p2p,blue -O >> $PS
gmt psconvert $PS -A -Tg
rm tmp gmt.history $PS

绘图效果如下:

东京湾

psbasemap 就是在地图上绘制一个新底图(map inset box)。 -D 选项就是指定新底图的位置,并输出新底图的位置信息,以便后续的命令能获得。 -F 选项则是为这个新底图绘制一个矩形的边界(使用 -D 选项后就必须使用 -F 选项)。 下面说明脚本中这两个选项的具体含义。

-DjTL+w6c/7c+o0.2c/0.2c+stmp

  1. -DjTL 定义的是图框放置的位置。TL 表示顶部的左边。 具体请读者了解 gmt 的定位概念
  2. +w6c/7c 表示图框的大小为 6 厘米乘以 7 厘米。
  3. +o0.2c/0.2i 设置图框水平偏离 0.2c,垂直偏离 0.2c。
  4. +stmp,把图中图的左下角的位置和尺寸输出到文件 tmp 中。后面绘制大地图需要使用其中的参数。

-F+gwhite+p1p+c0.1c+s

  1. +gwhite表示填充白色
  2. +p1p设置画笔的宽度为1p
  3. +c0.1c是图中图中的图形和边框之间的空隙间隔。
  4. +s绘制阴影

图中图内的内容就用 gmt 相应的模块绘制就是,和平时唯一的差别就是要根据 -D 选项输出的位置信息进行调整。

下一页
上一页