✍️ 陈箫翰 • 📅 2025-08-24

# 绘制等值线与带标注线段进阶示例

本例采用 grdcontour 和 plot 中论述的多个标注位置确定方法和属性设置，绘制了一幅比较复杂的综合性图件。 假设在 Canary Islands 发生了灾难性滑坡， 图件显示了所引发的的海啸的走时(以小时为单位)。 根据海啸走时和海底地形绘制了彩图，对等值线和线条进行了标注。完整的脚本如下：

    #!/usr/bin/env bash
    gmt begin ex016
        R=-R-85/5/10/55

        gmt set FORMAT_GEO_MAP ddd:mm:ssF FONT_ANNOT_PRIMARY +9p FONT_TITLE 22p
        # 生成一条纽约到 Canary Islands 的测线
        gmt project -E-74/41 -C-17/28 -G10 -Q > great_NY_Canaries.txt
        # 生成一条纽约到巴黎的测线
        gmt project -E-74/41 -C2.33/48.87 -G100 -Q > great_NY_Paris.txt
        # 计算纽约到 Canary Islands 的距离，单位 km
        km=$(echo -17 28 | gmt mapproject -G-74/41+uk -fg --FORMAT_FLOAT_OUT=%.0f -o2)

        # 生成一个离散的 CPT 文件，用来对3小时以内、3到6小时、以及6小时以上的海啸抵达时间区域进行填色
        gmt makecpt -Clightred,lightyellow,lightgreen -T0,3,6,100 -N
        # @App_O_ttt.nc 是 GMT 服务器上的远程示例网格文件，记录了海啸抵达时间。其经纬度范围为 $R
        # grdgradient 使用 $R 将地形起伏数据 @earth_relief_05m_g 裁剪到和 @App_O_ttt.nc 相同范围
        # grdimage 使用地形起伏数据对海啸抵达时间数据进行了调制。详细请参考示例《使用地形起伏数据对其他非地形起伏数据进行明暗调制》
        # -nc+t1 选项用于控制网格数据重采样过程中的插值算法。详细请参考 https://docs.gmt-china.org/latest/option/n/
        gmt grdgradient @earth_relief_05m_g $R -Nt1 -A45 -Gtopo5_int.nc
        gmt grdimage @App_O_ttt.nc -Itopo5_int.nc -C $R -JM5.3i -nc+t1
        # 绘制等值线并在指定位置进行标注
        gmt grdcontour @App_O_ttt.nc -C0.5 -A1+u" hour"+v+f8p,Bookman-Demi \
            -GL80W/31N/17W/26N,17W/28N/17W/50N -S2
        # 绘制纽约到 Canary Islands 的测线
        gmt plot -Wfatter,white great_NY_Canaries.txt
        # 绘制海岸线，填充陆地颜色，添加标题
        gmt coast -B20f5 -BWSne+t"Tsunami travel times from the Canaries" -N1/thick \
            -Glightgray -Wfaint -A500
        # convert -E 提取数据的第一条和最后一条数据记录，在这里即为提取纽约、巴黎、Canary Islands 的经纬度并绘制五角星
        gmt convert great_NY_*.txt -E | gmt plot $R -Sa0.15i -Gred -Wthin
        # 使用 plot -Sq 绘制 Canary Islands 到纽约到测线，测线上添加一段固定的字符串显示两地间的距离
        gmt plot -Wthick great_NY_Canaries.txt \
            -Sqn1:+f8p,Times-Italic+l"Distance Canaries to New York = $km km"+ap+v
        # 绘制巴黎到纽约到测线
        gmt plot great_NY_Paris.txt -Sc0.08c -Gblack
        # 使用 plot -Sq 在测线上每隔 1000km 绘制一个标注，显示距离。
        gmt plot -Wthinner great_NY_Paris.txt -SqD1000k:+an+o+gblue+LDk+f7p,Helvetica-Bold,white
        # 添加文字
    cat << EOF | gmt text -Gwhite -Wthin -Dj0.1i -F+f8p,Bookman-Demi+j
    74W	41N	RT	New York
    2.33E	48.87N	CT	Paris
    17W	28N	CT	Canaries
    EOF
    gmt end show