Как получить эллипсоидальную высоту из GPSD, используя libgps? - PullRequest
0 голосов
/ 26 сентября 2018

Мне нужна помощь в получении эллипсоидальной высоты из шапки 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,16,64,0, M, 36,8, M, 0000,0000 * 43, в котором говорится, что расстояние между геоидами составляет 36,8 метра согласно по этой ссылке .Но значение разделения gpsd_data-> всегда кажется ноль .Я также пытался передать значения lat, lon в функцию wgs84_separation, но это не похоже на точность (возвращает 39.2 вместо 36.8).Если нет другого способа получить эллипсоидальную высоту, для меня важно правильно определить значение разделения геоидов, потому что GPS будет летать на летающем объекте.

...