Wie berechnet man den Breiten- und Längengrad eines Punktes auf der Erde mit Hilfe von Azimut und Höhe, gesehen von einem geostationären Satelliten?

Ich erhalte den Längengrad eines geostationären Satelliten und einen Zeigevektor vom Satelliten in Form von Azimut- und Elevationswinkeln, die vom Satelliten zur Erde blicken (wobei Azimut und Elevation Null die Richtung vom Satelliten zum Subsatellitenpunkt sind und wobei der Azimut östlich dieser Richtung positiv ist, die Höhe nördlich dieser Richtung positiv). Gibt es eine allgemein anerkannte Methode zur Berechnung des Breiten- und Längengrads des Ortes, an dem der Zeigevektor auf eine WGS 84-förmige Erde trifft?

Hier kann das SPICE-Toolkit möglicherweise helfen. Ich denke, @PearsonArtPhoto hat einige Erfahrung mit dieser Software.
@JCRM meiner Erfahrung nach Leute, die nicht alle Benutzer sind, die einen sichtbaren (nicht gelöschten) Kommentar zum Beitrag haben. wird von der nicht benachrichtigt @.

Antworten (1)

Hinweis: Ich glaube, die Erdkoordinaten sollten mit Großbuchstaben geschrieben werden ( X , Y , Z ) aber Zitate aus der anderen Antwort verwenden Kleinbuchstaben ( X , j , z ) . Da der radikale Begriff auch kaum zu Kleinbuchstaben passt, habe ich an den meisten Stellen die Kleinschreibung beibehalten. Bei dieser Antwort stehen Groß- und Kleinschreibung für dieselben Koordinaten.

tl; dr: Stecken Sie die Position Ihres Satelliten ein ( X , j , z )

X 0 = X X ^ + j j ^ + z z ^
und die Normale des Vektors ( u , v , w )
N ^ = u X ^ + v j ^ + w z ^
zu bekommen T die Länge des Vektors vom Satelliten zum Ellipsoid, dann verwenden
X ich N T e R S e C T = X 0 + T N ^
um die Koordinaten des Schnittpunkts mit dem Referenzellipsoid zu erhalten.

Verwenden Sie dann entweder die analytische Lösung im zweiten Abschnitt unten oder eine der iterativen Lösungen der Referenzen dort, um diese in Längen- und Breitengrad umzuwandeln.


Schnittpunkt-Mathematik, um (x, y, z) zu erhalten

Aus dieser praktischen Antwort in GIS SE:

Das WGS84-Referenzellipsoid ist ein zweiachsiges (und abgeflachtes) Ellipsoid. Er ist an den Polen kürzer als der Äquator, und der Äquator ist ein Kreis.

Die Gleichung dafür lautet:

X 2 A 2 + j 2 A 2 + z 2 B 2 1 = 0

Wo X , j , z ein Punkt auf der Oberfläche des Ellipsoids ist, und

Wo A ist die große Halbachse (6.378.137 Meter) und B ist die kleine Halbachse des WGS84-Ellipsoids (6.356.752,3142 Meter).

Ich werde die Mathematik aus dieser Antwort weiterhin verwenden und in MathJax und später in Python neu formatieren:

Die Position Ihres Satelliten ist X , j , z und die Richtung normal ist u , v , w . Die Länge des Vektors vom Satelliten zum ersten und nächsten Schnittpunkt (vorausgesetzt natürlich, dass sich Ihr Satellit außerhalb der Erde befindet :

t = -(1/(b^2 (u^2 + v^2) +  a^2 w^2)) * (b^2 (u x + v y) + a^2 w z + 1/2 Sqrt[
     4 (b^2 (u x + v y) + a^2 w z)^2 - 
     4 (b^2 (u^2 + v^2) + a^2 w^2) (b^2 (-a^2 + x^2 + y^2) + a^2 z^2)])

In MathJax:

A = 1 B 2 ( u 2 + v 2 ) + A 2 w 2

B = B 2 ( u X + v j ) + A 2 w z

C = ( B 2 ( u X + v j ) + A 2 w z ) 2 ( B 2 ( u 2 + v 2 ) + A 2 w 2 ) ( B 2 ( A 2 + X 2 + j 2 ) + A 2 z 2 )

T = A ( B + C )

was einfacher zu lesen ist als die Art und Weise, wie MathJax alles in einer Zeile anzeigt:

T = 1 B 2 ( u 2 + v 2 ) + A 2 w 2 ( B 2 ( u X + v j ) + A 2 w z + ( B 2 ( u X + v j ) + A 2 w z ) 2 ( B 2 ( u 2 + v 2 ) + A 2 w 2 ) ( B 2 ( A 2 + X 2 + j 2 ) + A 2 z 2 ) )

Implementiert in Python:

import numpy as np
a, b = 0.9, 1.1
asq, bsq = a**2, b**2
x, y, z = 5.0, 0.0, 0.0
u, v, w = -np.sqrt(1 - 0.1**2 - 0.1**2), 0.1, 0.1
xsq, ysq, zsq = x**2, y**2, z**2
usq, vsq, wsq = u**2, v**2, w**2

A = -(1/(bsq*(usq + vsq) +  asq*wsq))
B = bsq*(u*x + v*y) + asq*w*z
C = 0.5*np.sqrt(4*(bsq*(u*x + v*y) + asq*w*z)**2 -
                      4*(bsq*(usq + vsq) + asq*wsq) *
                      (bsq*(-asq + xsq + ysq) + asq*zsq))
t = A * (B + C)
print "t: ", t
xyz, uvw   = np.array([x, y, z]), np.array([u, v, w])
xyzi       = xyz + t*uvw
xi, yi, zi = xyzi
print "point of intersection: ", xyzi
print "check, is it zero within roundoff? ", xi**2/asq + yi**2/asq + zi**2/bsq - 1

es ergibt:

t:  4.33961998769
point of intersection:  [ 0.70399539  0.433962    0.433962  ]
check, is it zero?  -8.54871728961e-15

Die Lösung fällt tatsächlich auf das Ellipsoid.

Wandeln Sie (x, y, z) in Längen- und Breitengrad um

Wir müssen die Gleichungen (in dieser Antwort gezeigt ) umkehren, um den Breiten- und Längengrad auf dem WSG84-Ellipsoid zu erhalten, der diesen Koordinaten entspricht.

Laut [Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates][1] von Wikipedia

Die kartesischen 3D-Koordinaten X , Y , Z in erdzentrierten, erdfesten Koordinaten unter der Annahme einer Ellipsoidform ist gegeben durch:

X = ( N ( ϕ ) + H ) cos ϕ cos λ

Y = ( N ( ϕ ) + H ) cos ϕ Sünde λ

Z = ( B 2 A 2 N ( ϕ ) + H ) Sünde ϕ

Wo ϕ , λ , H sind Breite, Länge und Höhe, und A , B sind die äquatorialen und polaren Radien des verwendeten Ellipsoids, und

N ( ϕ ) = A 2 A 2 cos 2 ϕ + B 2 Sünde 2 ϕ .

Die Umkehrung wird in Datumstransformationen von GPS-Positionen behandelt; Application Note finden Sie in dieser GIS-Frage sowie in diesem Link in Kommentaren.

Aus der Application Note zeige ich die analytische Lösung .

Definitionen:

A = 6378137
B = A ( 1 F ) = 6356752.31424518
F = 1 298.257223563
e = A 2 B 2 A 2
e ' = A 2 B 2 B 2 .

Das Auflösen nach Längengrad ist trivial. Die Anwendungsnotiz gibt Folgendes an:

λ = arctan ( j X ) ,

In der Praxis können Sie Arctan jedoch nicht blind verwenden, da es nicht alle vier Quadranten unterscheiden kann. Also stattdessen verwenden

λ = arctan 2 ( j , X ) .

Analytisch nach Breite auflösen, gibt die Application Note an

ϕ = arctan ( z + e ' 2 B Sünde 3 ( θ ) P e 2 A cos 3 ( θ ) )

Wo

P = X 2 + j 2
θ = arctan ( z A P B ) .

Wieder sollten Sie wahrscheinlich verwenden A R C T A N 2 ( ) anstatt sich um die Quadranten zu kümmern.

Iterative Lösungen finden Sie auch in dieser Referenz sowie den anderen (bereits oben erwähnten). Iterative Lösungen waren in der Vergangenheit wahrscheinlich deutlich schneller (und könnten es auch jetzt sein), was wichtig wäre, wenn Sie Raytracing für Millionen von Punkten durchführen, z. B. ein Bild der Erdoberfläche aus der Sicht der Satelliten mit einem genauen erzeugen Darstellung.

@Federico Normalerweise mache ich mich nicht mit zitierten Gleichungen herum, aber verzweifelte Zeiten, in denen ich mit MathJax ringe, erfordern verzweifelte Maßnahmen. Ich habe die Änderung vorgenommen und nichts ist explodiert. Danke! Update: Ich habe den hässlichen Stern jetzt auch extrahiert, danke 2 !
@Federico gab es tatsächlich, danke 3 ! Es ist Zeit für das Abendessen. Danach gehe ich zurück und überprüfe es noch einmal und mache dann auch die Python.