最近学习了GMT
的python库pygmt
,感觉相当值得推荐。下面简单介绍安装和使用。
安装步骤
基本的准备工作和安装步骤如下:
- 安装
miniconda
; - 安装
conda
加速器mamba
,提高python库的安装速度(可选); - 安装
jupyter lab
(可选); - 安装
pygmt
;
miniconda
Miniconda是一款小巧的python环境管理工具,其安装程序中包含conda软件包管理器和Python。一旦安装了Miniconda,就可以使用conda命令安装任何其他软件工具包并创建环境等。去官网https://conda.io/en/latest/miniconda.html 下载安装包即可完成安装。
安装后,创建一个新的独立python环境(随便取名,此处为gmt
),以备pygmt的安装和调用:
1 | conda create -n gmt python=3.9 |
mamba
虽然conda是个安装软件的神器,但镜像不稳定,下载安装软件的速度有时很慢。对于几十Mb甚至上百Mb的软件往往下不动,下了半天可能失败。特别是安装的软件多了后,对软件依赖关系的解析时间特别长。mamba加速神器,可以用来并行下载和安装,大大加快速度,减少失败几率。
首先,mamba本身需要先通过conda来安装:
1 | conda install -c conda-forge mamba |
mamba安装成功后,后续所有软件安装都可将conda替换为mamba了。
jupyter lab
JupyterLab是Jupyter主打的最新数据科学生产工具,作为一种基于web的集成开发环境,你可以使用它编写notebook、操作终端、编辑markdown文本、打开交互模式、查看csv文件及图片等功能。pygmt对jupyter lab有很好的衔接,可以方便的查看和记录中间过程,显示绘图结果。安装命令为:
1 | mamba install -c conda-forge jupyterlab |
pygmt
pygmt可以在python中直接使用GMT进行数据处理和绘图,实现了和python的交互操作。下面命令将自动安装pygmt以及依赖,包括proj,gdal,netcdf
等:
1 | mamba install -c conda-forge pygmt |
在命令栏输入jupyter lab
,启动jupyter lab
,新建一个lab,查看版本并绘制一个简单的例子:
1 | import pygmt |
遥感影像绘制
遥感影像绘制不是GMT常用的功能,因此疑问也较多,这里从遥感数据的下载、格式转换、拉伸、裁剪,到最终绘制,给出完整的步骤。
数据下载
免费下载worldview开放数据:https://www.maxar.com/open-data/ 。
本例子采用数据土耳其地震影像(https://www.maxar.com/open-data/turkey-earthquake) 。
使用GMT查看影像信息:
1 | !gmt grdinfo 10300500A4F8E700.tif |
10300500A4F8E700.tif: Title: Grid imported via GDAL
10300500A4F8E700.tif: Command:
10300500A4F8E700.tif: Remark:
10300500A4F8E700.tif: Pixel node registration used [Geographic grid]
10300500A4F8E700.tif: Grid file format: gd = Import/export through GDAL
10300500A4F8E700.tif: x_min: 26.8895518746 x_max: 27.0835860536 x_inc: 4.32089651661e-06 name: x n_columns: 44906
10300500A4F8E700.tif: y_min: 37.6434216334 y_max: 37.8210061593 y_inc: 4.32089651661e-06 name: y n_rows: 41099
10300500A4F8E700.tif: v_min: 0 v_max: 229 name: z
10300500A4F8E700.tif: scale_factor: 1 add_offset: 0
+proj=longlat +datum=WGS84 +no_defs
或者也可以使用gdal查看:
1 | print("GDAL info") |
信息略
或者也可以使用pygmt.grdinfo查看,不过格式不太美观,没有换行:
1 | pygmt.grdinfo("10300500A4F8E700.tif") |
信息略
降低影像分辨率
降低分辨率为9m(0.000075*120000=9m),并改为Byte格式(GMT不识别TIF的float32格式):
1 | !gdal_translate -tr 0.000075 0.000075 -r average -ot Byte 10300500A4F8E700.tif 10300500A4F8E700_lowbyte.tif |
这里的gdal
程序应该可以在安装pygmt之后可以自动调佣,因为同时已经安装了gdal依赖,并创建了这些可执行文件。
绘图
1 | fig = pygmt.Figure() |
色调
如果喜欢亮色,可以适当拉伸灰度值:
1 | !gdal_translate -tr 0.000075 0.000075 -scale 0 200 0 255 -r average -ot Byte 10300500A4F8E700.tif 10300500A4F8E700_lowbyte2.tif |
重复绘图
的代码,效果:
局部
为了保持清晰,局部绘图使用原始分辨率。为了防止图像过大,处理时间长,将裁剪成小区域绘图,并转格式和拉伸:
1 | !gdalwarp -te 26.966 37.7 27.0 37.7166 10300500A4F8E700.tif 10300500A4F8E700_small.tif |
重复绘图
的代码:
其他
- 遥感影像一般为底图,在此基础上可以使用pygmt任意添加
点、线、面、文字
等要素,除了可以识别文本格式,它已经可以读取shp
格式。 - 导出的最终图的格式可以通过后缀修改。比如可以导出高清pdf图片,方便的插入latex使用。
- 本例使用的遥感影像已经转为经纬度坐标,无需再次转换坐标。如果是UTM,则可以通过gdal快速转换。
- 本例子未展示地震前后对比,大家可以下载数据后自行对比。
下载
可以下载本例子的jupyter 版本:https://www.jianguoyun.com/p/DY8Q0ugQ2PCQBxjvv5cE