czwartek, 9 czerwca 2011

Przelcizanie współrzędnych GPS w formacie LQQ, GGA

Zadzwonił kolega męża koleżanki z pytaniem, czy nie wiem jak przeliczyć współrzędne elipsoidalne GPS do lokalnego układu współrzędnych płaskich. Trochę czasu upłynęło zanim wyjaśniliśmy sobie co rozumiemy przez układ globalny, lokalny, czym się różnią współrzędne elipsoidalne XYZ od płaskich XY. W końcu zaproponowałem takie rozwiązanie:

1. Przeliczenie współrzędnych elipsoidalnych
do dowolnego układu współrzędnych płaskich. Zaproponowałem odwzorowanie Merkatora z punktem przyłożenia w pobliżu obszaru opracowania. Najpiew trzeba odczytać współrzędne geograficzne z formatu GGA- Global Positioning System Fix Data. Opis tego formatu wygląda tak:

GGA - essential fix data which provide 3D location and accuracy data.

 $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

Where:
     GGA          Global Positioning System Fix Data
     123519       Fix taken at 12:35:19 UTC
     4807.038,N   Latitude 48 deg 07.038' N
     01131.000,E  Longitude 11 deg 31.000' E
     1            Fix quality: 0 = invalid
                               1 = GPS fix (SPS)
                               2 = DGPS fix
                               3 = PPS fix
                   4 = Real Time Kinematic
                   5 = Float RTK
                               6 = estimated (dead reckoning) (2.3 feature)
                   7 = Manual input mode
                   8 = Simulation mode
     08           Number of satellites being tracked
     0.9          Horizontal dilution of position
     545.4,M      Altitude, Meters, above mean sea level
     46.9,M       Height of geoid (mean sea level) above WGS84
                      ellipsoid
     (empty field) time in seconds since last DGPS update
     (empty field) DGPS station ID number
     *47          the checksum data, always begins with *
Najważniejsza informacja dotyczy oczywiście sekcji w której jest zapisana długość i szerokość elipsoidalna. Gdy już wiadomo jak je odczytać to algorytm obliczania współrzędnych płaskich wygląda tak:


        const double PI = 3.14159265358979323846264;
        //const double R0 = 6367449.1458234154;  // Elipsoida WGS-84  
        const double R0 = 6364566.797;  // Kombinowane WGS-84->Krasowski         
 
        // W pobliĹźu obszaru opracowania, 
        //tak aby poprawki odzorowawcze były jak najmniejsze 
        const double LOrigin = 19.51 * PI / 180.0;         
        const double BOrigin = 53.60;


        public void GetMercatorNE(double GpsB, double GpsL, out double North, out double Eeast)
        {
            double DeltaL = GpsL - LOrigin;

            // 1. Lagrange             
            double fi = LagrangeCorr(GpsB);

            // 2. Mercator 
            double nMerc;
            double eMerc;

            double p = Math.Sin(fi);
            double q = Math.Cos(fi) * Math.Cos(DeltaL);
            nMerc = Math.Atan(p / q) * R0;

            double r = 1.0 + Math.Cos(fi) * Math.Sin(DeltaL);
            double s = 1.0 - Math.Cos(fi) * Math.Sin(DeltaL);
            eMerc = 0.5 * Math.Log(r / s) * R0;
            // Minus dowolna wartość, tak aby współrzędne były bliżej zera 
            North = nMerc - 5930000;  
            Eeast = eMerc;
        }

        private double LagrangeCorr(double B)
        {
            double e = 0.081819190842621486; // Elipsoida WGS-84 
            double U = 1 - e * Math.Sin(B);
            double V = 1 + e * Math.Sin(B);
            double K = Math.Pow(U / V, e / 2);
            double C = K * Math.Tan(B / 2 + PI / 4.0);
            double fi = 2 * Math.Atan(C) - PI / 2.0;
            return fi;
        }

2. Obliczenie współrzędnych LQQ
Gdy już mamy współrzędne przeliczone do Lokalnego Układu Merkatora (LUM) to dalej sprawa wygląda prosto. Trzeba pomierzyć kilka punktów wspólnych w systemie wykorzystującym GGA oraz drugi raz te same punkty w systemie wykorzystującym LQQ (Leica Local Position and Quality). Gdy mamy do dyspozycji zestaw współrzędnych w dwóch układach obliczamy parametry transformacji Helmerta z jednego do drugiego - proste!

---
http://uriasz.am.szczecin.pl/naw_bezp/transformacja.html

Brak komentarzy:

Prześlij komentarz