用Boule绘制地球重力场

文章目录

    • 参考椭球
    • 标准重力
    • 重力地图

参考椭球

boule中定义了多种参考椭球,可用于表示地球、火星等星体的重力分布。可通过pip安装

pip install boule

安装完成后可直接调用

import boule as bl

boule中已经定义的椭球如下

椭球星体
GRS80地球
WGS84地球
MARS火星
MERCURY水星
MOON月球
VENUS金星
VESTA灶神星

这些椭球可直接调用

print(bl.WGS84)
Ellipsoid(name='WGS84', semimajor_axis=6378137, flattening=0.0033528106647474805, geocentric_grav_const=398600441800000.0, angular_velocity=7.292115e-05, long_name='World Geodetic System 1984', reference='Hofmann-Wellenhof, B., & Moritz, H. (2006). Physical Geodesy (2nd, corr. ed. 2006 edition ed.). Wien\u202f; New York: Springer.')

标准重力

下面以WGS84椭球为例,绘制地球表面的重力场分布。在Ellipsoid对象中,通过normal_gravity方法,可以获取指定纬度和高度处的重力,示例如下

import boule as blgamma = bl.WGS84.normal_gravity(latitude=45, height=50)
print(f"{gamma:.2f} mGal")
# 980604.35 mGal

Gal是重力加速度单位,读作伽利略,1Gal=1cm/s 2 ^2 2。上述代码的输出结果,表示在纬度为45°,海拔50米的地方,其重力加速度为9.8060435m/s 2 ^2 2

其两个参数latitude和height可以数组,由此可得到不同纬度的重力加速度变化

import matplotlib.pyplot as pltL = np.linspace(-90, 90, 181)
gamma = bl.WGS84.normal_gravity(latitude=L, height=0)
plt.plot(L, gamma)
plt.show()

在这里插入图片描述

重力地图

接下来绘制地球重力场,首先创建经纬度网格,然后将地球的重力场映射到经纬度网格中。

import numpy as np
import verde as vdL, B = vd.grid_coordinates(region=[0, 360, -90, 90], spacing=0.5,)
gamma = bl.WGS84.normal_gravity(latitude=B, height=10_000)
grid = vd.make_xarray_grid((L, B), gamma, data_names="gravity")

然后调用pygmt中的绘图函数

import pygmtfig = pygmt.Figure()
fig.grdimage(grid.gravity, projection="W20c", cmap="viridis")
fig.basemap(frame=["af", "WEsn"])
fig.colorbar(position="JCB+w10c", frame=["af", 'y+l"mGal"', 'x+l"WGS84"'])
fig.show()

在这里插入图片描述

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

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

相关文章

linux内核模块module_put()函数详解--03

对应module_put()函数详细用法分享。 第一:函数简介 //函数原型 void module_put(struct module * module) //函数功能 该函数功能是将一个特定模块module的引用计数减一 这样当一个模块的引用计数不为0而不能被内核卸载的 时候,可以调用该函数一次或多…

【嵌入式学习】IO网络接口day02.18

1.使用fgets统计给定文件的行数 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, const char *argv[]) {FILE *fpNULL;if((fpfopen("./test1.txt","r"))NULL){perror("错误信息");return -1…

springboot197基于springboot的毕业设计系统的开发

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的毕业设计系统的开发 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 …

Java六种常用线程创建执行方法

目录 方法一&#xff1a;继承Thread类方法二&#xff1a;实现Runnable接口方法三&#xff1a;实现Callable接口方法四&#xff1a;ThreadPoolExecutor执行Runnable任务方法五&#xff1a;ThreadPoolExecutor执行Callable任务方法六&#xff1a;Executors工具类实现线程池 方法一…

【数据结构】12 堆栈应用:表达式求值

表达式类型 后缀表达式 有一个常量表达式的中缀表达式为&#xff1a;5 6 / 2 - 3 * 4&#xff0c;其后缀形式表示为&#xff1a; 5 6 2 / 3 4 -。后缀表达式的特点是运算符位于两个预算数之后。其前缀表达式为&#xff1a; - 5 / 6 2 3 4。 后缀表达式相比于中缀表达式的…

告警能力中台设计与实践(三)——告警通知

一、告警消息与告警通知 1、告警消息 正如笔者在最开始所写的那样&#xff0c;第三方服务通过调用能力中台的OpenAPI实现告警发起&#xff0c;并且每一次的告警请求都会创建、归档为一条告警消息&#xff08;AlarmMsg&#xff09;。 这样的消息是无状态的&#xff0c;并且对…

递归算法与分治思想

递归算法 直接或间接的调用自身的算法称为递归函数,采用栈结构,先调用的最后返回。 主要形式就是先纵后横,一个分支走到底,再退回一个到兄弟节点,依次回退。 列出递归的三种形式:切蛋糕、递推公式、等价转换。 递归要素: 明确递归得到结果是什么提取重复的逻辑,缩小…

Python教程(26)——Python迭代器和生成器详解

迭代器 Python中的迭代器是一种对象&#xff0c;它可以迭代&#xff08;遍历&#xff09;一个可迭代对象&#xff08;比如列表、元组或字符串&#xff09;的元素。迭代器用于实现迭代器协议&#xff0c;即包含 __iter__() 方法和 __next__() 方法。 迭代器的工作原理是每次调…

15.一种坍缩式的简单——组合模式详解

当曾经的孩子们慢慢步入社会才知道&#xff0c;那年味渐淡的春节就像是疾驰在人生路上的暂停键。 它允许你在隆隆的鞭炮声中静下心来&#xff0c;瞻前顾后&#xff0c;怅然若失。 也允许你在寂静的街道上屏气凝神&#xff0c;倾听自己胸腔里的那团人声鼎沸。 孩子们会明白的&am…

【蓝桥杯】算法模板题(Floyd算法)

一.弗洛伊德算法 用途&#xff1a;用来求解多源点最短路径问题。 思想&#xff1a;Floyd算法又称为插点法&#xff0c;是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。 主要步骤&#xff1a; 1&#xff09;初始化&#xff1a;使用邻接矩阵初始化dis…

MySQL为什么改进LRU算法?

普通LRU算法 LRU = Least Recently Used(最近最少使用): 就是末尾淘汰法,新数据从链表头部加入,释放空间时从末尾淘汰. 当要访问某个页时,如果不在Buffer Pool,需要把该页加载到缓冲池,并且把该缓冲页对应的控制块作为节点添加到LRU链表的头部。当要访问某个页时,如果在…

单主模式和多主模式切换

1 组复制模式切换注意点 组复制有两种运行模式&#xff0c;一种是单主模式&#xff0c;一种是多主模式。这个模式是在整个组中设置的&#xff0c;由 group_replication_single_primary_mode 这个系统变量指定&#xff0c;而且在所有成员上必须保持一致。ON 表示单主模式&#…