使用GMT绘制星下点图

写在前面

这是2023年第一篇文章,今天要介绍的是使用GMT绘制星下点图,在卫星导航实验重,要求我们绘制北斗卫星的星下点图,我们需要知道卫星的轨迹,就需要计算出卫星的坐标,并进行相应的坐标转换,获得了坐标之后,需要使用GMT进行星下点图的绘制。

一、获得卫星坐标

可以在我的其他的博客中找到计算卫星坐标的代码,此处放置链接,请自行取用。

【python】读取卫星星历(RENIX 3.04)进行卫星位置的计算(北斗卫星专题)

其大致原理是,通过读取卫星星历相应的卫星轨道信息,对相应的数据块进行读取并计算出在历元时刻的卫星位置。

二、对卫星坐标进行坐标转换

由于计算获得的卫星坐标是以高斯空间直角坐标系(CGCS2000或其他坐标系),我们需要转化为BLH坐标,才能够使用GMT来进行卫星的星下点图。以下是转换坐标的相关类的代码。

1.建立椭球类,采用CGCS2000坐标系

class Earth():
    # 建立椭球类,,采用CGCS2000中国大地坐标系数据
    def __init__(self):  # 给定椭球数据
        # 长半轴
        self.a = 6378137.0
        # 短半轴
        self.b = 6356752.31414
        # 扁率
        self.f = 1 / 298.257222101
        # 第一偏心率的平方
        self.e1s = m.pow(0.0818191910428, 2)
        # 第二偏心率的平方
        self.e2s = self.e1s / (1 - self.e1s)

2.建立转换类(包括XYZ与BLH的互相转换方法)

class Transform():
    # 建立转换类
    def __init__(self):  # 导入椭球数据
        self.earth = Earth()

    def BLH_XYZ(self, B, L, H):  # 大地坐标转换为空间直角坐标
        # 将角度转换为弧度
        self.b = m.radians(B)
        self.l = m.radians(L)
        # 计算辅助函数
        self.W = m.sqrt(1 - self.earth.e1s * m.pow(m.sin(self.b), 2))
        # 转换为空间直角坐标
        self.N = self.earth.a / self.W
        self.X = (self.N + H) * m.cos(self.b) * m.cos(self.l)
  
### 使用 MATLAB 绘制基于卫星历书的天空 为了实现这一目标,可以遵循以下方法来处理 SP3 文件并将其转换为所需的坐标系以便绘制星下点轨迹。 #### 数据准备与读取 首先需要加载来自 SP3 文件的数据。这通常包含了时间戳以及对应的地球中心直角坐标 (X, Y, Z) 值。对于这些数据的操作可以通过编写特定函数完成,该过程涉及解析文件结构并将其中的信息提取到适合进一步计算的形式中[^1]。 ```matlab % 伪代码表示如何从SP3文件获取位置信息 function [timeStamps, positions] = readSp3File(filePath) % 实现细节省略... end ``` #### XYZ 到 BLH 的转换 一旦获得了 X、Y 和 Z 坐标之后,则需执行从笛卡尔坐标系至地理坐标的变换操作。此步骤利用已知算法将空间直角坐标转化为纬度 B(Latitude)、经度 L(Longitude)和高度 H(Height)。这部分逻辑已经在 Python 脚本 `ground_track.py` 中有所体现,但在 MATLAB 下也需要相应的实现方式。 ```matlab function [latitudes, longitudes, heights] = xyzToBlh(xyzPositions) % 这里应该填入具体的XYZ转BLH公式或调用内置工具箱中的相应功能 latitudes = ...; longitudes = ...; heights = ...; end ``` #### 地球表面投影映射 当拥有了地理位置参数后,下一步就是考虑怎样把这些点投射到地上显示出来。考虑到地球是一个近似椭圆体而非完美的圆形,在进行此类绘图之前可能还需要做额外调整以确保准确性。MATLAB 提供了多种形化展示选项和支持不同类型的基底的地库,比如 geoplot 函数族可以帮助创建美观且专业的星空或其他形式的空间分布表。 ```matlab figure(); geoshow('landareas.shp', 'FaceColor', [0.8 0.7 0.5]); hold on; for i = 1:length(latitudes) plotm([latitudes(i)], [longitudes(i)], '.', ... 'MarkerSize', 2,... 'LineWidth', 1); end title('Satellite Ground Track'); xlabel('Longitude'); ylabel('Latitude'); grid minor; box off; axis equal tight; ``` 通过上述流程,能够有效地使用 MATLAB 来根据卫星历书数据构建出精确而直观的天空。值得注意的是实际应用过程中可能会遇到更多复杂情况,因此建议深入研究相关文献资料和技术文档获得更详尽指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学测绘的小杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值