使用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)
        self.Y = (self.N + H) * m.cos(self.b) * m.sin(self.l)
        self.Z = (self.N * (1 - self.earth.e1s) + H) * m.sin(self.b)

    def XYZ_BLH(self, X, Y, Z):  # 空间直角坐标转换为大地坐标
        # 求出大地经度
        self.l = m.atan(Y / X)
        # 求出大地纬度
        self.r = m.sqrt(X * X + Y * Y)
        self.tb1 = Z / self.r
        while True:
            self.tb2 = 1 / self.r * (
                    Z + self.earth.a * self.earth.e1s * self.tb1 /
                    m.sqrt(1 + self.tb1 * self.tb1 * (1 - self.earth.e1s)))
            if abs(self.tb2 - self.tb1) <= 5e-10:
                break
            self.tb1 = self.tb2
        self.b = m.atan(self.tb2)
        # 求出大地高
        self.W = m.sqrt(1 - self.earth.e1s * m.pow(m.sin(self.b), 2))
        self.N = self.earth.a / self.W
        self.H = self.r / m.cos(self.b) - self.N
        # 将弧度转换为角度
        self.B = m.degrees(self.b)
        self.L = m.degrees(self.l)

3.建立点类

class Point():
    # 建立点类
    def BLH(self, B, L, H):  # 建立直角坐标点类
        self.B = B
        self.L = L
        self.H = H
        self.P = Transform()
        self.P.BLH_XYZ(B, L, H)
        self.X = self.P.X
        self.Y = self.P.Y
        self.Z = self.P.Z

    def XYZ(self, X, Y, Z):  # 建立直角坐标点类
        self.X = X
        self.Y = Y
        self.Z = Z
        self.P = Transform()
        self.P.XYZ_BLH(X, Y, Z)
        self.B = self.P.B
        self.L = self.P.L
        self.H = self.P.H

使用上述代码便可以编写主函数,实例化类之后进行所有点的转换。得到了所有的点的BLH后,我们将进入下一步。

三、GMT初探

1.了解GMT

Generic Mapping Tools(GMT)是科研工作者常用的画图工具。GMT的功能强大,也内置了一些统计模块。相较于其他常用的绘图工具(或含有绘图功能的软件,比如Matlab,Python,R等),GMT的特点是高效出图,缺点则是没有可操作的直观界面(GUI)。

2.配置GMT

在官网上下载GMT的软件本体和GMT的软件使用说明,需要配置环境变量,也有可能需要配置awt,这些都是需要大家实际操作的。如何判断自己正确安装了GMT,只需要Win+R运行cmd,输入

"gmt --version",出现了以下界面说明安装成功。

使用GMT绘制星下点图_第1张图片

(本机安装的是6.4.0版本的GMT)

3.绘制星下点图

1)新建一个txt文档。

使用GMT绘制星下点图_第2张图片

2)输入命令。

使用GMT绘制星下点图_第3张图片

命令如下:

gmt set FONT_ANNOT_PRIMARY 13p
gmt pscoast -Rg-160/160/-80/80 -JX8i/6i -Ba20g20 -Dh -A5000 -G255/255/255 -S255/255/255 -N1/0.2p,white -W1/0.3p,white -I1/0.2p,white -K > sattrack.ps
psxy GEO.txt -R -J -B -Sj -Ggray -Wthinner -K -O >> sattrack.ps
psxy GEO.txt -R -J -B -Sc0.3c -Gyellow -Wthinner -K -O >> sattrack.ps
psxy IGSO.txt -R -J -B -Sj -Ggray -Wthinner -K -O >> sattrack.ps
psxy IGSO.txt -R -J -B -Sc0.3c -Gyellow -Wthinner -K -O >> sattrack.ps
psxy MEO.txt -R -J -B -Sj -Ggray -Wthinner -K -O >> sattrack.ps
psxy MEO.txt -R -J -B -Sc0.3c -Gyellow -Wthinner -K -O >> sattrack.ps
pstext GEONAME.txt -R -J -B -D-0.2/-0.4 -F+f13p -K -O >> sattrack.ps
pstext IGSONAME.txt -R -J -B -D-0.2/-0.4 -F+f13p -K -O >> sattrack.ps
pstext MEONAME.txt -R -J -B -D-0.2/-0.4 -F+f13p -K -O >> sattrack.ps
psxy C06.txt -R -J -B -W1.5p,SEAGREEN,solid -K -O >> sattrack.ps
psxy C07.txt -R -J -B -W1.5p,SEAGREEN,solid -K -O >> sattrack.ps
psxy C08.txt -R -J -B -W1.5p,SEAGREEN,solid -K -O >> sattrack.ps
psxy C09.txt -R -J -B -W1.5p,SEAGREEN,solid -K -O >> sattrack.ps
psxy C10.txt -R -J -B -W1.5p,SEAGREEN,solid -K -O >> sattrack.ps
psxy C11.txt -R -J -B -W1.5p,DARKORCHID3,solid -K -O >> sattrack.ps
psxy C12.txt -R -J -B -W1.5p,DARKORCHID3,solid -K -O >> sattrack.ps
psxy stations.txt -R -J -B -St12p -Gred -Wthinner -K -O >> sattrack.ps
pstext stations.txt -R -J -B -D0.5/-0.4 -F+f17p,40 -O >> sattrack.ps
psconvert sattrack.ps -C-sFONTPATH=C:\WINDOWS\Fonts -E600 -P -Tt

3)新建文件,放入卫星的坐标,保存退出。

使用GMT绘制星下点图_第4张图片

4)修改文件扩展名为".bat",双击打开或者在CMD里运行也是可以的。

5)获得了tif图,则绘图完毕。

使用GMT绘制星下点图_第5张图片

使用GMT绘制星下点图_第6张图片

星下点图,绘制完毕。

四、总结

GMT虽然配置较为麻烦,且没有好的GUI界面以供使用者使用,需要使用命令行来绘制图像,但是对于测绘来说,仍不失为一款绘图科研利器。

你可能感兴趣的:(卫星导航数据处理实验,算法)