操作环境: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”:

开始于七千多行,简单浏览一下前七千行数据没有这样的标注,所以可以证实这之前全部是安徽省的数据,新建文本,复制粘贴完成安徽省的省界线数据。保存为:gadm36_CHN_Anhui_1.gmt以便等下回ubuntu里画图,用相同的方法制作安徽省内各地级市的市界线数据,命名为:gadm36_CHN_Anhui_2.gmt。将这两文件拷贝到ubuntu中,用示例中的脚本运行看看:


至此该省的地图数据已经准备好。
[更新…]
准备好数据后开始画图,其实就是在原来的脚本上进行修改。这里要用到gmt中的psclip模块对安徽省的区域进行裁剪,以便添加地形起伏数据时只突出安徽省区域。脚本如下(里面包含了很多作图时要用到的功能,以及相关备注):

#!/bin/bashPS=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
EOFgmt 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
EOFgmt psxy -R -J -T -O >> $PS
gmt psconvert -A0.5c -Tg -P $PS
rm -rf $PS
rm gmt.* cutTopo*.grd colorTopo.cpt 

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

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

  1. 安装Hadoop及Spark(Ubuntu 16.04)

    安装Hadoop及Spark(Ubuntu 16.04) 安装JDK 下载jdk(以jdk-8u91-linux-x64.tar.gz为例) 新建文件夹 sudo mkdir /usr/lib/jvm ...

  2. Ubuntu 16.04 LTS与windows双系统时间同步解决方法

    最近装了windows10和ubuntu16.04双系统,装完后,出现了win10跟Ubuntu 16.04时间不对的问题,在windows下时区不对,网上很多方法是修改ubuntu的UTC sudo ...

  3. Ubuntu 16.04 安装后修改屏幕分辨率(xrandr: Failed to get size of gamma for output default)

    ubuntu 16.04 安装后分辨率只有一个选项 1024x768,使用 xrandr 命令出现错误: xrandr: Failed to get size of gamma for output ...

  4. Ubuntu 16.04 安装 Docker - Dependency failed for Docker Application Container

    Docker 安装 由于 apt 官方库里的 Docker 版本可能比较旧,所以先卸载可能存在的旧版本: sudo apt-get remove docker docker-engine docker ...

  5. 在Ubuntu 16.04.6 LTS上升级python 3.5到3.7.3实录

    缘由 我想安装一个python模块you-get,发现只能使用pip3安装,但是我发现我的Ubuntu 16.04.6 LTS上有python3.5,但是没有pip3,也无法成功安装,真是要了我的老命 ...

  6. 在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' 出错问题的解决方法

    在Ubuntu 16.04.6 LTS上安装python3.7和pip3后出现Command '('lsb_release', '-a')' returned non-zero exit status ...

  7. 在Ubuntu 16.04.6 LTS上升级Go到最新版1.12.5实录

    上一次我在Ubuntu 16.04.3 LTS上从源码安装了Go,当时最新的版本是1.10,参见我之前的博文 https://blog.csdn.net/tao_627/article/details ...

  8. 在Ubuntu 16.04.5 LTS上利用python中的PIL模块压缩一百多兆的单张图片实操

    在前面的博文中,我将300多张电影海报拼接为了一张103MB的巨幅图片,我想拿它做电脑桌面(1080P),但是这么多的图片,存储和加载是个麻烦事儿,需要将它压缩到几MB大小. 在Ubuntu 16.0 ...

  9. 在Ubuntu 16.04.5 LTS上升级python的pip版本实录

    在ubuntu 16.04.5 LTS上使用Python安装模块时,比较顺手的方法是使用pip命令.这次,我在安装一个模块时,老是提示下面的问题,比较不爽.所以,我就照着提示做了一遍,记录下来,以作备 ...

最新文章

  1. angular @ViewChild使用
  2. DevExpree XtraTreeList 如何去掉/隐藏某些节点前的图片
  3. vue --- 2.0 编译的实现
  4. 【CF 1191】Tokitsukaze, CSL and Stone Game//Tokitsukaze and Duel//Tokitsukaze and Strange Rectangle
  5. 软件版本命名规范及各阶段说明
  6. 北京大学生物信息学 (4)序列数据库
  7. 计算机用户注册表修改,如何通过注册表修改桌面计算机/用户文档图标
  8. Ghost xp NetMeeting不能共享桌面的解决办法
  9. Python美股量化交易填坑记录——13a.Vegas隧道交易机器人
  10. html多重阴影,求问:CSS3多重阴影效果实现的问题。为什么没有任何的效果,怎么改颜色都没用。...
  11. 锁仓量突破40亿美元、公链集体押注,DeFi真的具有可持续性吗?
  12. tps在区块链是什么意思_区块链的TPS是什么
  13. android中的ems的真正含义
  14. html5标题分栏,网页分栏设计和不同的CSS样式
  15. 面包屑效果(element + vue)
  16. Python免费下载哔哩哔哩视频,只需一行代码!
  17. smartBi调整参数排版
  18. 双休和单休区别大吗?
  19. 马化腾“扛不住了”?微信“跟风”推出新功能,像极了当年的QQ
  20. 国内首次!3位清华姚班00后学霸斩获计算机理论顶会最佳学生论文奖

热门文章

  1. 三国杀将灵计算器vue编写
  2. 梅特勒托利多水分测定仪维修DL31/38卡尔菲休滴定仪详解
  3. H5 移动端 钉钉微应用 调用微信内置地图
  4. 理解和使用zlib库 - 我个人的救赎
  5. 12306小程序正式上线,比原生APP清爽百倍!
  6. Mobicom20 Volumetric Video文章解读
  7. 阿里妈妈Dolphin智能计算引擎基于Flink+Hologres实践
  8. 基于自适应适应度-距离平衡的随机分形搜索算法(Matlab代码实现)
  9. WIZnet正式发布W5500
  10. 西门子程序组织块功能详细介绍