Как получить эллипсоидальную высоту из GPSD, используя libgps?

Мне нужна помощь в получении эллипсоидальной высоты из шапки Adafruit Ultimate GPS (прикрепленной к Raspberry pi) с использованием libgps. Вот упрощенная версия моего кода:

#include <cstdlib>
#include <iostream>
#include <gps.h>
#include <libgpsmm.h>
#include <ctime>

using namespace std;

int main(int argc, char** argv)
{

gpsmm gps_rec("localhost", DEFAULT_GPSD_PORT);

if (gps_rec.stream(WATCH_ENABLE | WATCH_JSON) == NULL)
{
cerr << "No GPSD running.\n";
return 1;
}

for (;;)
{
struct gps_data_t *gpsd_data;

if (!gps_rec.waiting(1000000))
continue;

if ((gpsd_data = gps_rec.read()) == NULL)
{
cerr << "GPSD read error.\n";
return 1;
}

if(gpsd_data->status == STATUS_FIX && (gpsd_data->fix.mode == MODE_2D || gpsd_data->fix.mode == MODE_3D))
{
//Get Latitude, Longitude
double latitude  = gpsd_data->fix.latitude;
double longitude = gpsd_data->fix.longitude;cout <<"latitude "<<latitude<<", longitude "<<longitude;

if(gpsd_data->fix.mode == MODE_3D)
{
double altitude = gpsd_data->fix.altitude;
double geoid = gpsd_data->separation;
//double geoid = wgs84_separation(latitude,longitude);

cout <<", altitude "<<altitude<<", geoid "<<geoid;
}

cout<<"\n";
}

}

return 0;
}

Я планировал получить разделение gpsd_data-> fix.altitude и gpsd_data-> (которое подразумевается как геоидальное разделение, MSL — WGS84 (метры) в соответствии с файлом заголовка gps.h) и использовать их для расчета высоты эллипсоида согласно эта ссылка.

NMEA предложения выглядят так:
$ GPGGA, 002808,000, 2734,6994, S, 15305,9456, E, 2,07, 1,06, 64,0, M, 36,8, M, 0000,0000 * 43, в котором говорится, что расстояние между геоидами составляет 36,8 метра согласно эта ссылка .
Но значение разделения gpsd_data-> всегда кажется нуль. Я также пытался передать значения lat, lon в функцию wgs84_separation, но, похоже, она не точна (возвращает 39.2 вместо 36.8). Если нет другого способа получить эллипсоидальную высоту, для меня важно правильно определить значение разделения геоидов, потому что GPS будет летать на летающем объекте.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]