RinexNavigation.java

  1. /* Copyright 2002-2025 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.propagation.analytical.gnss.data.BeidouCivilianNavigationMessage;
  26. import org.orekit.propagation.analytical.gnss.data.BeidouLegacyNavigationMessage;
  27. import org.orekit.propagation.analytical.gnss.data.GLONASSFdmaNavigationMessage;
  28. import org.orekit.propagation.analytical.gnss.data.GPSCivilianNavigationMessage;
  29. import org.orekit.propagation.analytical.gnss.data.GPSLegacyNavigationMessage;
  30. import org.orekit.propagation.analytical.gnss.data.GalileoNavigationMessage;
  31. import org.orekit.propagation.analytical.gnss.data.NavICL1NvNavigationMessage;
  32. import org.orekit.propagation.analytical.gnss.data.NavICLegacyNavigationMessage;
  33. import org.orekit.propagation.analytical.gnss.data.QZSSCivilianNavigationMessage;
  34. import org.orekit.propagation.analytical.gnss.data.QZSSLegacyNavigationMessage;
  35. import org.orekit.propagation.analytical.gnss.data.SBASNavigationMessage;

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

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

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

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

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

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

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

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

  57.     /** A map containing the NavIC navigation messages. */
  58.     private final Map<String, List<NavICLegacyNavigationMessage>> navicLegacyData;

  59.     /** A map containing the NavIC navigation messages.
  60.      * @since 13.0
  61.      */
  62.     private final Map<String, List<NavICL1NvNavigationMessage>> navicL1NVData;

  63.     /** A map containing the GLONASS navigation messages. */
  64.     private final Map<String, List<GLONASSFdmaNavigationMessage>> glonassData;

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

  67.     /** System time offsets.
  68.      * @since 12.0
  69.      */
  70.     private final List<SystemTimeOffsetMessage> systemTimeOffsets;

  71.     /** Earth orientation parameters.
  72.      * @since 12.0
  73.      */
  74.     private final List<EarthOrientationParameterMessage> eops;

  75.     /** Ionosphere Klobuchar messages.
  76.      * @since 12.0
  77.      */
  78.     private final List<IonosphereKlobucharMessage> klobucharMessages;

  79.     /** Ionosphere Nequick G messages.
  80.      * @since 12.0
  81.      */
  82.     private final List<IonosphereNequickGMessage> nequickGMessages;

  83.     /** Ionosphere BDGIM messages.
  84.      * @since 12.0
  85.      */
  86.     private final List<IonosphereBDGIMMessage> bdgimMessages;

  87.     /** Ionosphere NavIC Klobuchar messages.
  88.      * @since 14.0
  89.      */
  90.     private final List<IonosphereNavICKlobucharMessage> navICKlobucharMessages;

  91.     /** Ionosphere NavIC NeQuick N messages.
  92.      * @since 14.0
  93.      */
  94.     private final List<IonosphereNavICNeQuickNMessage> navICNeQuickNMessages;

  95.     /** Ionosphere GLONASS CDMS messages.
  96.      * @since 14.0
  97.      */
  98.     private final List<IonosphereGlonassCdmsMessage> glonassCDMSMessages;

  99.     /** Constructor. */
  100.     public RinexNavigation() {
  101.         super(new RinexNavigationHeader());
  102.         this.gpsLegacyData          = new HashMap<>();
  103.         this.gpsCivilianData        = new HashMap<>();
  104.         this.galileoData            = new HashMap<>();
  105.         this.beidouLegacyData       = new HashMap<>();
  106.         this.beidouCivilianData     = new HashMap<>();
  107.         this.qzssLegacyData         = new HashMap<>();
  108.         this.qzssCivilianData       = new HashMap<>();
  109.         this.navicLegacyData        = new HashMap<>();
  110.         this.navicL1NVData          = new HashMap<>();
  111.         this.glonassData            = new HashMap<>();
  112.         this.sbasData               = new HashMap<>();
  113.         this.systemTimeOffsets      = new ArrayList<>();
  114.         this.eops                   = new ArrayList<>();
  115.         this.klobucharMessages      = new ArrayList<>();
  116.         this.nequickGMessages       = new ArrayList<>();
  117.         this.bdgimMessages          = new ArrayList<>();
  118.         this.navICKlobucharMessages = new ArrayList<>();
  119.         this.navICNeQuickNMessages  = new ArrayList<>();
  120.         this.glonassCDMSMessages    = new ArrayList<>();
  121.     }

  122.     /**
  123.      * Get all the GPS legacy navigation messages contained in the file.
  124.      * @return an unmodifiable list of GPS legacy navigation messages
  125.      * @since 12.0
  126.      */
  127.     public Map<String, List<GPSLegacyNavigationMessage>> getGPSLegacyNavigationMessages() {
  128.         return Collections.unmodifiableMap(gpsLegacyData);
  129.     }

  130.     /**
  131.      * Get the GPS legacy navigation messages for the given satellite Id.
  132.      * @param satId satellite Id (i.e. Satellite System (e.g. G) + satellite number)
  133.      * @return an unmodifiable list of GPS legacy navigation messages
  134.      * @since 12.0
  135.      */
  136.     public List<GPSLegacyNavigationMessage> getGPSLegacyNavigationMessages(final String satId) {
  137.         return Collections.unmodifiableList(gpsLegacyData.get(satId));
  138.     }

  139.     /**
  140.      * Add a GPS legacy navigation message to the list.
  141.      * @param message message to add
  142.      * @since 12.0
  143.      */
  144.     public void addGPSLegacyNavigationMessage(final GPSLegacyNavigationMessage message) {
  145.         final int    gpsPRN = message.getPRN();
  146.         final String prnString = gpsPRN < 10 ? "0" + gpsPRN : String.valueOf(gpsPRN);
  147.         final String satId = SatelliteSystem.GPS.getKey() + prnString;
  148.         gpsLegacyData.putIfAbsent(satId, new ArrayList<>());
  149.         gpsLegacyData.get(satId).add(message);
  150.     }

  151.     /**
  152.      * Get all the GPS civilian navigation messages contained in the file.
  153.      * @return an unmodifiable list of GPS civilian navigation messages
  154.      * @since 12.0
  155.      */
  156.     public Map<String, List<GPSCivilianNavigationMessage>> getGPSCivilianNavigationMessages() {
  157.         return Collections.unmodifiableMap(gpsCivilianData);
  158.     }

  159.     /**
  160.      * Get the GPS civilian navigation messages for the given satellite Id.
  161.      * @param satId satellite Id (i.e. Satellite System (e.g. G) + satellite number)
  162.      * @return an unmodifiable list of GPS civilian navigation messages
  163.      * @since 12.0
  164.      */
  165.     public List<GPSCivilianNavigationMessage> getGPSCivilianNavigationMessages(final String satId) {
  166.         return Collections.unmodifiableList(gpsCivilianData.get(satId));
  167.     }

  168.     /**
  169.      * Add a GPS civilian navigation message to the list.
  170.      * @param message message to add
  171.      * @since 13.0
  172.      */
  173.     public void addGPSCivilianNavigationMessage(final GPSCivilianNavigationMessage message) {
  174.         final int    gpsPRN = message.getPRN();
  175.         final String prnString = gpsPRN < 10 ? "0" + gpsPRN : String.valueOf(gpsPRN);
  176.         final String satId = SatelliteSystem.GPS.getKey() + prnString;
  177.         gpsCivilianData.putIfAbsent(satId, new ArrayList<>());
  178.         gpsCivilianData.get(satId).add(message);
  179.     }

  180.     /**
  181.      * Get all the Galileo navigation messages contained in the file.
  182.      * @return an unmodifiable list of Galileo navigation messages
  183.      */
  184.     public Map<String, List<GalileoNavigationMessage>> getGalileoNavigationMessages() {
  185.         return Collections.unmodifiableMap(galileoData);
  186.     }

  187.     /**
  188.      * Get the Galileo navigation messages for the given satellite Id.
  189.      * @param satId satellite Id (i.e. Satellite System (e.g. E) + satellite number)
  190.      * @return an unmodifiable list of Galileo navigation messages
  191.      */
  192.     public List<GalileoNavigationMessage> getGalileoNavigationMessages(final String satId) {
  193.         return Collections.unmodifiableList(galileoData.get(satId));
  194.     }

  195.     /**
  196.      * Add a Galileo navigation message to the list.
  197.      * @param message message to add
  198.      */
  199.     public void addGalileoNavigationMessage(final GalileoNavigationMessage message) {
  200.         final int    galPRN = message.getPRN();
  201.         final String prnString = galPRN < 10 ? "0" + galPRN : String.valueOf(galPRN);
  202.         final String satId = SatelliteSystem.GALILEO.getKey() + prnString;
  203.         galileoData.putIfAbsent(satId, new ArrayList<>());
  204.         galileoData.get(satId).add(message);
  205.     }

  206.     /**
  207.      * Get all the Beidou navigation messages contained in the file.
  208.      * @return an unmodifiable list of Beidou navigation messages
  209.      * @since 12.0
  210.      */
  211.     public Map<String, List<BeidouLegacyNavigationMessage>> getBeidouLegacyNavigationMessages() {
  212.         return Collections.unmodifiableMap(beidouLegacyData);
  213.     }

  214.     /**
  215.      * Get the Beidou navigation messages for the given satellite Id.
  216.      * @param satId satellite Id (i.e. Satellite System (e.g. C) + satellite number)
  217.      * @return an unmodifiable list of Beidou navigation messages
  218.      * @since 12.0
  219.      */
  220.     public List<BeidouLegacyNavigationMessage> getBeidouLegacyNavigationMessages(final String satId) {
  221.         return Collections.unmodifiableList(beidouLegacyData.get(satId));
  222.     }

  223.     /**
  224.      * Add a Beidou navigation message to the list.
  225.      * @param message message to add
  226.      * @since 12.0
  227.      */
  228.     public void addBeidouLegacyNavigationMessage(final BeidouLegacyNavigationMessage message) {
  229.         final int    bdtPRN = message.getPRN();
  230.         final String prnString = bdtPRN < 10 ? "0" + bdtPRN : String.valueOf(bdtPRN);
  231.         final String satId = SatelliteSystem.BEIDOU.getKey() + prnString;
  232.         beidouLegacyData.putIfAbsent(satId, new ArrayList<>());
  233.         beidouLegacyData.get(satId).add(message);
  234.     }

  235.     /**
  236.      * Get all the Beidou navigation messages contained in the file.
  237.      * @return an unmodifiable list of Beidou navigation messages
  238.      * @since 12.0
  239.      */
  240.     public Map<String, List<BeidouCivilianNavigationMessage>> getBeidouCivilianNavigationMessages() {
  241.         return Collections.unmodifiableMap(beidouCivilianData);
  242.     }

  243.     /**
  244.      * Get the Beidou navigation messages for the given satellite Id.
  245.      * @param satId satellite Id (i.e. Satellite System (e.g. C) + satellite number)
  246.      * @return an unmodifiable list of Beidou navigation messages
  247.      * @since 12.0
  248.      */
  249.     public List<BeidouCivilianNavigationMessage> getBeidouCivilianNavigationMessages(final String satId) {
  250.         return Collections.unmodifiableList(beidouCivilianData.get(satId));
  251.     }

  252.     /**
  253.      * Add a Beidou navigation message to the list.
  254.      * @param message message to add
  255.      * @since 12.0
  256.      */
  257.     public void addBeidouCivilianNavigationMessage(final BeidouCivilianNavigationMessage message) {
  258.         final int    bdtPRN = message.getPRN();
  259.         final String prnString = bdtPRN < 10 ? "0" + bdtPRN : String.valueOf(bdtPRN);
  260.         final String satId = SatelliteSystem.BEIDOU.getKey() + prnString;
  261.         beidouCivilianData.putIfAbsent(satId, new ArrayList<>());
  262.         beidouCivilianData.get(satId).add(message);
  263.     }

  264.     /**
  265.      * Get all the QZSS navigation messages contained in the file.
  266.      * @return an unmodifiable list of QZSS navigation messages
  267.      * @since 12.0
  268.      */
  269.     public Map<String, List<QZSSLegacyNavigationMessage>> getQZSSLegacyNavigationMessages() {
  270.         return Collections.unmodifiableMap(qzssLegacyData);
  271.     }

  272.     /**
  273.      * Get the QZSS navigation messages for the given satellite Id.
  274.      * @param satId satellite Id (i.e. Satellite System (e.g. J) + satellite number)
  275.      * @return an unmodifiable list of QZSS navigation messages
  276.      * @since 12.0
  277.      */
  278.     public List<QZSSLegacyNavigationMessage> getQZSSLegacyNavigationMessages(final String satId) {
  279.         return Collections.unmodifiableList(qzssLegacyData.get(satId));
  280.     }

  281.     /**
  282.      * Add a QZSS navigation message to the list.
  283.      * @param message message to add
  284.      * @since 12.0
  285.      */
  286.     public void addQZSSLegacyNavigationMessage(final QZSSLegacyNavigationMessage message) {
  287.         final int    qzsPRN = message.getPRN();
  288.         final String prnString = qzsPRN < 10 ? "0" + qzsPRN : String.valueOf(qzsPRN);
  289.         final String satId = SatelliteSystem.QZSS.getKey() + prnString;
  290.         qzssLegacyData.putIfAbsent(satId, new ArrayList<>());
  291.         qzssLegacyData.get(satId).add(message);
  292.     }

  293.     /**
  294.      * Get all the QZSS navigation messages contained in the file.
  295.      * @return an unmodifiable list of QZSS navigation messages
  296.      * @since 12.0
  297.      */
  298.     public Map<String, List<QZSSCivilianNavigationMessage>> getQZSSCivilianNavigationMessages() {
  299.         return Collections.unmodifiableMap(qzssCivilianData);
  300.     }

  301.     /**
  302.      * Get the QZSS navigation messages for the given satellite Id.
  303.      * @param satId satellite Id (i.e. Satellite System (e.g. J) + satellite number)
  304.      * @return an unmodifiable list of QZSS navigation messages
  305.      * @since 12.0
  306.      */
  307.     public List<QZSSCivilianNavigationMessage> getQZSSCivilianNavigationMessages(final String satId) {
  308.         return Collections.unmodifiableList(qzssCivilianData.get(satId));
  309.     }

  310.     /**
  311.      * Add a QZSS navigation message to the list.
  312.      * @param message message to add
  313.      * @since 12.0
  314.      */
  315.     public void addQZSSCivilianNavigationMessage(final QZSSCivilianNavigationMessage message) {
  316.         final int    qzsPRN = message.getPRN();
  317.         final String prnString = qzsPRN < 10 ? "0" + qzsPRN : String.valueOf(qzsPRN);
  318.         final String satId = SatelliteSystem.QZSS.getKey() + prnString;
  319.         qzssCivilianData.putIfAbsent(satId, new ArrayList<>());
  320.         qzssCivilianData.get(satId).add(message);
  321.     }

  322.     /**
  323.      * Get all the NavIC navigation messages contained in the file.
  324.      * @return an unmodifiable list of NavIC navigation messages
  325.      */
  326.     public Map<String, List<NavICLegacyNavigationMessage>> getNavICLegacyNavigationMessages() {
  327.         return Collections.unmodifiableMap(navicLegacyData);
  328.     }

  329.     /**
  330.      * Get the NavIC navigation messages for the given satellite Id.
  331.      * @param satId satellite Id (i.e. Satellite System (e.g. I) + satellite number)
  332.      * @return an unmodifiable list of NavIC navigation messages
  333.      */
  334.     public List<NavICLegacyNavigationMessage> getNavICLegacyNavigationMessages(final String satId) {
  335.         return Collections.unmodifiableList(navicLegacyData.get(satId));
  336.     }

  337.     /**
  338.      * Add a NavIC navigation message to the list.
  339.      * @param message message to add
  340.      */
  341.     public void addNavICLegacyNavigationMessage(final NavICLegacyNavigationMessage message) {
  342.         final int    irsPRN = message.getPRN();
  343.         final String prnString = irsPRN < 10 ? "0" + irsPRN : String.valueOf(irsPRN);
  344.         final String satId = SatelliteSystem.NAVIC.getKey() + prnString;
  345.         navicLegacyData.putIfAbsent(satId, new ArrayList<>());
  346.         navicLegacyData.get(satId).add(message);
  347.     }

  348.     /**
  349.      * Get all the NavIC navigation messages contained in the file.
  350.      * @return an unmodifiable list of NavIC navigation messages
  351.      */
  352.     public Map<String, List<NavICL1NvNavigationMessage>> getNavICL1NVNavigationMessages() {
  353.         return Collections.unmodifiableMap(navicL1NVData);
  354.     }

  355.     /**
  356.      * Get the NavIC navigation messages for the given satellite Id.
  357.      * @param satId satellite Id (i.e. Satellite System (e.g. I) + satellite number)
  358.      * @return an unmodifiable list of NavIC navigation messages
  359.      */
  360.     public List<NavICL1NvNavigationMessage> getNavICL1NVNavigationMessages(final String satId) {
  361.         return Collections.unmodifiableList(navicL1NVData.get(satId));
  362.     }

  363.     /**
  364.      * Add a NavIC navigation message to the list.
  365.      * @param message message to add
  366.      */
  367.     public void addNavICL1NVNavigationMessage(final NavICL1NvNavigationMessage message) {
  368.         final int    irsPRN = message.getPRN();
  369.         final String prnString = irsPRN < 10 ? "0" + irsPRN : String.valueOf(irsPRN);
  370.         final String satId = SatelliteSystem.NAVIC.getKey() + prnString;
  371.         navicL1NVData.putIfAbsent(satId, new ArrayList<>());
  372.         navicL1NVData.get(satId).add(message);
  373.     }

  374.     /**
  375.      * Get all the Glonass navigation messages contained in the file.
  376.      * @return an unmodifiable list of Glonass navigation messages
  377.      */
  378.     public Map<String, List<GLONASSFdmaNavigationMessage>> getGlonassNavigationMessages() {
  379.         return Collections.unmodifiableMap(glonassData);
  380.     }

  381.     /**
  382.      * Get the Glonass navigation messages for the given satellite Id.
  383.      * @param satId satellite Id (i.e. Satellite System (e.g. R) + satellite number)
  384.      * @return an unmodifiable list of Glonass navigation messages
  385.      */
  386.     public List<GLONASSFdmaNavigationMessage> getGlonassNavigationMessages(final String satId) {
  387.         return Collections.unmodifiableList(glonassData.get(satId));
  388.     }

  389.     /**
  390.      * Add a Glonass navigation message to the list.
  391.      * @param message message to add
  392.      */
  393.     public void addGlonassNavigationMessage(final GLONASSFdmaNavigationMessage message) {
  394.         final int    gloPRN = message.getPRN();
  395.         final String prnString = gloPRN < 10 ? "0" + gloPRN : String.valueOf(gloPRN);
  396.         final String satId = SatelliteSystem.GLONASS.getKey() + prnString;
  397.         glonassData.putIfAbsent(satId, new ArrayList<>());
  398.         glonassData.get(satId).add(message);
  399.     }

  400.     /**
  401.      * Get all the SBAS navigation messages contained in the file.
  402.      * @return an unmodifiable list of SBAS navigation messages
  403.      */
  404.     public Map<String, List<SBASNavigationMessage>> getSBASNavigationMessages() {
  405.         return Collections.unmodifiableMap(sbasData);
  406.     }

  407.     /**
  408.      * Get the SBAS navigation messages for the given satellite Id.
  409.      * @param satId satellite Id (i.e. Satellite System (e.g. S) + satellite number)
  410.      * @return an unmodifiable list of SBAS navigation messages
  411.      */
  412.     public List<SBASNavigationMessage> getSBASNavigationMessages(final String satId) {
  413.         return Collections.unmodifiableList(sbasData.get(satId));
  414.     }

  415.     /**
  416.      * Add a SBAS navigation message to the list.
  417.      * @param message message to add
  418.      */
  419.     public void addSBASNavigationMessage(final SBASNavigationMessage message) {
  420.         final int    sbsPRN = message.getPRN();
  421.         final String prnString = sbsPRN < 10 ? "0" + sbsPRN : String.valueOf(sbsPRN);
  422.         final String satId = SatelliteSystem.SBAS.getKey() + prnString;
  423.         sbasData.putIfAbsent(satId, new ArrayList<>());
  424.         sbasData.get(satId).add(message);
  425.     }

  426.     /**
  427.      * Get the system time offsets.
  428.      * @return an unmodifiable list of system time offsets
  429.      * @since 12.0
  430.      */
  431.     public List<SystemTimeOffsetMessage> getSystemTimeOffsets() {
  432.         return Collections.unmodifiableList(systemTimeOffsets);
  433.     }

  434.     /**
  435.      * Add a system time offset.
  436.      * @param systemTimeOffset system time offset message
  437.      * @since 12.0
  438.      */
  439.     public void addSystemTimeOffset(final SystemTimeOffsetMessage systemTimeOffset) {
  440.         systemTimeOffsets.add(systemTimeOffset);
  441.     }

  442.     /**
  443.      * Get the Earth orientation parameters.
  444.      * @return an unmodifiable list of Earth orientation parameters
  445.      * @since 12.0
  446.      */
  447.     public List<EarthOrientationParameterMessage> getEarthOrientationParameters() {
  448.         return Collections.unmodifiableList(eops);
  449.     }

  450.     /**
  451.      * Add an Earth orientation parameter.
  452.      * @param eop Earth orientation oarameter message
  453.      * @since 12.0
  454.      */
  455.     public void addEarthOrientationParameter(final EarthOrientationParameterMessage eop) {
  456.         eops.add(eop);
  457.     }

  458.     /**
  459.      * Get the ionosphere Klobuchar messages.
  460.      * @return an unmodifiable list of ionosphere Klobuchar messages
  461.      * @since 12.0
  462.      */
  463.     public List<IonosphereKlobucharMessage> getKlobucharMessages() {
  464.         return Collections.unmodifiableList(klobucharMessages);
  465.     }

  466.     /**
  467.      * Add an ionosphere Klobuchar message.
  468.      * @param klobuchar ionosphere Klobuchar message
  469.      * @since 12.0
  470.      */
  471.     public void addKlobucharMessage(final IonosphereKlobucharMessage klobuchar) {
  472.         klobucharMessages.add(klobuchar);
  473.     }

  474.     /**
  475.      * Get the ionosphere Nequick-G messages.
  476.      * @return an unmodifiable list of ionosphere Nequick-G messages
  477.      * @since 12.0
  478.      */
  479.     public List<IonosphereNequickGMessage> getNequickGMessages() {
  480.         return Collections.unmodifiableList(nequickGMessages);
  481.     }

  482.     /**
  483.      * Add an ionosphere Nequick-G message.
  484.      * @param nequickG ionosphere Nequick-G message
  485.      * @since 12.0
  486.      */
  487.     public void addNequickGMessage(final IonosphereNequickGMessage nequickG) {
  488.         nequickGMessages.add(nequickG);
  489.     }

  490.     /**
  491.      * Get the ionosphere BDGIM messages.
  492.      * @return an unmodifiable list of ionosphere BDGIM messages
  493.      * @since 12.0
  494.      */
  495.     public List<IonosphereBDGIMMessage> getBDGIMMessages() {
  496.         return Collections.unmodifiableList(bdgimMessages);
  497.     }

  498.     /**
  499.      * Add an ionosphere BDGIM message.
  500.      * @param bdgim ionosphere BDGIM message
  501.      * @since 12.0
  502.      */
  503.     public void addBDGIMMessage(final IonosphereBDGIMMessage bdgim) {
  504.         bdgimMessages.add(bdgim);
  505.     }

  506.     /**
  507.      * Get the ionosphere NavIC Klobuchar messages.
  508.      * @return an unmodifiable list of ionosphere NavIC Klobuchar messages
  509.      * @since 14.0
  510.      */
  511.     public List<IonosphereNavICKlobucharMessage> getNavICKlobucharMessages() {
  512.         return Collections.unmodifiableList(navICKlobucharMessages);
  513.     }

  514.     /**
  515.      * Add an ionosphere NavIC Klobuchar message.
  516.      * @param navIcKlobuchar ionosphere NavIC Klobuchar message
  517.      * @since 14.0
  518.      */
  519.     public void addNavICKlobucharMessage(final IonosphereNavICKlobucharMessage navIcKlobuchar) {
  520.         navICKlobucharMessages.add(navIcKlobuchar);
  521.     }

  522.     /**
  523.      * Get the ionosphere NavIC NeQuick N messages.
  524.      * @return an unmodifiable list of ionosphere NavIC NeQuick N messages
  525.      * @since 14.0
  526.      */
  527.     public List<IonosphereNavICNeQuickNMessage> getNavICNeQuickNMessages() {
  528.         return Collections.unmodifiableList(navICNeQuickNMessages);
  529.     }

  530.     /**
  531.      * Add an ionosphere NavIC NeQuick N message.
  532.      * @param navIcNeQuickN ionosphere NavIC NeQuick N message
  533.      * @since 14.0
  534.      */
  535.     public void addNavICNeQuickNMessage(final IonosphereNavICNeQuickNMessage navIcNeQuickN) {
  536.         navICNeQuickNMessages.add(navIcNeQuickN);
  537.     }

  538.     /**
  539.      * Get the ionosphere GLONASS CDMS messages.
  540.      * @return an unmodifiable list of ionosphere GLONASS CDMS messages
  541.      * @since 14.0
  542.      */
  543.     public List<IonosphereGlonassCdmsMessage> getGlonassCDMSMessages() {
  544.         return Collections.unmodifiableList(glonassCDMSMessages);
  545.     }

  546.     /**
  547.      * Add an ionosphere GLONASS CDMS message.
  548.      * @param glonassCDMS ionosphere GLONASS CDMS message
  549.      * @since 14.0
  550.      */
  551.     public void addGlonassCDMSMessage(final IonosphereGlonassCdmsMessage glonassCDMS) {
  552.         glonassCDMSMessages.add(glonassCDMS);
  553.     }

  554. }