Wie zeichne ich bei einer Linie auf der Erdoberfläche eine Linie senkrecht dazu?

9

Wie zeichne ich bei einer Linie auf der Erdoberfläche eine Linie senkrecht dazu?

Entschuldigung, wenn dies eine sehr einfache Frage ist. Ich dachte, dies wäre eine einfache Aufgabe, aber sie erweist sich als kontraintuitiv.

Ich beginne mit der blauen Linie in der Abbildung unten (siehe Link - Ich kann noch keine Zahlen hochladen). Ich fand eine senkrechte Linie, indem ich den Gradienten der blauen Linie (m) berechnete und dann eine weitere Linie (grün) mit dem Gradienten -1 / m zeichnete. Wenn ich die Linien in Matlab zeichne (unter Verwendung von "Plot" und "Achse gleich"), sehen sie erwartungsgemäß senkrecht aus.

http://imgur.com/7qMkx

Wenn ich diese Linien jedoch (mithilfe der KML-Toolbox) nach Google Earth exportiere, sehen sie nicht mehr senkrecht aus (siehe Link unten; die kürzere Linie ist die blaue Linie aus der vorherigen Abbildung).

http://imgur.com/ncJQ7

Ich verstehe, dass auf gekrümmten Oberflächen seltsame Dinge passieren, aber ich dachte, die Linien sollten zumindest lokal senkrecht aussehen. Ich vermute, dass dies etwas mit der Projektion in Google Earth zu tun hat - insbesondere mit der Tatsache, dass die Gitterzellen ungefähr ähnliche Seitenlängen zu haben scheinen, die Längskante jedoch eine Länge von 1 Grad hat, während die Längskante eine Länge von 0,5 hat Grad.

Also zusammenfassend:

  • Ist meine Methode zum Finden einer senkrechten Linie auf einer gekrümmten Oberfläche gültig? (dh Zeichnen einer Linie mit einem Gradienten von -1 / m)
  • Sehen die senkrechten Linien im Google Earth-Bild wie erwartet aus oder ist etwas Seltsames los?

AKTUALISIEREN:

Um mehr Kontext bereitzustellen: Ich betrachte Radardaten aus einem Flugzeug. Der mehrfarbige Bereich ist der „Schwad“, in dem Beobachtungen aufgezeichnet wurden. Die blaue Linie, mit der ich in der obigen Erklärung begonnen habe, verläuft parallel zum Schwad: Dies ist die Fluglinie des Flugzeugs (das Flugzeug bewegte sich in ungefähr südwestlicher Richtung). Das Radar blickt links in die Richtung senkrecht zur Fluglinie. Ich versuche, eine Linie senkrecht zur Fluglinie zu zeichnen. Dies sollte die Richtung sein, in die das Radar schaut, und sollte den Schwad sauber schneiden. Wie Sie sehen, ist dies nicht der Fall.

Geben Sie hier die Bildbeschreibung ein

Paul Keating
quelle
2
Tatsächlich stellt Google den Winkel korrekt dar, während Ihr Matlab-Plot nicht ...
whuber
Danke für die Antwort, whuber. Bedeutet das, dass die von mir berechnete Linie tatsächlich nicht senkrecht zum Original ist? Oder bedeutet das, dass die Art und Weise, wie ich die Zeilen in Matlab betrachte, irgendwie falsch ist? Ich habe den Befehl 'Achse gleich' in Matlab verwendet, um mich davon zu überzeugen, dass die Linien senkrecht sind, aber ich gehe davon aus, dass dies die Krümmung der Erde nicht richtig darstellen würde.
Paul Keating
2
Ihre erste Interpretation ist richtig, Paul. Die Verwendung von (lon, lat) als kartesische Koordinaten verzerrt die Richtungen so stark, dass die meisten Winkel sichtbar verzerrt sind. Daher bringt Sie die kartesische Formel -1 / m nicht einmal in die Nähe eines rechten Winkels, außer in ein paar glücklichen Richtungen (oder am Äquator). Um eine alternative Methode bereitzustellen, ist es hilfreich zu wissen, welche Art von "Linie" Sie möchten (z. B. geodätische oder rhumbische Linie), welchen Zweck Sie beim Zeichnen haben und wie lange sie dauern müsste. (Kurze Längen ermöglichen die Verwendung einfacher Näherungswerte.)
whuber
2
Übrigens können Sie viel über diese Probleme lernen, indem Sie einige der Themen auf unserer Website über konforme Projektionen lesen .
whuber
Vielen Dank, whuber. Sehr interessant. Ich habe in der obigen Problembeschreibung mehr Kontext angegeben. Die Länge, die ich benötige, ist relativ kurz (die oben gezeigte Breite des Schwads beträgt einige Zehntel Grad), daher wären Vorschläge zu gültigen Näherungen sehr willkommen. Danke auch für den Link - ich werde es überprüfen.
Paul Keating

Antworten:

10

Ein elegantes Prinzip liefert eine einfache Antwort:

Alle Punkte auf einer glatten gekrümmten Oberfläche sind in ausreichend großem Maßstab flach.

Dies bedeutet, dass wir nach einer affinen Änderung der Koordinaten (die normalerweise nur eine Neuskalierung einer von ihnen beinhaltet) Formeln der euklidischen Geometrie verwenden können, wie den Satz von Pythagoras zur Berechnung von Entfernungen und die Formel mit negativer reziproker Steigung zum Auffinden von Senkrechten.

Mit Breiten- und Längengradkoordinaten auf der Kugel (weg von den Polen, wo der Längengrad singulär wird) müssen wir nur die Ost-West-Richtung neu skalieren, um die schrumpfende Länge eines Längengrads widerzuspiegeln, wenn man sich den Polen nähert. Bei einem sphärischen Modell der Erde ist diese Schrumpfung durch den Kosinus des Breitengrads gegeben. Dies ist lediglich eine Änderung des Seitenverhältnisses der Handlung, nichts weiter.

Dies funktioniert für Regionen, die sich nicht mehr als einige Breitengrade von Nord nach Süd erstrecken und sich keinem der Pole nähern.

Deshalb alles , was Sie tun müssen, ist:

  1. Multiplizieren Sie alle Längen mit dem Kosinus eines typischen Breitengrads.

  2. Berechnen Sie die senkrechte Linie.

  3. Machen Sie die Koordinateneinstellung rückgängig.

Angenommen, die Spur des Flugzeugs hat sie von (lon, lat) = (-78, 40) nach (-79, 41) gebracht. Wir können einen typischen Breitengrad zwischen 40 und 41 annehmen, z. B. 40,5.

Schritt 1 Die angepassten Koordinaten sind (-78 * cos (40,5), 40) = (-59,31167, 40) und (-79 * cos (40,5), 41) = (-60,07207, 41).

Schritt 2 In der Frage wird vorgeschlagen, dies mit einer Methode mit negativer reziproker Steigung zu tun. Das wäre richtig, aber es wird in einigen Fällen fehlschlagen (wo die Steigung unendlich ist). Es ist allgemeiner und leistungsfähiger, Vektorarithmetik zu verwenden. So läuft die Berechnung ab.

Der Richtungsvektor für die Flugbahn ist die Verschiebung von Anfang bis Ende.

v =  (-60.07207, 41) - (-59.31167, 40)
  =  (-0.7604, 1.0).

Wenn Sie einen Vektor (x, y) im rechten Winkel im Uhrzeigersinn drehen, erhalten Sie (y, -x), von wo aus eine senkrechte Richtung nach rechts ist

w = (1.0, 0.7604).

Nach dem Satz von Pythagoras ist die Länge dieses Vektors die Quadratwurzel der Summe der Quadrate seiner Koeffizienten.

|w| = sqrt(1^2 + 0.7604^2) = 1.256268

Bewegen wir uns beispielsweise 0,2 Grad entlang dieses Vektors vom Startpunkt des Fluges des Flugzeugs. Der Start ist bei (-59.31167, 40) und die Verschiebung beträgt 0,2 / | w | mal w, endend bei

(-59.31167, 40) + 0.2 / 1.256268 * (1.0, 0.7604) = (-59.15247  40.12106).

Schritt 3 Um die Anpassung rückgängig zu machen, teilen Sie die ersten Koordinaten aller resultierenden Punkte durch denselben Kosinus wie in Schritt 1:

(-59.15247/cos(40.5), 40.12106) = (-77.79064, 40.12106)

Wenn Sie diese Punkte mit einem Seitenverhältnis von 1: 1 zeichnen, erscheint der Winkel eher stumpf als rechtwinklig. Wenn Sie jedoch das Seitenverhältnis auf 1: cos (40,5) (ca. 4: 3) ändern, wird der Winkel korrekt als 90 Grad angezeigt. Wenn Sie die Punkte mit einer konformen Projektion - einschließlich des Mercator von Google - zeichnen, ist auch der Winkel korrekt.

whuber
quelle
2
Das ist fantastisch, whuber. Vielen Dank. Es ist eine sehr klare Erklärung, wo ich falsch liege und wie ich das Problem beheben kann. Am Ende habe ich Matlabs Funktionen 'Azimut' und 'Rechnen' verwendet, um die senkrechte Linie zu erhalten, aber es ist gut, eine detailliertere Erklärung der ersten Prinzipien zu sehen, wie dies zu tun ist. Danke vielmals.
Paul Keating