GMT6绘制北半球

设置绘制区域及投影方式

投影方式选择立体等角投影,在GMT6中的命令是-Js
在这里插入图片描述

# 定义区域变量和投影变量,纬度从北纬30度到极点
region='-180/180/30/90'
projection='0/90/1:60000000'
gmt set PROJ_ELLIPSOID WGS-84

定义CPT及地形展示

现在定义一个CPT用于显示地形的颜色

# 定义一个CPT
gmt makecpt -Cearth -T-7000/4000 > land.cpt
# 绘制地形并添加海岸线
gmt grdimage -R$region -Js$projection @earth_relief_01m -I+d -Cland.cpt
gmt coast -R$region -Js$projection -Bafg -Di -W0.25p -A10000

完整代码:

#!/usr/bin/env -S bash -e
# GMT modern mode bash template
# Date:    2024-06-13T20:17:44
# User:    br
# Purpose: Purpose of this script
set -e
export GMT_SESSION_NAME=$$	# Set a unique session name
gmt makecpt -Cearth -T-7000/4000 > land.cptgmt begin North_Hemispher png# Place modern session commands hereregion='-180/180/30/90'projection='0/90/1:60000000'gmt set PROJ_ELLIPSOID WGS-84gmt grdimage -R$region -Js$projection @earth_relief_01m -I+d -Cland.cpt gmt coast -R$region -Js$projection -Bafg -Di -W0.25p -A10000
gmt end show

结果展示:
在这里插入图片描述

只展示陆地地形

现在我有个需求只想展示陆地的地形,因为后面还要叠加海洋温度的数据
此时就需要使用GMT中提供的掩膜方法将陆地的地形数据提取出来,遮住海洋地形的数据

使用grdlandmask模块创建分辨率为1m的陆地掩膜,使用grdcut模块将陆地掩膜的范围裁剪到指定区域方便后续的数学运算,使用grdmath模块中的乘法操作将裁剪后的地形数据与陆地掩膜相乘。这样就得到了陆地的地形数据

gmt grdlandmask -R-180/180/30/90 -I1m -Dl -Gland_mask.nc
gmt grdcut @earth_relief_01m -R-180/180/30/90 -Gearth_relief_cut.nc
gmt grdmath earth_relief_cut.nc land_mask.nc MUL = masked_land.nc

然后将上面的完整代码稍作修改即可

#!/usr/bin/env -S bash -e
# GMT modern mode bash template
# Date:    2024-06-13T20:17:44
# User:    br
# Purpose: Purpose of this script
set -e
export GMT_SESSION_NAME=$$	# Set a unique session name
gmt makecpt -Cearth -T-7000/4000 > land.cptgmt begin North_Hemispher png# Place modern session commands hereregion='-180/180/30/90'projection='0/90/1:60000000'gmt set PROJ_ELLIPSOID WGS-84gmt grdimage -R$region -Js$projection masked_land.nc -I+d -Cland.cpt gmt coast -R$region -Js$projection -Bafg -Di -W0.25p -A10000
gmt end show

结果展示:在这里插入图片描述

海洋温度数据

我这里有一个海温的数据,是ERA5月温度平均,是一张721*1440的0.25度的TIF文件
海温的范围大致在270-300K。陆地上没有数据,用白色表示
QGIS展示:
在这里插入图片描述

海温数据叠加到北半球

我们可以使用gdalinfo工具查看海温数据的相关信息:

gdalinfo SST.tif

相关信息:

Driver: GTiff/GeoTIFF
Files: SST.tifSST.tif.aux.xml
Size is 1440, 721
Origin = (-179.875000000000000,90.000000000000000)
Pixel Size = (0.250000000000000,-0.250000000000000)
Image Structure Metadata:INTERLEAVE=BAND
Corner Coordinates:
Upper Left  (-179.8750000,  90.0000000) 
Lower Left  (-179.8750000, -90.2500000) 
Upper Right ( 180.1250000,  90.0000000) 
Lower Right ( 180.1250000, -90.2500000) 
Center      (   0.1250000,  -0.1250000) 
Band 1 Block=1440x1 Type=Float32, ColorInterp=GrayMin=269.884 Max=304.888 Minimum=269.884, Maximum=304.888, Mean=286.909, StdDev=11.739Metadata:STATISTICS_MAXIMUM=304.88809204102STATISTICS_MEAN=286.90908880145STATISTICS_MINIMUM=269.88391113281STATISTICS_STDDEV=11.739334479632STATISTICS_VALID_PERCENT=66.11

显然直接将海温数据叠加到北半球上是不行的,首先需要对海温数据的范围进行裁剪,裁剪到指定区域

gmt grdcut SST.tif -R-180/180/30/90 -Gcut_SST.tif

接下来就可以进行叠加了。需要注意的是在GMT中后面的grdimage图层会覆盖掉前面的图层,所以需要使用-t选项设置一定的透明度。同时给海洋温度添加rainbow的CPT。完整代码:

#!/usr/bin/env -S bash -e
# GMT modern mode bash template
# Date:    2024-06-13T20:17:44
# User:    br
# Purpose: Purpose of this script
set -e
export GMT_SESSION_NAME=$$	# Set a unique session name
gmt makecpt -Cearth -T-7000/4000 > land.cpt
gmt makecpt -Crainbow -T270/300/1 > ocean.cptgmt begin North_Hemispher png# Place modern session commands hereregion='-180/180/30/90'projection='0/90/1:60000000'gmt set PROJ_ELLIPSOID WGS-84gmt grdimage -R$region -Js$projection masked_land.nc -I+d -Cland.cptgmt grdimage -R$region -Js$projection cut_SST.tif -Cocean.cpt -t30 # -t设置透明度为30%gmt coast -R$region -Js$projection -Bafg -Di -W0.25p -A10000gmt colorbar -DJRM+w6.5c/0.5c+o1c/0+mc -Bxa -By -G270/300 gmt end show

结果展示:

可以看到北极圈附近的海温相对较低,往南海温逐渐升高
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++_0基础_讲解5 判断语句

判断语句 C是一种计算机编程语言,其提供了多种判断语句来控制程序的执行流程。判断语句允许程序根据条件判断的结果来选择不同的执行路径。在C中,常用的判断语句有if语句、switch语句和三元运算符。 if语句是最常用的判断语句之一。它的基本形式是if&a…

欧式家居官网源码系统-轻奢大气设计风格

一款家居家私的官方网站系统,设计轻奢大气。 前端内容均可通过后台修改。当然你也可以用于其他行业的官网使用,只要你喜欢这个设计。 大致功能: 1、会员系统 2、支付功能 3、标签功能 4、熊掌号提交功能 5、文章发布功能 6、SEO设置功能 7、多…

[学习笔记] VFX Silhouette

目录 Part 1 : The interface of Silhouettte (Silhouette的界面介绍) Part 2: The shape divisions and manual roto(形状分区和手动roto工作): Part 3: tracking : Part 4: Mocha Tracking Part 5: Motion Blur(…

【单片机毕业设计选题24004】-基于STM32和阿里云的智能鱼缸控制系统

系统功能: 此设计采用STM32单片机将采集到的环境温度,TDS值,PH值等显示在OLED上,并将这些信息上报至阿里云平台。系统可通过阿里云平台或按键开关加热继电器,增氧继电器,水泵继电器和舵机. 主要功能模块原理图: 电源时钟烧录接口: 单片机和按键输入电路: 继电器控…

vscode插件开发之 - menu配置

上一遍博客介绍了如何从0到1搭建vscode插件开发的base code,这遍博客将重点介绍如何配置menu。通常,开发一款插件,会将插件显示在VSCode 左侧的活动栏(Activity Bar),那么如何配置让插件显示在Activity Bar…

香橙派鲲鹏Pro(orange pi kunpeng) 开箱测试,和在娱乐功能(电视盒子),深度机器学习应用方面的测试报告

摘要 对Orange Pi kunpeng这个开发板进行综合评测,特别关注其作为电视盒子的性能以及在深度学习应用中的算力和稳定性。通过一个月的测试,我们评估了其硬件性能、软件兼容性、用户体验和实际应用潜力 引言 5月份,我收到了csdn 对Orange P…

LabVIEW阀性能测试平台

项目背景 公司需要开发一套综合测试平台,用于测试汽车气压制动系统控制装置和调节装置的性能。测试平台需满足QC/T标准,并实现多项测试功能,包括密封性测试、静特性测试、动态特性测试等。公司要求系统基于LabVIEW开发,以便于与现…

C++ 06 之 c++增强

c06c增强.cpp #include <iostream>using namespace std; // 1、全局变量检测增强&#xff1a;可以检测出重定义 (c语言不会报错&#xff0c;但是C会报错) //int a; //int a 10;// 2、函数检测增强: 函数返回值类型、形参类型、实参个数 int sum(int a, int b) {return …

【总线】AMBA总线架构的发展历程

目录 引言 发展历程 第一代AMBA&#xff08;AMBA 1&#xff09; 第二代AMBA&#xff08;AMBA 2&#xff09; 第三代AMBA&#xff08;AMBA 3&#xff09; 第四代AMBA&#xff08;AMBA 4&#xff09; 第五代AMBA&#xff08;AMBA 5&#xff09; AMBA协议简介 ASB&#x…

JavaScript快速入门系列-3(函数基础)

第三章:函数基础 3.1 函数定义与调用3.1.1 函数声明3.1.2 函数表达式3.2 参数与返回值3.3 匿名函数与立即执行函数表达式(IIFE)3.3.1 匿名函数3.3.2 立即执行函数表达式3.4 箭头函数3.4.1 箭头函数与this3.5 函数的高级话题3.5.1 闭包3.5.2 函数柯里化3.5.3 高阶函数小结在Jav…

【C++课程学习】:Data类的实现

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f369;1.头文件 &#x1f369;2.实现文件&#xff1a; &#x1f369;3.分析&#xff1a; &…

GroupJoin算子的实现

PolarIMC 发的一篇挺好的文章&#xff0c;值得阅读。写作很认真&#xff1a; https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/implementation-of-groupjoin

算法训练营第五十九天 | LeetCode 115 不同的子序列、LeetCode 583 两个字符串的删除操作、LeetCode 72 编辑距离

LeetCode 115 不同的子序列 这题和编辑距离比较像&#xff0c;也就是今天的第三题。 这题用动规解决的是多对一的分支子问题推导出当前问题的思路。 同样递推公式由两个字符串平齐&#xff0c;如果当前字符相等&#xff0c;则当前问题可由第一个字符串0~i-1和0~j-1匹配数及0~…

【硬件模块】SSD1306 OLED屏幕(含GD32ESP32驱动代码)

OLED屏幕 最近在写GD32的文章&#xff0c;之前STM32有OLED屏幕来展示数据&#xff0c;ESP32可以直接打印到电脑屏幕上&#xff0c;GD32的话手上就没有办法了。 虽然是可以直接把STM32的OLED屏幕的驱动代码改改移植到GD32上面&#xff0c;不过想了想干脆写一个文章来说说如何驱…

2024牛客网高频精选Java面试八股文整理(附答案)

Java 面试 Java 作为编程语言中的 NO.1,选择入行做 IT 做编程开发的人&#xff0c;基本都把它作为首选语言,进大厂拿高薪也是大多数小伙伴们的梦想。以前 Java 岗位人才的空缺&#xff0c;而需求量又大&#xff0c;所以这种人才供不应求的现状&#xff0c;就是 Java 工程师的薪…

特别名词Test Paper7

特别名词Test Paper7 potteries 陶器power 权力&#xff1b;能源powerpoint 投影的文件precaution 预防precision 精密度preference 偏爱preposition 介词prescription 药方presentation 演讲&#xff1b;陈述preservation 保存president 总统&#xff1b;校长&#xff08;大学…

公用nacos,实现只调用本机相应服务,不出现负载均衡到别人机器上

当我们有两个研发同时在调试一个微服务模块时&#xff0c;你和对方本地都会启动服务&#xff0c;这就导致在nacos会同时注册两个实例。默认情况下请求这个服务&#xff0c;具体处理请求的程序会在你和对方之间来回轮询&#xff0c;即一下你的服务一下对方的服务。 其结果就导…

栈(Stack)汇总

栈简介 栈&#xff08;Stack&#xff09;是只允许在一端进行插入或者删除操作的线性表。它的操作特性可以概括为——后进先出&#xff08;Last In First Out&#xff0c;LIFO&#xff09;。栈顶&#xff08;Top&#xff09;——线性表允许进行插入删除的一端&#xff1b; 栈底…

全面解析AdaBoost:多分类、逻辑回归与混合分类器的实现

1. 使用 AdaBoost 完成多分类和逻辑回归问题 多分类 AdaBoost 原本是为二分类问题设计的&#xff0c;但可以扩展到多分类问题。常用的方法包括 One-vs-All (OVA), AdaBoost.MH (Multiclass, Multi-Label) 和 AdaBoost.MR (Multiclass Ranking)。下面对每种方法进行详细介绍。…

PEPPERL+FUCHS倍加福模块R4D0-FB-IA10.1

PEPPERLFUCHS倍加福模块R4D0-FB-IA10.1 FA产品分类 1. 接近传感器类产品 - 电感式传感器 - 电容式传感器 - 磁式传感器 - 超声波传感器 - WCS位置编码系统 2. 光电传感器类产品 - 标准光电传感器 - 安全光电传感器 - 门控光电传感器 3. 编码器类产品 - 绝对值编码器 - 增量型编…