Entfernungsberechnung: Unterschied zwischen den Versionen

GISWiki - Das freie Portal für Geoinformatik (GIS)
Wechseln zu: Navigation, Suche
(Code)
Zeile 1: Zeile 1:
 +
==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 [[Skalarprodukt]] zweier solcher Einheitsvektoren ''n<sub>1</sub>'' und ''n<sub>2</sub>'' 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 [[Trigonometrie#Eigenschaften_und_Formeln|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==
 
==Code==
 
===[[Visual Basic]] ===
 
===[[Visual Basic]] ===

Version vom 5. Dezember 2007, 19:25 Uhr

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 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