Autor |
Beitrag |
LonghornUser
      
Beiträge: 796
|
Verfasst: So 02.10.11 15:22
Hallo,
ich muss folgendes Problem lösen und komme nicht weiter:
Ich habe einen Punkt mit Latitude- und Longitude-Wert gegeben (beides double-Zahlen) und möchte nun auf diese eine Distanz in Metern addieren, also den Punkt in eine bestimmte Richtung um eine bestimmte Distanz verschieben.
Wie man die Distanz berechnet zwischen 2 Punkten berechnet, weiß ich bereits. Das blöde ist nur, dass, wenn ich diese Formel umstelle, ich außerhalb des Definitionsbereiches des Arcus-Sinus liege
Hat jemand von Euch eine Formel parat, mit der ich diese Aufgabe bewältigen kann?
Bye LHUser
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 02.10.11 15:41
Ich glaube dir könnte die Paranuss 3 aus dem Adventsgewinnspiel 2008 helfen bzw. deren Lösung. Da waren ein paar Berechnungen zu Koordinaten dabei.
www.delphi-forum.de/...l+Loesung_88937.html
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 02.10.11 16:21
Wenn die Ursprungskoordinaten in einem kleinen Bereich (ca hundert km^2) liegen, kannst du einfach vorher ausrechnen wieviel Grad ein Meter sind und behaupten, dass sich das linear verteilt.
Ansonsten brauchst du eine Formel, um die Abstände der Längengrade (Breitengrade sind ja immer gleich weit auseinander) an der entsprechenden Stelle zu berechnen...
EDIT: ... und das hängt natürlich vom verwendeten Geoid ab.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: So 02.10.11 20:35
Hey,
rechne dir Einfach den Kreisboden der Koordinaten aus: de.wikipedia.org/wiki/Kreisbogen
Auf den Kreisbogen addierst du dann dein Distanz und rechnest dir wieder den Winkel dazu aus. Da brauchste nichma sin oder cos
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Dr. Hallo
      
Beiträge: 110
Erhaltene Danke: 13
XP
C/C++/C#
|
Verfasst: So 02.10.11 23:12
ja , was man dazu aber braucht ist der winkel zwischen den
beiden punkten und der ist (laut Bartsch)...
w = arccos(sin(B1)*sin(B2)+cos(B1)*cos(B2)*cos(L2-L1))
-> abstand = w * erdradius
(B=Breitengrad,L=Längengrad in dezimalform)..
--- Moderiert von Narses: Beiträge zusammengefasst---
EDIT: OK jetzt habe ich auch die Frage gelesen. Sollte man vorher tun. Naja vielleicht hilfts trotzdem.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 03.10.11 12:06
Er hat aber nur ma nur einen Punkt. Und auf diesen Punkt will er die Distanz addieren. Wenn er zu den beiden Koordinaten die Länge des Kreisbogens berechnet hat er die Strecke auf der Kugel vom Äquator zu seinem Punkt und die Strecke vom Nullmeridian zu seinem Punkt. Da kann er jetzt seine Werte drauf rechnen und rechnet danach die Strecke auf dem Kreisbogen wieder in die Koordinaten um. Und dazu brauch man nur diese Formel:
b = Pi * r * alpha/180
Wobei r = 6.371.000,785m ist. Wenn er aber wirklich bloß 1 oder 2m addieren will wird das sowieso sehr ungenau, weil der Radius an den Poeln ca. 21km kleiner ist.
€: sry, dein Edit zu spät gelesen xD
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Dr. Hallo
      
Beiträge: 110
Erhaltene Danke: 13
XP
C/C++/C#
|
Verfasst: Mo 03.10.11 13:27
Da stellen sich noch der Fragen zwei..
Wie kriege ich alpha raus ohne Winkelfunktionen zu benutzen?
Wie ist die umrechnung von längengrade nach metern und umgekehrt? Die Umrechnung hängt ja auch vom Breitengrad ab.
also irgendwas in Richtung.. Umrechnungsfaktor = f(latitude).
Gruß
EDIT: Ich glaub wir sind etwas auf dem Holzweg. Das Ergebnis soll die Koordinaten liefern nach Verschiebung
geradlinig von Punkt 1 nach Punkt 2 . Das ist nicht trivial. Da müsste man sich au noch mit sphärischer Tri-
gonometrie auskennen.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 03.10.11 16:17
Das Alpha ist einma der Long-Wert un einma der Lat-Wert. Das sind beides Werte im Gradmaß. Und mit der Kreisbogenformel berechnest du die Länge in Metern (auf dem Kreis bzw auf der Erdoberfläche). Dann kannst du deine Distanz in Metern addieren und rechnest das ganze mit der Kreisbogenformel zurück ins Gradmaß. Natürlich muss man das getrennt einmal für Lat un einma für Long machen. Mit dieser Methode kann man das ganze ausrechnen, aber wie oben schon gesagt is das bei kleinen Werten sehr ungenau, da der Erdradius nicht immer gleich ist, sondern an den Polen ca. 21km kleiner ist.
Mit Sphären hat das nix zu tun, da man die Berechnung hier auf 2 Kreise vereinfachen kann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Dr. Hallo
      
Beiträge: 110
Erhaltene Danke: 13
XP
C/C++/C#
|
Verfasst: Mo 03.10.11 17:59
OK, das macht Sinn, so war die Frage wahrscheinlich gemeint. Ich dachte er will vom gegebenen Punkt aus eine Strecke mit einer bestimmten Länge und einer bestimmten Richtung hinzuaddieren. Dann müsste man die senkrechte und horizontale Komponente aus dem rechtwinkligen sphärischen Dreieck erst berechnen und könnte dann nach Deinem Verfahren fortfahren.
|
|