Kürzester Abstand zu 2 Punkten auf der Erdoberfläche (Geodäsie/Vermessung)

Adrian @, Dresden, Mittwoch, 04.01.2012, 14:46 (vor 2362 Tagen)

Guten Tag,

Mein Name ist Adrian Hupka, bin neu hier und habe trotzdem eine recht große Frage.

Ich bin Student im 7. FS und arbeite zur Zeit an einer Art Beleg. Die Aufgabe ist es, ein Programm zum geometrischen Map Matching zu schreiben. Geometrisches MapMatching ist recht simpel, da jeder Messpunkt seinem nächstliegenden Segment zugeordnet wird. Es wird keinerlei zusätzliche Information über vorige Messpunkte oder Bewegungsrichtung mit in den Abgleich einbezogen. Im Kontext geht es darum, dass ein Zug seine Position über GPS bestimmt und der Punkt auf eine Bahnstrecke im Kartenmaterial abgeglichen wird. Dieser simple Map-Matching-Algorithmus soll zukünftig als eine Art "Rückfallebene" in der Navigationssoftware des "PiLoNav"-Projekts arbeiten.

Nun sind Knoten bei Streckenverläufen ziemlich dicht und der Messfehler bei der GPS-Positionsbestimmung nicht weltbewegend groß, weshalb man vielleicht für Berechnungen vernachlässigen könnte, dass die Erde eine gekrümmte Oberfläche besitzt. Messpunkt und zwei benachbarte Streckenpunkt bilden dann ein Dreieck und man könnte einfach ein Lot fällen und hätte den Punkt auf das Streckensegment abgebildet (ohne Höhe).

Die Anforderung ist aber größtmöglichste Genauigkeit, weshalb ein solcher Ansatz wie im vorangegangenen Paragraphen nicht möglich ist. Außerdem soll der Kartenabgleich ebenso für die Höhe erfolgen, also im Raum.

Im Laufe der Bearbeitung dieses Themas habe ich mich der Problematik angenommen und eine Lösung gefunden. Bei der Validierung meiner Ergebnisse bin ich nun aber leider überraschend auf Unstimmigkeiten gestoßen, bei denen ich nicht weiß, wie ich damit umgehen soll, bzw. wie/ob es möglich wäre, diese Unstimmigkeiten zu beseitigen.


Schritt 1: Umrechnen/Transformieren der GPS-Koordinaten in karthesische (Link)
Schritt 2: Berechnen des Lotfußpunktes auf das Streckensegment (2-Punkte-Geradengleichung, Orthogonalität von \overline{Messpunkt Lotfu"spunkt} und \overline{Streckenpunkt_{1} Streckenpunkt_2},... -> Link)
Schritt 3: Rücktransformation des Lotfußpunkts in GPS-Koordinaten (Link)

Die Ergebnisse dieses Vorgehens entsprechen weitgehend dem, was gefordert ist. Die Lotfußpunkt-Koordinaten geograf. Länge und Breite liegen genau auf dem Streckenstück und die Gerade durch Lotfußpunkt und diesen Punkt ist auch Orthogonal zum Streckenstück.

Die Unstimmigkeit die nun aber auftritt, ist die ellipsoidische Höhe. Ich erwartete, dass beispielsweise bei einer Streckenpunkte-Entfernung von 1m und einem Höhenunterschied zwischen beiden Streckenpunkten von 10cm der Lotfußpunkt, wenn er genau zwischen beide Streckenpunkte abgebildet wird, die Höhe genau zwischen beiden Streckenpunkten liegt, nämlich bei 5cm Differenz zu jedem der Streckenpunkte. Tatsächlich ist die Höhe IMMER kleiner als erwartet. Wenn der Lotfußpunkt direkt auf einem der Streckenpunkte liegt, ist die Höhe natürlich gleich der Höhe des Streckenpunktes.

Der vorangegangen Abschnitt liest sich bestimmt etwas wirr. Hier einmal zwei Bilder von meiner Programmoberfläche, wo mir die Unstimmigkeiten erst aufgefallen sind:

[image]
[image]

Der schwarze, bzw. grüne Punkt ist der Messpunkt. Der Kreis skaliert visualisiert die Höhe in der 2dim-Darstellung.

Im zweiten Bild ist recht deutlich zu sehen, dass Länge und Breite zwar zu stimmen scheinen, die Höhe aber ~150m von meinen Erwartungen abweicht.


Nun meine Frage. Woher kommt das, was kann ich tun? :-D Ich habe natürlich auch überlegt, woher das kommen könnte...

Ich vermute, dass es an dem Schritt der Transformationen hin und zurück liegt, und sich dort Verzerrungen ergeben. Vermeiden ließe sich das, indem man nicht transformiert, sondern mit Polar-Kooridnaten abgleicht. Da aber die Höhen unterschiedlich sind, sind auch die rotationssymetrischen Ellipsoiden verschieden, weshalb man da nicht ohne weiteres Abstände oder "Lote" bilden kann.


Ich hoffe mir kann jemand eine Anregung geben, das Problem zu lösen oder wenigstens zu verstehen.

Mit freundlichen Grüßen


Adrian

Avatar

Kürzester Abstand zu 2 Punkten auf der Erdoberfläche

MichaeL ⌂, Bad Vilbel, Mittwoch, 04.01.2012, 19:35 (vor 2362 Tagen) @ Adrian
bearbeitet von MichaeL, Donnerstag, 05.01.2012, 08:04

Hallo,

ich hoffe, Deine Problembeschreibung korrekt erfasst zu haben. Leider geizt Du ja etwas mit Zahlen, an denen man das Problem mal selbst nachvollziehen kann. Ich habe jetzt einfach mal ein Octave-Script erstellt, welches soweit plausible Ergebnisse abliefert.

Die ersten beiden Punkte sollen die Gerade definieren; vom dritten Punkt soll der Fußpunkt bestimmt werden und in XYZ und BLh ausgegeben werden.

XYZ = [4212855.11526001  1022089.08443182  4665979.64863968]
BLh = [47.2972409067586  13.6371534556038  2368.75282299053]

Ich gehe mal davon aus, dass das DLR auch eine MATLAB-Lizenz hat bzw. Octave verfügbar ist, wo Du das nachvollziehen und ausprobieren kannst. Ein konkretes Beispiel mit Zahlen Deinerseits wäre sicher zukünftig hilfreich. Zunächst würde ich Dich einfach mal bitten, mein Script mit einem Deiner Beispiele zu testen und dann entsprechendes Feedback zu liefern, ob ich Dein Problem auch verstanden habe. ;-) Mir ist u.a. nicht so ganz klar, warum Du scheinbar den 2D-Fußpunkt bestimmst - Deinem Link entnehme ich das zumindest im Moment so. Die Funktionen zum Umrechnen von kartesischen in ellipsoidische Koordinaten findest Du hier.

(Nachtrag, hier nun auch ein Plot von dem Beispiel. Der Punkt (Magenta) ist der Fußpunkt.)
[image]

Schöne Grüße
Micha

 
%% Geg. GPS-Koordinaten
phi = [47, 17, 39.8082; 47, 16, 42.6326; 47, 17,  1.7418];
lam = [13, 38, 35.0143; 13, 40, 33.4269; 13, 37, 23.1686];
hell =[2391.67; 2520.21; 2460.14];
 
X = zeros(3,1);
Y = zeros(3,1);
Z = zeros(3,1);
 
%% Umrechnung in XYZ (WGS84)
for i=1:3
    [x y z] = BLh2XYZ(phi(i,:), lam(i,:), hell(i), 'WGS84');
    X(i) = x;
    Y(i) = y;
    Z(i) = z;
end
 
%% Lotfußpunktbestimmung
P1 = [X(1) Y(1) Z(1)]';
P2 = [X(2) Y(2) Z(2)]';
P3 = [X(3) Y(3) Z(3)]';
 
s = ((P2-P1)'*(P3-P1))/((P2-P1)'*(P2-P1));
 
L = P1 + s*(P2-P1);
 
[Bl Ll, hl] = XYZ2BLh(L(1), L(2), L(3), 'WGS84');
 
disp([X Y Z]);
disp(L');
disp([Bl Ll hl]);

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Tags:
GPS, WGS84, Koordinaten, Matlab, kartesisch, Octave, Umrechnung, Ellipsoidisch, Lot, Fußpunkt

RSS-Feed dieser Diskussion