Ubuntu 16.04 + gmt 5.4 画某省地图(以安徽省为例)

操作环境:win10虚拟机上64位的Ubuntu16.04;GMT版本为5.4
GMT操作指导手册可以在这里下载:GMT中文社区

想在论文中画出某一区域的地图,在之前一篇博文中参考GMT中文社区绘制区域CORS站的站点分布和速度场图(脚本)已经记录过,现在想画出更好看的图,且达到以下要求:

  1. 带上地形起伏数据
  2. 带省级区域划分
  3. 只显示目标区域内的地形,以便突出研究区域内的地形变化
    类似这样的图:
    在这里插入图片描述
    首先要明确要达到以上目标要准备的画图数据:
  4. 地形起伏数据:http://mirrors.ustc.edu.cn/gmt/data/可以下载earth_relief_01d.grd 地形起伏数据
  5. 省级区域划分:详细的介绍GMT中文手册中有详细介绍,链接:GMT中文社区
  6. 单独某省的数据需要自己动手制作(下文介绍),再者只显示某一区域的地形需要用到GMT中psclip模块。

在下载了所有现成的数据之后,需要动手制作包含某一省的省界线的文件(本文中以安徽省为例,其他省份可以通过相同的方法制作)。现记录制作过程:在GADM数据下载上根据国家选择相应的文件进行下载(Country选择China,然后点击Geopackage按钮即可下载):
在这里插入图片描述
这里下载的压缩文件夹解压后是:gadm36_CHN.gpkg ,拷贝到虚拟机相应的文件夹中。这时候按照GMT中文手册中的说法安装GDAL(GDAL/OGR: 地理空间数据格式转换神器)并不能正确安装到2.4的版本,而是1.3版本,会导致后面转换格式不成功,这里参考博客:Ubuntu安装GDAL 2.1安装新的版本:

sudo add-apt-repository -y ppa:ubuntugis/ppa
sudo apt update
sudo apt upgrade
apt install gdal-bin python-gdal python3-gdal libgdal-dev

最后确认版本:

gdalinfo --version

按照这样的方法安装后应该是这个版本:
在这里插入图片描述
虽然不是2.4版本,但是后面可以正确转化成gmt文件,所以可以用这个版本。
再根据GMT中文手册中的介绍,分别把大陆部分的四个文件转换成gmt文件备用。(这里中国香港、中国台湾省、中国澳门的数据需要另外下载,gadm36_CHN.gpkg只包括大陆内地的数据。需要制作中国地图的童鞋们需要注意,中文手册里11.5节有详细介绍。)这时候可以先按照手册里介绍的脚本用大陆内地0、1级数据画图。
在这里插入图片描述
画出来的图是这样的(这里画出来的中国地图,包含了中国香港、中国澳门和中国台湾省的数据):
在这里插入图片描述
下面要在gadm36_CHN_1.gmt和gadm36_CHN_2.gmt,也就是1级和2级数据里把安徽省的数据挑出来,将这两个数据拷贝到win10下,用UltraEdit打开(ubuntu下安装了Notepadqq,实际操作发现没有这个好用)。由于数据量非常大,所以在操作中一定要小心。其实在这两个gmt文件中标注得非常清晰,可以直接找到各个省份、各个地级市的边界经纬度,但是由于数据量非常大,所以在UltraEdit中操作需要一定的技巧。先看看gadm36_CHN_1.gmt文件:
在这里插入图片描述
第一行是安徽省,大胆猜测一下应该是按照省份的拼音首字母排序,在里面查找“beijing”:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200716140507135.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjYzODM4OA==,size_16,color_FFFFFF,t_7
开始于七千多行,简单浏览一下前七千行数据没有这样的标注,所以可以证实这之前全部是安徽省的数据,新建文本,复制粘贴完成安徽省的省界线数据。保存为:gadm36_CHN_Anhui_1.gmt以便等下回ubuntu里画图,用相同的方法制作安徽省内各地级市的市界线数据,命名为:gadm36_CHN_Anhui_2.gmt。将这两文件拷贝到ubuntu中,用示例中的脚本运行看看:
在这里插入图片描述
在这里插入图片描述
至此该省的地图数据已经准备好。
[更新…]
准备好数据后开始画图,其实就是在原来的脚本上进行修改。这里要用到gmt中的psclip模块对安徽省的区域进行裁剪,以便添加地形起伏数据时只突出安徽省区域。脚本如下(里面包含了很多作图时要用到的功能,以及相关备注):

#!/bin/bash

PS=test.ps
#全国的
#R=70/135/15/55

#AHCORS站的
R=114/121/29/35
J=M18c

#绘制底图
gmt set MAP_GRID_PEN_PRIMARY 0.5p,dimgray,2_2:1
gmt set FORMAT_GEO_MAP ddd:mm:ssF MAP_FRAME_WIDTH 8p
gmt set FONT_ANNOT_PRIMARY 16p
#-Bf2a2前后两个2分别表示图边的经纬度间隔 -BWESN大小写表示所绘的图上下左右是否有标注,大写表示有
gmt psbasemap -R$R -J$J -Bf2a2 -BWESN -Xc -Yc -K > $PS


#准备底图所需要的地形数据
gmt grdcut earth_relief_01m.grd -R$R -GcutTopo.grd
#求梯度结果为cutTopo_i.grd
gmt grdgradient cutTopo.grd -Ne0.7 -A50 -GcutTopo_i.grd
gmt grd2cpt cutTopo.grd -Cglobe -S-10000/10000/200 -Z -D > colorTopo.cpt

#通过裁剪确定区域 只在指定区域内加上地形数据
gmt psclip Anhui_1.dat -R -J -K -O >> $PS
#加上上面求得的梯度-I选项表示加上
#gmt grdimage cutTopo.grd -IcutTopo_i.grd -R -J -CcolorTopo.cpt -Q -O -K >> $PS
#不加梯度
gmt grdimage cutTopo.grd -R -J -CcolorTopo.cpt -Q -O -K >> $PS
gmt psclip -C -O -K >> $PS
#裁剪结束

#此处使用的中国国界线有误  不可用于发表
#gmt pscoast -R -J -ECN+p1p,black,- -W1/0.2p -I1/0.25p -O -K >> $PS
gmt psxy CN-border-La.dat -J$J -R$R -W1.0p,black -K -O >> $PS
gmt psxy Anhui_2.dat -J$J -R$R -W0.5p,black -K -O >> $PS

#绘制colorbar
#gmt psscale -DjCB+w18c/0.3c+o0/0.5c+h -R -J -CcolorTopo.cpt -BWSEN -Bxa2000f400+l"Elevation/m" -G-8000/8000 -O -K >> $PS

#绘制GPS速度场
#-Se后面三参数表示:速度值为1的矢量的长度/置信度0.95/文本的大小
#-W控制矢量以及误差椭圆的轮廓的宽度,颜色,线型
#-G矢量填充色
#-A控制矢量的属性,0.15c是矢量头的大小,+e表示在矢量尾端绘制箭头,+p0.75p矢量线段部分的宽度
#awk '{print $1,$2,$3,$4,$5,$6,0}' gps_campagin.txt | gmt psvelo -J -R -Se0.05c/0.95/0 -A0.15c+e+p0.75p -Gblue -W0.2p,blue -K -O >> $PS

#绘制各个站点 用大圆套小圆的方式标注 
#gmt psxy cors-station.dat -J$J -R$R -Sc0.1c -Gblack -K -O >> $PS
#gmt psxy cors-station.dat -J$J -R$R -Sc0.27c -W0.6p,red4 -K -O >> $PS


#绘制周围省名称
gmt pstext province.dat -J$J -R$R -Dj0.15c/0.15c  -F+f23p,17,gray28+j  -K -O >> $PS



#psvelo很难画图例,以下代码展示了如何绘制图例,需要进行大量微调
#白底
gmt psxy -J -R -W1.0p,black -Gwhite -K -O >> $PS << EOF
117.55 34.1
121 34.1
121 35
117.55 35
EOF

gmt psscale -R -J -DjTR+w8c/0.3c+o0.6c/0c+h -CcolorTopo.cpt -Bxa400f80+l"Elevation/m" -G0/1600 -O -K >>$PS

#10正负1mm/yr
gmt pstext -J -R -F+f16p+jML -K -O >> $PS << EOF
118 34.3 10\2611 mm/yr
EOF
#图例箭头
gmt psvelo -J -R -Se0.20c/0.95/0 -A0.65c+e+p1.6p -Gred3 -W1.0p,red3 -K -O >> $PS << EOF
119.5 34.3 10 0 1 1 0
EOF



gmt psxy -R -J -T -O >> $PS
gmt psconvert -A0.5c -Tg -P $PS
rm -rf $PS
rm gmt.* cutTopo*.grd colorTopo.cpt 

画出来的地形图数据如下。这幅图主要是想用来表示速度场,所以调整好了图例。如果要画其他省份的地图,则图例需要重新调整。
在这里插入图片描述

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值