python 如何通过海表面高度数据计算海表地转流速、并绘制流线图

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 最近,学习海气相互作用时,老师布置了一个小作业。通过卫星高度计测得的海表面高度异常数据,计算其表层地转流速,并研究其与海表面高度异常的关系。

最近,学习海气相互作用时,老师布置了一个小作业。通过卫星高度计测得的海表面高度异常数据,计算其表层地转流速,并研究其与海表面高度异常的关系。


刚刚看到作业内容时,还是有点一头雾水的,不晓得怎么通过海表面高度数据推算出地转流速。挠头思考时,无意中看到物理海洋学,想起里面曾经有关系地转流部分的内容,索性拿出来看看找一下。惊喜大于意外,书里果然有推导的公式,直接贴在下面了:


9d15850b759448ffb132b5871c38ed1a.png



其中,δ \deltaδ为海表面高度,f为科氏力(f=2Ωsinψ)ψ纬度 ;,g为重力加速度,y x 就是经纬度。


根据公式很容易知道计算的过程,细节在于对于数据的处理,包括科氏力、经纬度转换等等。


# # 首先导入相关的库
import cartopy.feature as cfeature#陆地、河流等
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter#经纬度
import matplotlib.pyplot as plt#绘图
import numpy as np #数组
import cartopy.crs as ccrs #投影
import  xarray as xr#读取nc文件
#  读取nc文件数据
path='D:\\sla.nc'
data=xr.open_dataset(path)
sla=data.sla[0] .data#海表面高度异常数据
x=data.longitude.data #lon
y=data.latitude.data #lat
# 计算将弧度与角度转换 、科氏力、
a=6400000 
omega=7.292e-5 
g = 9.8
coslat=np.cos(y*np.pi/180).reshape((-1,1))
coslon=np.cos(x*np.pi/180).reshape((-1,1))
sinlat = (np.sin(y*np.pi/180)).reshape((y.shape[0],1))
f=2*omega*sinlat
# np.gradient()用来求导
dx=(np.gradient(x)*np.pi/180).reshape((-1,1))*coslat*a
dy=(np.gradient(y)*np.pi/180).reshape((-1,1))*a
dslady=np.gradient(sla,axis=0)/dy
dsladx=np.gradient(sla,axis=1)/dx
#带入公式
us=-1*(g/f)*dslady
vs=(g/f)*dsladx
#==============================绘图=================================
fig = plt.figure(figsize=(10, 9))
ax=fig.add_subplot(111,projection=ccrs.PlateCarree())
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
ax.add_feature(cfeature.NaturalEarthFeature('physical', 'land', '50m', \
                                            edgecolor='white', facecolor='white',zorder=2))
# # # 设置经纬度范围、显示区域
ax.set_xticks(np.arange(143, 146, 0.5),crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(33, 36, 0.5),crs=ccrs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label =False))#经度0不加标识
ax.yaxis.set_major_formatter(LatitudeFormatter())
ax.set_extent([143,145,33,35])
# # #绘制流线 、海表面高度填色图
ax.streamplot(x, y, us,vs,density=1)#python 中绘制流线的函数
cb=ax.contourf(x,y,sla)              #绘制填色图
# # # 设置轴、标签相关大小、名称
ax.tick_params(which='major', direction='out', length=10, width=0.99, pad=0.2, bottom=True, left=True, right=False, top=False)
ax.set_title('streamline plot',pad=10,fontsize=20)#标题
ax.set_xlabel('Longtitude',fontsize=20)#x轴标签
ax.set_ylabel('Latitude',fontsize=20)#y轴标签
# # #保存图片
fig.savefig('D:\\'+'oceanas.png',format='png',dpi=150)


看一下成图:


d56ee74e568c4d6197b13fa40b3d471e.png


通过选取任意一个涡旋,进行绘图,可以很明显的发现,流速的流线图与海表面高度异常数据吻合很好,可以暂定认为,流线的分布一定程度上反应了海表面高度的分布。

可能计算过程稍显粗糙,简单记录一下,感兴趣的小伙伴可以去测试一下。有问题的话欢迎评论留言交流补充,peace~~


                                一个努力学习python的海洋菜鸡
                                         水平有限,欢迎指正!!!
                                            欢迎点赞、评论、收藏。


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
25天前
|
Python
【10月更文挑战第10天】「Mac上学Python 19」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。
153 60
|
29天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能数据隐私保护
使用Python实现深度学习模型:智能数据隐私保护 【10月更文挑战第3天】
91 0
|
17天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
1天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
9 1
|
2天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
3天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
27天前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
44 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
27天前
|
计算机视觉 Python
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
这篇文章介绍了如何使用Python的OpenCV库将多张图片合并为一张图片显示,以及如何使用matplotlib库从不同txt文档中读取数据并绘制多条折线图。
41 3
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
|
8天前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
22 3
|
28天前
|
数据可视化 算法 Python
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
本文介绍了如何利用Python脚本结合动态模态分解(DMD)技术,分析从OpenFOAM模拟中提取的二维切片数据,以深入理解流体动力学现象。通过PyVista库处理VTK格式的模拟数据,进行POD和DMD分析,揭示流场中的主要能量结构及动态特征。此方法为研究复杂流动系统提供了有力工具。
60 2
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析