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.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:
$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 *
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