2017-08-09 3 views
0

Ich möchte den Abstand von einem Punkt, gegeben durch den Längen- und Breitengrad, zu einem Liniensegment berechnen, das durch zwei Punkte (Teil eines Großkreises) gegeben ist. Alle Koordinaten sind in WGS84 angegeben.Punkt zum Großkreissegment Abstand

enter image description here

Ich weiß, wie dies in rechtwinkligen Koordinaten zu berechnen, aber nicht auf einer Kugel. Kann mir bitte jemand die Formel geben?

+1

Ich glaube, Sie könnten mit diesem mehr Glück auf mathematics.stackexchange –

+0

Ich wähle diese Frage als Wegthema zu schließen, weil es geht um [math.se] statt Programmierung oder Softwareentwicklung. – Pang

Antwort

3

Dies ist Cross-Track-Abstand described here

dxt = asin(sin(δ13) ⋅ sin(θ13−θ12)) ⋅ R 
    where 
δ13 is (angular) distance from start point to third point 
    θ13 is (initial) bearing from start point to third point 
    θ12 is (initial) bearing from start point to end point 
    R is the earth’s radius 

Sie benötigten Abstand berechnen kann und die Lager Formeln von bestimmten Seite mit

distance 
a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2) 
c = 2 ⋅ atan2(√a, √(1−a)) 
d = R ⋅ c 
where 
φ is latitude, λ is longitude, R is earth’s radius (mean radius = 6,371km); 

bearing 
θ = atan2(sin Δλ ⋅ cos φ2 , cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ) 
    where 
φ1,λ1 is the start point, φ2,λ2 the end point (Δλ is the difference in longitude) 

Note, die Winkel in Radiant sein müssen passieren Funktionen trig

+0

So Entschuldigung, werde meinen Kommentar entfernen. – Blindman67

2
  1. sphärisch 2D Kartesischen

    wenn der Abstand nicht zu weit und nicht um Pol Singularitäten Sie beide Liniensegment umwandeln kann und die Linie aus dem Punkt emittiert und senkrecht zu Ihrem Segment sphärischen Koordinaten (wenn sie es nicht schon sind) und die 2 Winkel als kartesischen Raum verwenden (Radius ignorieren).

    1. Rechenschnittpunkt
    2. convert zurück zu sphärischer
    3. Rechenbogenlänge zwischen Punkt und Schnitt

      schwer zu sagen, wenn Sie Kugel oder WGS84 verwenden oder was ....

  2. Kartesisch 3D

    Sie können das Kreissegment als 3D-Linie behandeln und wenn der Schnittpunkt gefunden wird, projizieren Sie es einfach auf die gekrümmte Fläche. Etwas wie folgt aus:

    3D cartesian + projection

    1. Fund Linie im Vergleich zu normalen von Punkt Kreuzung in 3D cartesianischen
    2. Projekt es wieder an der Oberfläche

      Für kugelförmige Oberfläche ist so einfach wie die Projektion bedeutet nur, die Vektorlänge auf R zu ändern (wenn die Kugel um (0,0,0) zentriert ist).

    3. compute Bogenlänge zwischen den Punkten 2

      auch einfachen sphärischer Oberfläche berechnet nur den Winkel zwischen Schnittpunkt und dem Punkt ...

      ang = acos(dot(intersection,point)); // [radians] 
      

      und konvertieren ARCLENGTH

      d = ang*R; // [same Units as R] 
      
+0

Ich benutze WGS84. – user2033412

+0

@ user2033412 das ist ein bisschen komplizierter ... Die Projektion erfolgt iterativ, um die Genauigkeit zu erhöhen ... Sie suchen einfach 'lat', bis es zu' x, y, z' passt. Sie beginnen mit der sphärischen Projektion und ändern dann 'lat 'um die Entfernung zu minimieren ... – Spektre

+0

@ user2033412 siehe [Wie konvertiert man eine sphärische Geschwindigkeit in kartesische Koordinaten] (https://Stackoverflow.com/a/41161714/2521214) und die verknüpften Antworten für einige zusätzliche Ideen ... – Spektre

Verwandte Themen