- Notifications
You must be signed in to change notification settings - Fork0
FlamingDen/RinexReader
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
RINEX (Receiver Independent Exchange Format) — формат обмена данными для файлов исходных данных спутниковых навигационных приёмников. Он позволяет пользователям производить пост-обработку полученных данных для выполнения более точных вычислений — обычно с помощью других данных, неизвестных приемнику.
Данная программа читает файлы:
- файл измерений (расширение .YYO, где YY-номер года, а O - observation, например .19О, или .obs)
- файлы эфемерид в зависимости от используемых систем
Типы файлов эфемерид и их расширения
- .YYN – GPS,
- .YYG – ГЛОНАСС,
- .YYC – BeiDou
- .YYL – Galileo
- .YYJ – QZSS
- .YYI – IRNSS
- .nav – смешанные эфемериды
Поддержка чтения только только RINEX v3.* .
А для файлов эфемерид : GPS, GLONASS, GALILEO, BEIDOU.
Откройте файл проект *.pro в Qt Creator. В будуще можно будет загрузить как библиотеку.
Для начала нам нужно созадть экземляр нашего ридера.При объявлении мы можем сразу указать пути к нишему RINEX файлу(obs - измерения, nav - вектор путей для эфемерид ).
RinexReader rr(obs,navPaths);
Так же можно можно читать разные типы раздельно, для этого нужно указать путь и тип файла.
RinexReader rr(pathObs, RinexType::OBSERVATION);RinexReader rr_only_nav(navGPS, RinexType::NAVIGATION); RinexReader rr_only_nav_(navPaths, RinexType::NAVIGATION);
Если при чтении списка только навигационных файлов тип можно не указывать, он сам поймет, что это nav файлы.
RinexReader rr_only_nav_(navPaths);
Во время инициализации идет проверка типа файла(GPS , Glonass, Mixed и т.д.) и его версии. Далее если версия или тип не поддреживаются файл ридер не будет читать файл.
Если все хорошо, то мы сможем полуить данные из файла.
Получение информацию заголовка :
Rinex3Obs::ObsHeaderInfo headObs = rr.getObsHeaderInfo();
В даннщм случае изheadObs
мы можем получить практические любые данные из хэдера. Про названия полей и за что они отвечают смотретьтут.
Получение списка всех эпох:
QList<Rinex3Obs::ObsEpochInfo> inf = rr.getEpochs();
Если файл большой это довольно долгая и затратная операция поэтому при первом ее вызове ее результат сохранится, а в дальнейшем при повторном вызове этой функции будет выдаться ссылка на этот лист. Он сохранится либо до переопределения пути в obs файлу , вызова деструктора или вы можете сами отчисить obs data через методclearObs()
.
Но будьте осторожны т.к.clearObs()
обнулит все данные связаные с obs файлом, включая путь к нему.
Далее немного о сруктуре этого листа:
QList<Rinex3Obs::ObsEpochInfo>
- epochRecord; - вектор даты и времени
- recClockOffset;
- gpsTime;
- numSatsGPS; - кол-во зависей для системы GPS
- numSatsGLO;
- numSatsGAL;
- numSatsBEI;
- observations; - map отсортерованныей по типу системы --> номер спутника - данные
std::map<std::string, std::map<int, std::vector<double>>>
После инициализации мы можем прчитать файлы эфемерид один за други , по индексу или пути который уже добавлен(можно добавить еще) если файлов несколько, для одного наналогично.
ViewNav viewNav;rr.nextNav();viewNav= rr.getNav();rr.nextNav();viewNav= rr.getNav();rr.nextNav();viewNav = rr.getNav();rr.clearNavData();rr.nextNav();viewNav = rr.getNav();
or
rr.readNav(0); // по индексу как расположен в вектореrr.readNav(navGPS); // по пути который уже добавлен
ViewNav
- структура для предаствления nav файлов и работы тоько м полями.
Так же вы можете созранить ваши прочитанные данные в csv формат( вы можете явно задать разделител после указания типа, по-умолчанию это "," , что является стандартом в csv файлах):
QString pathCSVobs = "C:/Utils/RinexSample/infEpochs.csv";QString pathCSVnav = "C:/Utils/RinexSample/infNavs.csv";rr.saveAsCSV(pathCSVobs, RinexType::OBSERVATION);rr.saveAsCSV(pathCSVnav, RinexType::NAVIGATION);
Вам доступно 3 вида метода clean() :
clearObs()
- очищает все данные связанные с obs файломclearRRNav()
- очищает все данные связанные с nav файламиclearNavData()
- очищает только данные прочитанного файла(очищает информацию о прочитанных nav данных), но сохраняет пути к файлам для дальнейшем работы с ними.
Был добавлен специальный класс для генерации url адреса и имен файлов для скачивани их с сервера(пок немного сарой еще):
Примеры есть в коде(продублирую)
RinexNameGenerator rng;std::string extension = "rnx.zip";QDateTime::currentSecsSinceEpoch();// newQDateTime::currentDateTimeUtc().toTime_t();// (obsolete) ver. 5.15 and belowstd::cout << rng.generateUrl(IdPDP::BARA, "12", "24", "1", "2024", extension) << std::endl;std::cout << rng.generateUrl(IdPDP::BARA, 12, 24, 1, 2024, extension) << std::endl;std::cout << rng.generateUrl(IdPDP::KLEC, "24/1/2023 12:00:00", extension) << std::endl;std::cout << rng.generateUrl(IdPDP::KLEC, QDateTime::currentSecsSinceEpoch(), extension) << std::endl;std::cout << rng.generateUrl(IdPDP::BARA,QDateTime::currentSecsSinceEpoch(), extension) << std::endl;out << "File names: "<< endl;for( const std::string& x : rng.generateRinexFilesNames(IdPDP::BARA,QDateTime::currentSecsSinceEpoch())) std::cout << x << std::endl;