Java读取Rinex2.10格式的广播星历n文件

最近再写手机端的SPP程序,需要读取包括Rinex格式的观测值文件和广播星历文件,上一篇文章中给出了Java读取Rinex2.11格式的观测值o文件(链接https://blog.csdn.net/qq_40449816/article/details/100695746),接下来,本文将给出读取广播星历文件的代码。

  • ReadNavData.java

package ReadFile;

import ReadFile.DataClass.Ephemeris;
import TimeSysTrans.GPST;
import TimeSysTrans.TimeSysTrans;
import TimeSysTrans.UTC;
import Util.CharTrans;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 该类实现对Rinex2.11格式的广播星历o文件的读取
 * @author lhn
 */
public class ReadNavData {
    /**星历列表*/
    private List ephemerisList;
    /**构造函数*/
    public ReadNavData(String filePath){
        ephemerisList=new ArrayList<>();
        readNavFile(filePath);
    }
    private void readNavFile(String path){
        FileReader fr=null;
        BufferedReader br=null;
        try{
            fr=new FileReader(path);
            br=new BufferedReader(fr);
            /*****************读取头文件部分数据*********************/
            String str="";
            while((str=br.readLine())!=null){
                switch (str.substring(60).trim()){
                    case "END OF HEADER":
                        break;
                    default:
                        continue;
                }
                break;
            }
            /*****************读取头文件部分数据结束*********************/

            /*****************读取广播星历数据部分*********************/
            while ((str=br.readLine())!=null){
                Ephemeris ephemeris=new Ephemeris();
                String sv_prn= CharTrans.strOpera(str.substring(0,2).trim());
                /*获取观测历元时刻*/
                int year=Integer.valueOf(str.substring(3,5).trim());
                int month=Integer.valueOf(str.substring(6,8).trim());
                int day=Integer.valueOf(str.substring(9,11).trim());
                int hour=Integer.valueOf(str.substring(12,14).trim());
                int minute=Integer.valueOf(str.substring(15,17).trim());
                int sec=Integer.valueOf(str.substring(18,20).trim());
                UTC utc=new UTC(year,month,day,hour,minute,sec); /*UTC时间*/
                GPST obs_t=new GPST();
                TimeSysTrans.UTCToGPST(utc,obs_t);
                ephemeris.setPrn(sv_prn);
                ephemeris.setGpst(obs_t);
                double a0=CharTrans.SignTrans(str.substring(22,41).trim());
                ephemeris.setA0(a0);
                double a1=CharTrans.SignTrans(str.substring(41,60).trim());
                ephemeris.setA1(a1);
                double a2=CharTrans.SignTrans(str.substring(60,79).trim());
                ephemeris.setA2(a2);
                /*****************读轨道1-4数据****************************/
                double[]data=new double[16];
                for(int i=0;i<4;i++){
                    int tag=i*4;
                    str=br.readLine();
                    data[tag]=CharTrans.SignTrans(str.substring(3,22).trim());
                    data[tag+1]=CharTrans.SignTrans(str.substring(22,41).trim());
                    data[tag+2]=CharTrans.SignTrans(str.substring(41,60).trim());
                    data[tag+3]=CharTrans.SignTrans(str.substring(60,79).trim());
                }
                if(data!=null){
                    ephemeris.setIODE(data[0]);
                    ephemeris.setCrs(data[1]);
                    ephemeris.setDelta_n(data[2]);
                    ephemeris.setM0(data[3]);
                    ephemeris.setCuc(data[4]);
                    ephemeris.setE(data[5]);
                    ephemeris.setCus(data[6]);
                    ephemeris.setSqurt_A(data[7]);
                    ephemeris.setToe(data[8]);
                    ephemeris.setCic(data[9]);
                    ephemeris.setOMEGA(data[10]);
                    ephemeris.setCIS(data[11]);
                    ephemeris.setI0(data[12]);
                    ephemeris.setCrc(data[13]);
                    ephemeris.setOmega(data[14]);
                    ephemeris.setOMEGA_DOT(data[15]);
                }
                /**轨道5*/
                str=br.readLine();
                double idot=CharTrans.SignTrans(str.substring(3,22).trim());
                ephemeris.setIDOT(idot);
                /**轨道6*/
                str=br.readLine();
                double tgd=CharTrans.SignTrans(str.substring(41,60).trim());
                ephemeris.setTGD(tgd);
                ephemerisList.add(ephemeris);
                /**轨道7*/
                br.readLine();
            }
        /*****************读取广播星历数据部分结束*********************/
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            //关闭文件输入流
            try {
                if(br!=null) {
                    br.close();
                }
                if(fr!=null) {
                    fr.close();
                }
            }catch(IOException e) {
                e.printStackTrace();
            }
        }
    }

    public List getEphemerisList() {
        return ephemerisList;
    }
}
  • Ephemeris.java

package ReadFile.DataClass;

import TimeSysTrans.GPST;

/**
 * 广播星历类
 */
public class Ephemeris {
    private String prn; /*卫星PRN*/
    private GPST gpst; /*卫星的GPS时*/
    private double a0;/*卫星钟差(s)*/
    private double a1;/*卫星钟速(s/s)*/
    private double a2;/*卫星钟速变化率(s/s2)*/
    private double IODE;/*星历表数据龄期*/
    /**开普勒六参数及轨道摄动九参数*/
    private double Crs;
    private double Delta_n;
    private double M0;
    private double Cuc;
    private double e;
    private double Cus;
    private double squrt_A;
    private double Toe;
    private double Cic;
    private double OMEGA;
    private double CIS;
    private double i0;
    private double Crc;
    private double omega;
    private double OMEGA_DOT;
    private double IDOT;
    private double TGD;

    public double getTGD() {
        return TGD;
    }

    public void setTGD(double TGD) {
        this.TGD = TGD;
    }

    /**
 * get()和set()函数
 * */
    public String getPrn() {
        return prn;
    }
    public void setPrn(String prn) {
        this.prn = prn;
    }
    public GPST getGpst() {
        return gpst;
    }
    public void setGpst(GPST gpst) {
        this.gpst = gpst;
    }
    public double getA0() {
        return a0;
    }
    public void setA0(double a0) {
        this.a0 = a0;
    }
    public double getA1() {
        return a1;
    }
    public void setA1(double a1) {
        this.a1 = a1;
    }
    public double getA2() {
        return a2;
    }
    public void setA2(double a2) {
        this.a2 = a2;
    }
    public double getIODE() {
        return IODE;
    }
    public void setIODE(double IODE) {
        this.IODE = IODE;
    }
    public double getCrs() {
        return Crs;
    }
    public void setCrs(double crs) {
        Crs = crs;
    }
    public double getDelta_n() {
        return Delta_n;
    }
    public void setDelta_n(double delta_n) {
        Delta_n = delta_n;
    }
    public double getM0() {
        return M0;
    }
    public void setM0(double m0) {
        M0 = m0;
    }
    public double getCuc() {
        return Cuc;
    }
    public void setCuc(double cuc) {
        Cuc = cuc;
    }
    public double getE() {
        return e;
    }
    public void setE(double e) {
        this.e = e;
    }
    public double getCus() {
        return Cus;
    }
    public void setCus(double cus) {
        Cus = cus;
    }
    public double getSqurt_A() {
        return squrt_A;
    }
    public void setSqurt_A(double squrt_A) {
        this.squrt_A = squrt_A;
    }
    public double getToe() {
        return Toe;
    }
    public void setToe(double toe) {
        Toe = toe;
    }
    public double getCic() {
        return Cic;
    }
    public void setCic(double cic) {
        Cic = cic;
    }
    public double getOMEGA() {
        return OMEGA;
    }
    public void setOMEGA(double OMEGA) {
        this.OMEGA = OMEGA;
    }
    public double getCIS() {
        return CIS;
    }
    public void setCIS(double CIS) {
        this.CIS = CIS;
    }
    public double getI0() {
        return i0;
    }
    public void setI0(double i0) {
        this.i0 = i0;
    }
    public double getCrc() {
        return Crc;
    }
    public void setCrc(double crc) {
        Crc = crc;
    }
    public double getOmega() {
        return omega;
    }
    public void setOmega(double omega) {
        this.omega = omega;
    }
    public double getOMEGA_DOT() {
        return OMEGA_DOT;
    }
    public void setOMEGA_DOT(double OMEGA_DOT) {
        this.OMEGA_DOT = OMEGA_DOT;
    }
    public double getIDOT() {
        return IDOT;
    }
    public void setIDOT(double IDOT) {
        this.IDOT = IDOT;
    }
}

最后,接下来,根据广播星历数据计算某一信号发射时刻中圆轨道GPS卫星的空间大地坐标系下的坐标(GPS采用的坐标系是WGS-84),其实现的代码将在下一篇文章给出。

你可能感兴趣的:(Java,GNSS,SPP)