RinexNavigation.java

  1. /* Copyright 2002-2024 CS GROUP
  2.  * Licensed to CS GROUP (CS) under one or more
  3.  * contributor license agreements.  See the NOTICE file distributed with
  4.  * this work for additional information regarding copyright ownership.
  5.  * CS licenses this file to You under the Apache License, Version 2.0
  6.  * (the "License"); you may not use this file except in compliance with
  7.  * the License.  You may obtain a copy of the License at
  8.  *
  9.  *   http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package org.orekit.files.rinex.navigation;

  18. import java.util.ArrayList;
  19. import java.util.Collections;
  20. import java.util.HashMap;
  21. import java.util.List;
  22. import java.util.Map;

  23. import org.orekit.files.rinex.RinexFile;
  24. import org.orekit.gnss.SatelliteSystem;
  25. import org.orekit.models.earth.ionosphere.KlobucharIonoModel;
  26. import org.orekit.models.earth.ionosphere.NeQuickModel;
  27. import org.orekit.propagation.analytical.gnss.data.BeidouCivilianNavigationMessage;
  28. import org.orekit.propagation.analytical.gnss.data.BeidouLegacyNavigationMessage;
  29. import org.orekit.propagation.analytical.gnss.data.GLONASSNavigationMessage;
  30. import org.orekit.propagation.analytical.gnss.data.GPSCivilianNavigationMessage;
  31. import org.orekit.propagation.analytical.gnss.data.GPSLegacyNavigationMessage;
  32. import org.orekit.propagation.analytical.gnss.data.GalileoNavigationMessage;
  33. import org.orekit.propagation.analytical.gnss.data.IRNSSNavigationMessage;
  34. import org.orekit.propagation.analytical.gnss.data.QZSSCivilianNavigationMessage;
  35. import org.orekit.propagation.analytical.gnss.data.QZSSLegacyNavigationMessage;
  36. import org.orekit.propagation.analytical.gnss.data.SBASNavigationMessage;

  37. /**
  38.  * Represents a parsed RINEX navigation messages files.
  39.  * @author Bryan Cazabonne
  40.  * @author Luc Maisonobe
  41.  * @since 11.0
  42.  */
  43. public class RinexNavigation extends RinexFile<RinexNavigationHeader> {

  44.     /** The 4 Klobuchar coefficients of a cubic equation representing the amplitude of the vertical delay. */
  45.     private double[] klobucharAlpha;

  46.     /** The 4 coefficients of a cubic equation representing the period of the model. */
  47.     private double[] klobucharBeta;

  48.     /** The three ionospheric coefficients broadcast in the Galileo navigation message. */
  49.     private double[] neQuickAlpha;

  50.     /** A map containing the GPS navigation messages. */
  51.     private final Map<String, List<GPSLegacyNavigationMessage>> gpsLegacyData;

  52.     /** A map containing the GPS navigation messages. */
  53.     private final Map<String, List<GPSCivilianNavigationMessage>> gpsCivilianData;

  54.     /** A map containing the Galileo navigation messages. */
  55.     private final Map<String, List<GalileoNavigationMessage>> galileoData;

  56.     /** A map containing the Beidou navigation messages. */
  57.     private final Map<String, List<BeidouLegacyNavigationMessage>> beidouLegacyData;

  58.     /** A map containing the Beidou navigation messages. */
  59.     private final Map<String, List<BeidouCivilianNavigationMessage>> beidouCivilianData;

  60.     /** A map containing the QZSS navigation messages. */
  61.     private final Map<String, List<QZSSLegacyNavigationMessage>> qzssLegacyData;

  62.     /** A map containing the QZSS navigation messages. */
  63.     private final Map<String, List<QZSSCivilianNavigationMessage>> qzssCivilianData;

  64.     /** A map containing the IRNSS navigation messages. */
  65.     private final Map<String, List<IRNSSNavigationMessage>> irnssData;

  66.     /** A map containing the GLONASS navigation messages. */
  67.     private final Map<String, List<GLONASSNavigationMessage>> glonassData;

  68.     /** A map containing the SBAS navigation messages. */
  69.     private final Map<String, List<SBASNavigationMessage>> sbasData;

  70.     /** System time offsets.
  71.      * @since 12.0
  72.      */
  73.     private final List<SystemTimeOffsetMessage> systemTimeOffsets;

  74.     /** Earth orientation parameters.
  75.      * @since 12.0
  76.      */
  77.     private final List<EarthOrientationParameterMessage> eops;

  78.     /** Ionosphere Klobuchar messages.
  79.      * @since 12.0
  80.      */
  81.     private final List<IonosphereKlobucharMessage> klobucharMessages;

  82.     /** Ionosphere Nequick G messages.
  83.      * @since 12.0
  84.      */
  85.     private final List<IonosphereNequickGMessage> nequickGMessages;

  86.     /** Ionosphere BDGIM messages.
  87.      * @since 12.0
  88.      */
  89.     private final List<IonosphereBDGIMMessage> bdgimMessages;

  90.     /** Constructor. */
  91.     public RinexNavigation() {
  92.         super(new RinexNavigationHeader());
  93.         this.gpsLegacyData      = new HashMap<>();
  94.         this.gpsCivilianData    = new HashMap<>();
  95.         this.galileoData        = new HashMap<>();
  96.         this.beidouLegacyData   = new HashMap<>();
  97.         this.beidouCivilianData = new HashMap<>();
  98.         this.qzssLegacyData     = new HashMap<>();
  99.         this.qzssCivilianData   = new HashMap<>();
  100.         this.irnssData          = new HashMap<>();
  101.         this.glonassData        = new HashMap<>();
  102.         this.sbasData           = new HashMap<>();
  103.         this.systemTimeOffsets  = new ArrayList<>();
  104.         this.eops               = new ArrayList<>();
  105.         this.klobucharMessages  = new ArrayList<>();
  106.         this.nequickGMessages   = new ArrayList<>();
  107.         this.bdgimMessages      = new ArrayList<>();
  108.     }

  109.     /**
  110.      * Get the "alpha" ionospheric parameters.
  111.      * <p>
  112.      * They are used to initialize the {@link KlobucharIonoModel}.
  113.      * </p>
  114.      * @return the "alpha" ionospheric parameters
  115.      */
  116.     public double[] getKlobucharAlpha() {
  117.         return klobucharAlpha.clone();
  118.     }

  119.     /**
  120.      * Set the "alpha" ionspheric parameters.
  121.      * @param klobucharAlpha the "alpha" ionspheric parameters to set
  122.      */
  123.     public void setKlobucharAlpha(final double[] klobucharAlpha) {
  124.         this.klobucharAlpha = klobucharAlpha.clone();
  125.     }

  126.     /**
  127.      * Get the "beta" ionospheric parameters.
  128.      * <p>
  129.      * They are used to initialize the {@link KlobucharIonoModel}.
  130.      * </p>
  131.      * @return the "beta" ionospheric parameters
  132.      */
  133.     public double[] getKlobucharBeta() {
  134.         return klobucharBeta.clone();
  135.     }

  136.     /**
  137.      * Set the "beta" ionospheric parameters.
  138.      * @param klobucharBeta the "beta" ionospheric parameters to set
  139.      */
  140.     public void setKlobucharBeta(final double[] klobucharBeta) {
  141.         this.klobucharBeta = klobucharBeta.clone();
  142.     }

  143.     /**
  144.      * Get the "alpha" ionospheric parameters.
  145.      * <p>
  146.      * They are used to initialize the {@link NeQuickModel}.
  147.      * </p>
  148.      * @return the "alpha" ionospheric parameters
  149.      */
  150.     public double[] getNeQuickAlpha() {
  151.         return neQuickAlpha.clone();
  152.     }

  153.     /**
  154.      * Set the "alpha" ionospheric parameters.
  155.      * @param neQuickAlpha the "alpha" ionospheric parameters to set
  156.      */
  157.     public void setNeQuickAlpha(final double[] neQuickAlpha) {
  158.         this.neQuickAlpha = neQuickAlpha.clone();
  159.     }

  160.     /**
  161.      * Get all the GPS legacy navigation messages contained in the file.
  162.      * @return an unmodifiable list of GPS legacy navigation messages
  163.      * @since 12.0
  164.      */
  165.     public Map<String, List<GPSLegacyNavigationMessage>> getGPSLegacyNavigationMessages() {
  166.         return Collections.unmodifiableMap(gpsLegacyData);
  167.     }

  168.     /**
  169.      * Get the GPS legacy navigation messages for the given satellite Id.
  170.      * @param satId satellite Id (i.e. Satellite System (e.g. G) + satellite number)
  171.      * @return an unmodifiable list of GPS legacy navigation messages
  172.      * @since 12.0
  173.      */
  174.     public List<GPSLegacyNavigationMessage> getGPSLegacyNavigationMessages(final String satId) {
  175.         return Collections.unmodifiableList(gpsLegacyData.get(satId));
  176.     }

  177.     /**
  178.      * Add a GPS legacy navigation message to the list.
  179.      * @param message message to add
  180.      * @since 12.0
  181.      */
  182.     public void addGPSLegacyNavigationMessage(final GPSLegacyNavigationMessage message) {
  183.         final int    gpsPRN = message.getPRN();
  184.         final String prnString = gpsPRN < 10 ? "0" + String.valueOf(gpsPRN) : String.valueOf(gpsPRN);
  185.         final String satId = SatelliteSystem.GPS.getKey() + prnString;
  186.         gpsLegacyData.putIfAbsent(satId, new ArrayList<>());
  187.         gpsLegacyData.get(satId).add(message);
  188.     }

  189.     /**
  190.      * Get all the GPS civilian navigation messages contained in the file.
  191.      * @return an unmodifiable list of GPS civilian navigation messages
  192.      * @since 12.0
  193.      */
  194.     public Map<String, List<GPSCivilianNavigationMessage>> getGPSCivilianNavigationMessages() {
  195.         return Collections.unmodifiableMap(gpsCivilianData);
  196.     }

  197.     /**
  198.      * Get the GPS civilian navigation messages for the given satellite Id.
  199.      * @param satId satellite Id (i.e. Satellite System (e.g. G) + satellite number)
  200.      * @return an unmodifiable list of GPS civilian navigation messages
  201.      * @since 12.0
  202.      */
  203.     public List<GPSCivilianNavigationMessage> getGPSCivilianNavigationMessages(final String satId) {
  204.         return Collections.unmodifiableList(gpsCivilianData.get(satId));
  205.     }

  206.     /**
  207.      * Add a GPS civilian navigation message to the list.
  208.      * @param message message to add
  209.      * @since 12.0
  210.      */
  211.     public void addGPSLegacyNavigationMessage(final GPSCivilianNavigationMessage message) {
  212.         final int    gpsPRN = message.getPRN();
  213.         final String prnString = gpsPRN < 10 ? "0" + String.valueOf(gpsPRN) : String.valueOf(gpsPRN);
  214.         final String satId = SatelliteSystem.GPS.getKey() + prnString;
  215.         gpsCivilianData.putIfAbsent(satId, new ArrayList<>());
  216.         gpsCivilianData.get(satId).add(message);
  217.     }

  218.     /**
  219.      * Get all the Galileo navigation messages contained in the file.
  220.      * @return an unmodifiable list of Galileo navigation messages
  221.      */
  222.     public Map<String, List<GalileoNavigationMessage>> getGalileoNavigationMessages() {
  223.         return Collections.unmodifiableMap(galileoData);
  224.     }

  225.     /**
  226.      * Get the Galileo navigation messages for the given satellite Id.
  227.      * @param satId satellite Id (i.e. Satellite System (e.g. E) + satellite number)
  228.      * @return an unmodifiable list of Galileo navigation messages
  229.      */
  230.     public List<GalileoNavigationMessage> getGalileoNavigationMessages(final String satId) {
  231.         return Collections.unmodifiableList(galileoData.get(satId));
  232.     }

  233.     /**
  234.      * Add a Galileo navigation message to the list.
  235.      * @param message message to add
  236.      */
  237.     public void addGalileoNavigationMessage(final GalileoNavigationMessage message) {
  238.         final int    galPRN = message.getPRN();
  239.         final String prnString = galPRN < 10 ? "0" + String.valueOf(galPRN) : String.valueOf(galPRN);
  240.         final String satId = SatelliteSystem.GALILEO.getKey() + prnString;
  241.         galileoData.putIfAbsent(satId, new ArrayList<>());
  242.         galileoData.get(satId).add(message);
  243.     }

  244.     /**
  245.      * Get all the Beidou navigation messages contained in the file.
  246.      * @return an unmodifiable list of Beidou navigation messages
  247.      * @since 12.0
  248.      */
  249.     public Map<String, List<BeidouLegacyNavigationMessage>> getBeidouLegacyNavigationMessages() {
  250.         return Collections.unmodifiableMap(beidouLegacyData);
  251.     }

  252.     /**
  253.      * Get the Beidou navigation messages for the given satellite Id.
  254.      * @param satId satellite Id (i.e. Satellite System (e.g. C) + satellite number)
  255.      * @return an unmodifiable list of Beidou navigation messages
  256.      * @since 12.0
  257.      */
  258.     public List<BeidouLegacyNavigationMessage> getBeidouLegacyNavigationMessages(final String satId) {
  259.         return Collections.unmodifiableList(beidouLegacyData.get(satId));
  260.     }

  261.     /**
  262.      * Add a Beidou navigation message to the list.
  263.      * @param message message to add
  264.      * @since 12.0
  265.      */
  266.     public void addBeidouLegacyNavigationMessage(final BeidouLegacyNavigationMessage message) {
  267.         final int    bdtPRN = message.getPRN();
  268.         final String prnString = bdtPRN < 10 ? "0" + String.valueOf(bdtPRN) : String.valueOf(bdtPRN);
  269.         final String satId = SatelliteSystem.BEIDOU.getKey() + prnString;
  270.         beidouLegacyData.putIfAbsent(satId, new ArrayList<>());
  271.         beidouLegacyData.get(satId).add(message);
  272.     }

  273.     /**
  274.      * Get all the Beidou navigation messages contained in the file.
  275.      * @return an unmodifiable list of Beidou navigation messages
  276.      * @since 12.0
  277.      */
  278.     public Map<String, List<BeidouCivilianNavigationMessage>> getBeidouCivilianNavigationMessages() {
  279.         return Collections.unmodifiableMap(beidouCivilianData);
  280.     }

  281.     /**
  282.      * Get the Beidou navigation messages for the given satellite Id.
  283.      * @param satId satellite Id (i.e. Satellite System (e.g. C) + satellite number)
  284.      * @return an unmodifiable list of Beidou navigation messages
  285.      * @since 12.0
  286.      */
  287.     public List<BeidouCivilianNavigationMessage> getBeidouCivilianNavigationMessages(final String satId) {
  288.         return Collections.unmodifiableList(beidouCivilianData.get(satId));
  289.     }

  290.     /**
  291.      * Add a Beidou navigation message to the list.
  292.      * @param message message to add
  293.      * @since 12.0
  294.      */
  295.     public void addBeidouCivilianNavigationMessage(final BeidouCivilianNavigationMessage message) {
  296.         final int    bdtPRN = message.getPRN();
  297.         final String prnString = bdtPRN < 10 ? "0" + String.valueOf(bdtPRN) : String.valueOf(bdtPRN);
  298.         final String satId = SatelliteSystem.BEIDOU.getKey() + prnString;
  299.         beidouCivilianData.putIfAbsent(satId, new ArrayList<>());
  300.         beidouCivilianData.get(satId).add(message);
  301.     }

  302.     /**
  303.      * Get all the QZSS navigation messages contained in the file.
  304.      * @return an unmodifiable list of QZSS navigation messages
  305.      * @since 12.0
  306.      */
  307.     public Map<String, List<QZSSLegacyNavigationMessage>> getQZSSLegacyNavigationMessages() {
  308.         return Collections.unmodifiableMap(qzssLegacyData);
  309.     }

  310.     /**
  311.      * Get the QZSS navigation messages for the given satellite Id.
  312.      * @param satId satellite Id (i.e. Satellite System (e.g. J) + satellite number)
  313.      * @return an unmodifiable list of QZSS navigation messages
  314.      * @since 12.0
  315.      */
  316.     public List<QZSSLegacyNavigationMessage> getQZSSLegacyNavigationMessages(final String satId) {
  317.         return Collections.unmodifiableList(qzssLegacyData.get(satId));
  318.     }

  319.     /**
  320.      * Add a QZSS navigation message to the list.
  321.      * @param message message to add
  322.      * @since 12.0
  323.      */
  324.     public void addQZSSLegacyNavigationMessage(final QZSSLegacyNavigationMessage message) {
  325.         final int    qzsPRN = message.getPRN();
  326.         final String prnString = qzsPRN < 10 ? "0" + String.valueOf(qzsPRN) : String.valueOf(qzsPRN);
  327.         final String satId = SatelliteSystem.QZSS.getKey() + prnString;
  328.         qzssLegacyData.putIfAbsent(satId, new ArrayList<>());
  329.         qzssLegacyData.get(satId).add(message);
  330.     }

  331.     /**
  332.      * Get all the QZSS navigation messages contained in the file.
  333.      * @return an unmodifiable list of QZSS navigation messages
  334.      * @since 12.0
  335.      */
  336.     public Map<String, List<QZSSCivilianNavigationMessage>> getQZSSCivilianNavigationMessages() {
  337.         return Collections.unmodifiableMap(qzssCivilianData);
  338.     }

  339.     /**
  340.      * Get the QZSS navigation messages for the given satellite Id.
  341.      * @param satId satellite Id (i.e. Satellite System (e.g. J) + satellite number)
  342.      * @return an unmodifiable list of QZSS navigation messages
  343.      * @since 12.0
  344.      */
  345.     public List<QZSSCivilianNavigationMessage> getQZSSCivilianNavigationMessages(final String satId) {
  346.         return Collections.unmodifiableList(qzssCivilianData.get(satId));
  347.     }

  348.     /**
  349.      * Add a QZSS navigation message to the list.
  350.      * @param message message to add
  351.      * @since 12.0
  352.      */
  353.     public void addQZSSCivilianNavigationMessage(final QZSSCivilianNavigationMessage message) {
  354.         final int    qzsPRN = message.getPRN();
  355.         final String prnString = qzsPRN < 10 ? "0" + String.valueOf(qzsPRN) : String.valueOf(qzsPRN);
  356.         final String satId = SatelliteSystem.QZSS.getKey() + prnString;
  357.         qzssCivilianData.putIfAbsent(satId, new ArrayList<>());
  358.         qzssCivilianData.get(satId).add(message);
  359.     }

  360.     /**
  361.      * Get all the IRNSS navigation messages contained in the file.
  362.      * @return an unmodifiable list of IRNSS navigation messages
  363.      */
  364.     public Map<String, List<IRNSSNavigationMessage>> getIRNSSNavigationMessages() {
  365.         return Collections.unmodifiableMap(irnssData);
  366.     }

  367.     /**
  368.      * Get the IRNSS navigation messages for the given satellite Id.
  369.      * @param satId satellite Id (i.e. Satellite System (e.g. I) + satellite number)
  370.      * @return an unmodifiable list of IRNSS navigation messages
  371.      */
  372.     public List<IRNSSNavigationMessage> getIRNSSNavigationMessages(final String satId) {
  373.         return Collections.unmodifiableList(irnssData.get(satId));
  374.     }

  375.     /**
  376.      * Add a IRNSS navigation message to the list.
  377.      * @param message message to add
  378.      */
  379.     public void addIRNSSNavigationMessage(final IRNSSNavigationMessage message) {
  380.         final int    irsPRN = message.getPRN();
  381.         final String prnString = irsPRN < 10 ? "0" + String.valueOf(irsPRN) : String.valueOf(irsPRN);
  382.         final String satId = SatelliteSystem.IRNSS.getKey() + prnString;
  383.         irnssData.putIfAbsent(satId, new ArrayList<>());
  384.         irnssData.get(satId).add(message);
  385.     }

  386.     /**
  387.      * Get all the Glonass navigation messages contained in the file.
  388.      * @return an unmodifiable list of Glonass navigation messages
  389.      */
  390.     public Map<String, List<GLONASSNavigationMessage>> getGlonassNavigationMessages() {
  391.         return Collections.unmodifiableMap(glonassData);
  392.     }

  393.     /**
  394.      * Get the Glonass navigation messages for the given satellite Id.
  395.      * @param satId satellite Id (i.e. Satellite System (e.g. R) + satellite number)
  396.      * @return an unmodifiable list of Glonass navigation messages
  397.      */
  398.     public List<GLONASSNavigationMessage> getGlonassNavigationMessages(final String satId) {
  399.         return Collections.unmodifiableList(glonassData.get(satId));
  400.     }

  401.     /**
  402.      * Add a Glonass navigation message to the list.
  403.      * @param message message to add
  404.      */
  405.     public void addGlonassNavigationMessage(final GLONASSNavigationMessage message) {
  406.         final int    gloPRN = message.getPRN();
  407.         final String prnString = gloPRN < 10 ? "0" + String.valueOf(gloPRN) : String.valueOf(gloPRN);
  408.         final String satId = SatelliteSystem.GLONASS.getKey() + prnString;
  409.         glonassData.putIfAbsent(satId, new ArrayList<>());
  410.         glonassData.get(satId).add(message);
  411.     }

  412.     /**
  413.      * Get all the SBAS navigation messages contained in the file.
  414.      * @return an unmodifiable list of SBAS navigation messages
  415.      */
  416.     public Map<String, List<SBASNavigationMessage>> getSBASNavigationMessages() {
  417.         return Collections.unmodifiableMap(sbasData);
  418.     }

  419.     /**
  420.      * Get the SBAS navigation messages for the given satellite Id.
  421.      * @param satId satellite Id (i.e. Satellite System (e.g. S) + satellite number)
  422.      * @return an unmodifiable list of SBAS navigation messages
  423.      */
  424.     public List<SBASNavigationMessage> getSBASNavigationMessages(final String satId) {
  425.         return Collections.unmodifiableList(sbasData.get(satId));
  426.     }

  427.     /**
  428.      * Add a SBAS navigation message to the list.
  429.      * @param message message to add
  430.      */
  431.     public void addSBASNavigationMessage(final SBASNavigationMessage message) {
  432.         final int    sbsPRN = message.getPRN();
  433.         final String prnString = sbsPRN < 10 ? "0" + String.valueOf(sbsPRN) : String.valueOf(sbsPRN);
  434.         final String satId = SatelliteSystem.SBAS.getKey() + prnString;
  435.         sbasData.putIfAbsent(satId, new ArrayList<>());
  436.         sbasData.get(satId).add(message);
  437.     }

  438.     /**
  439.      * Get the system time offsets.
  440.      * @return an unmodifiable list of system time offsets
  441.      * @since 12.0
  442.      */
  443.     public List<SystemTimeOffsetMessage> getSystemTimeOffsets() {
  444.         return Collections.unmodifiableList(systemTimeOffsets);
  445.     }

  446.     /**
  447.      * Add a system time offset.
  448.      * @param systemTimeOffset system time offset message
  449.      * @since 12.0
  450.      */
  451.     public void addSystemTimeOffset(final SystemTimeOffsetMessage systemTimeOffset) {
  452.         systemTimeOffsets.add(systemTimeOffset);
  453.     }

  454.     /**
  455.      * Get the Earth orientation parameters.
  456.      * @return an unmodifiable list of Earth orientation parameters
  457.      * @since 12.0
  458.      */
  459.     public List<EarthOrientationParameterMessage> getEarthOrientationParameters() {
  460.         return Collections.unmodifiableList(eops);
  461.     }

  462.     /**
  463.      * Add an Earth orientation parameter.
  464.      * @param eop Earth orientation oarameter message
  465.      * @since 12.0
  466.      */
  467.     public void addEarthOrientationParameter(final EarthOrientationParameterMessage eop) {
  468.         eops.add(eop);
  469.     }

  470.     /**
  471.      * Get the ionosphere Klobuchar messages.
  472.      * @return an unmodifiable list of ionosphere Klobuchar messages
  473.      * @since 12.0
  474.      */
  475.     public List<IonosphereKlobucharMessage> getKlobucharMessages() {
  476.         return Collections.unmodifiableList(klobucharMessages);
  477.     }

  478.     /**
  479.      * Add an ionosphere Klobuchar message.
  480.      * @param klobuchar ionosphere Klobuchar message
  481.      * @since 12.0
  482.      */
  483.     public void addKlobucharMessage(final IonosphereKlobucharMessage klobuchar) {
  484.         klobucharMessages.add(klobuchar);
  485.     }

  486.     /**
  487.      * Get the ionosphere Nequick-G messages.
  488.      * @return an unmodifiable list of ionosphere Nequick-G messages
  489.      * @since 12.0
  490.      */
  491.     public List<IonosphereNequickGMessage> getNequickGMessages() {
  492.         return Collections.unmodifiableList(nequickGMessages);
  493.     }

  494.     /**
  495.      * Add an ionosphere Nequick-G message.
  496.      * @param nequickG ionosphere Nequick-G message
  497.      * @since 12.0
  498.      */
  499.     public void addNequickGMessage(final IonosphereNequickGMessage nequickG) {
  500.         nequickGMessages.add(nequickG);
  501.     }

  502.     /**
  503.      * Get the ionosphere BDGIM messages.
  504.      * @return an unmodifiable list of ionosphere BDGIM messages
  505.      * @since 12.0
  506.      */
  507.     public List<IonosphereBDGIMMessage> getBDGIMMessages() {
  508.         return Collections.unmodifiableList(bdgimMessages);
  509.     }

  510.     /**
  511.      * Add an ionosphere BDGIM message.
  512.      * @param bdgim ionosphere BDGIM message
  513.      * @since 12.0
  514.      */
  515.     public void addBDGIMMessage(final IonosphereBDGIMMessage bdgim) {
  516.         bdgimMessages.add(bdgim);
  517.     }

  518. }