"""Fetches the relevant data from the web. This module provides functionality to fetch GPS navigation and SP3 data from the NASA CDDIS repository. The data is downloaded for a specified date and station, and then parsed to extract relevant information. Classes: None Functions: fetch_nav_data(date: datetime, logging: bool, station: str) -> tuple[pd.Series, pd.DataFrame] fetch_sp3(date: datetime, logging: bool, station: str) -> pd.DataFrame """ from datetime import datetime from pathlib import Path from tempfile import TemporaryDirectory import pandas as pd from ...download.idownload.rinex.nasa_cddis import NasaCddisV3 from ...download.idownload.sp3.ccdis_igs_sp3 import NasaCddisIgsSp3 from ...parse.base_parse import Parser from ...parse.iparse.nav.iparse_gps_nav import IParseGPSNav from ...parse.iparse.sp3.iparse_sp3_gps import IParseSP3GPS __all__ = ["fetch_nav_data", "fetch_sp3"] # TODO: Add the compatibility for other GNSS systems def fetch_nav_data( date: datetime, logging: bool = False, station: str = "JPL", ) -> tuple[pd.Series, pd.DataFrame]: """Fetches the navigation data from CDDIS for the given date. This function downloads the navigation data for a specified date and station from the CDDIS repository and parses it to extract navigation information. Args: date (datetime): The date for which the navigation data is to be fetched. logging (bool, optional): If True, logs will be printed to the console. Defaults to False. station (str, optional): The station from which the data is to be fetched. Defaults to "JPL". Returns: tuple[pd.Series, pd.DataFrame]: A tuple containing the navigation metadata as a pandas Series and the satellite positions as a pandas DataFrame. """ # Fetch the data from CDDIS downloader = NasaCddisV3(logging=logging) parser = Parser(iparser=IParseGPSNav()) # Set up a temporary directory with TemporaryDirectory() as temp_dir: # Download the navigation data downloader.download( year=date.year, day=date.timetuple().tm_yday, save_path=Path(temp_dir), num_files=1, match_string=station, # Download from given station ) # Get the navigation data file nav_file = list(Path(temp_dir).glob("*GN*"))[0] # Parse the navigation data nav_meta, nav_data = parser(nav_file) return nav_meta, nav_data # TODO: Add the compatibility for other GNSS systems def fetch_sp3( date: datetime, logging: bool = False, ) -> pd.DataFrame: """Fetches the SP3 data from CDDIS for the given date. This function downloads the SP3 data for a specified date and station from the CDDIS repository and parses it to extract satellite position information. Args: date (datetime): The date for which the SP3 data is to be fetched. logging (bool, optional): If True, logs will be printed to the console. Defaults to False. Returns: pd.DataFrame: The SP3 data as a pandas DataFrame. """ # Fetch the data from CDDIS downloader = NasaCddisIgsSp3(logging=logging) parser = Parser(iparser=IParseSP3GPS()) # Set up a temporary directory with TemporaryDirectory() as temp_dir: # Download the SP3 data downloader.download_from_datetime( time=date, save_dir=Path(temp_dir), ) # Get the SP3 data file sp3_file = list(Path(temp_dir).glob("*SP3*"))[0] # Parse the SP3 data return parser(sp3_file)