Entfernungsberechnung

GISWiki - Das freie Portal für Geoinformatik (GIS)
(Weitergeleitet von Distance Calculation)
Wechseln zu: Navigation, Suche

Herleitung

Der Einheitsvektor vom Erdmittelpunkt in Richtung eines Ortes mit Laenge l und Breite b hat die kartesischen Komponenten <math>\vec{n} = (x, y, z) = (\sin l\cos b, \cos l \cos b , \sin b)</math> (Kugelkoordinaten). Das de:Skalarprodukt zweier solcher Einheitsvektoren n1 und n2 gibt den Kosinus des eingeschlossenen Winkels: <math>\vec{n_1}\cdot\vec{n_2} = \cos \theta</math>.

Daraus erhaelt man :<math>\theta = \arccos \left[\cos{b_1}\cos{b_2}\cos(l_1 - l_2) + \sin{b_1}\sin{b_2}\right]</math>, wobei die trigonometrische Identitaet <math>\sin{l_1}\sin{l_2}+\cos{b_1}\cos{b_2} = \cos(l_1-l_2)</math> verwendet wurde. Den Winkel θ (im Bogenmass) muss man dann nur noch mit dem Erdradius multiplizieren, um die Entfernung zwischen den beiden Orten auf der Erdoberflaeche zu erhalten. Das ist die Zeile Entf = ... in

Code

Visual Basic

Quelle: Aerocat in Wikipedia

Function Entf(ByVal Laenge1 As Double, ByVal Breite1 As Double, _
                   ByVal Laenge2 As Double, ByVal Breite2 As Double) As Double
'Ermittelt die Entfernung zwischen zwei Orten auf der Erde.
'Laenge1 und Breite1 stellen die geografische Lage des ersten,
'Laenge2 und Breite2 des zweiten Ortes dar.
       Dim Erdradius As Double
       Erdradius = 6370
       Entf = aCos(Sin(DtoR(Breite1)) * Sin(DtoR(Breite2)) + Cos(DtoR(Breite1)) _
           * Cos(DtoR(Breite2)) * Cos(DtoR(Laenge1 - Laenge2))) * Erdradius
End Function
------
Function DtoR(Grad As Double) As Double
'Konvertiert Winkel im Gradmaß in Winkel im Bogenmaß
       DtoR = Grad / (180 / PI())
End Function
-------
Function aCos(X As Double) As Double
   If X < -1 Then
       X = -1
   ElseIf X = -1 Then
       aCos = PI()
   ElseIf X > -1 And X < 1 Then
       aCos = 2 * Atn(1) - Atn(X / Sqr(-X * X + 1))
   Else
       aCos = 0
   End If
'Zu beachten ist: -1 < X < 1, Arccos(-1) = Pi und Arccos(1) = 0
End Function

Weblinks