Claude.ai ist manchmal ziemlich begabt bei solchen Dingen, ich kann das Ergebnis allerdings nicht einschätzen. Es könnte auch Bullshit sein, man weiß nie so genau:
Ich verstehe Ihre Anforderung. Sie möchten eine Formel oder VBA-Code, um eine neue Koordinate (b2) zu berechnen, die auf der Linie zwischen zwei gegebenen Koordinaten (a und b) liegt, aber um eine bestimmte Distanz von b in Richtung a verschoben ist. Hier sind Lösungen sowohl als Excel-Formel als auch als VBA-Funktion:
Option Explicit ' Funktion zur Berechnung der neuen Koordinate b2 Function BerechneKoordinateB2(lat1 As Double, lon1 As Double, lat2 As Double, lon2 As Double, distanzKm As Double) As String Const PI As Double = 3.14159265358979 Const ERDE_RADIUS As Double = 6371 ' Erdradius in Kilometern ' Umrechnung in Radianten lat1 = lat1 * PI / 180 lon1 = lon1 * PI / 180 lat2 = lat2 * PI / 180 lon2 = lon2 * PI / 180 ' Berechnung der Gesamtdistanz Dim dLon As Double dLon = lon2 - lon1 Dim gesamtDistanz As Double gesamtDistanz = 2 * ERDE_RADIUS * ArcSin(Sqr((Sin((lat2 - lat1) / 2)) ^ 2 + Cos(lat1) * Cos(lat2) * (Sin(dLon / 2)) ^ 2)) ' Verhältnis der neuen Distanz zur Gesamtdistanz Dim fraction As Double fraction = 1 - (distanzKm / gesamtDistanz) ' Berechnung der neuen Koordinate Dim a As Double, b As Double, x As Double, y As Double, z As Double Dim c As Double, d As Double a = Sin((1 - fraction) * gesamtDistanz / ERDE_RADIUS) * Cos(lat2) b = Cos((1 - fraction) * gesamtDistanz / ERDE_RADIUS) - Sin(lat1) * Sin(lat2) lat2 = ArcSin(Sin(lat1) * Cos((1 - fraction) * gesamtDistanz / ERDE_RADIUS) + Cos(lat1) * a) lon2 = lon1 + ArcTan2(a * Sin(dLon), b - Sin(lat1) * Sin(lat2)) ' Umrechnung zurück in Grad lat2 = lat2 * 180 / PI lon2 = lon2 * 180 / PI ' Rückgabe als String im Format "Latitude, Longitude" BerechneKoordinateB2 = Format(lat2, "0.000000") & ", " & Format(lon2, "0.000000") End Function ' Hilfsfunktion für ArcSin Function ArcSin(x As Double) As Double If Abs(x) = 1 Then ArcSin = Sgn(x) * PI / 2 Else ArcSin = Atn(x / Sqr(1 - x * x)) End If End Function ' Hilfsfunktion für ArcTan2 Function ArcTan2(y As Double, x As Double) As Double If x > 0 Then ArcTan2 = Atn(y / x) ElseIf x < 0 Then If y >= 0 Then ArcTan2 = Atn(y / x) + PI Else ArcTan2 = Atn(y / x) - PI End If ElseIf y > 0 Then ArcTan2 = PI / 2 ElseIf y < 0 Then ArcTan2 = -PI / 2 Else ArcTan2 = 0 ' Undefiniert, könnte auch einen Fehlerwert zurückgeben End If End Function
Um diese VBA-Funktion in Excel zu verwenden, fügen Sie sie in ein VBA-Modul ein. Dann können Sie sie in einer Zelle wie folgt aufrufen:
=BerechneKoordinateB2(A2, B2, C2, D2, E2)
Dabei wird angenommen, dass:
- A2 und B2 die Breiten- und Längengrade von Koordinate-a enthalten
- C2 und D2 die Breiten- und Längengrade von Koordinate-b enthalten
- E2 die Distanz in Kilometern enthält, um die die Linie verkürzt werden soll
Alternativ können Sie auch eine Excel-Formel verwenden, die jedoch komplexer und möglicherweise weniger genau ist. Hier ist eine Annäherung:
=LET( lat1, RADIANS(A2), lon1, RADIANS(B2), lat2, RADIANS(C2), lon2, RADIANS(D2), d, E2/6371, f, 1-d/ACOS(SIN(lat1)*SIN(lat2)+COS(lat1)*COS(lat2)*COS(lon2-lon1)), A, SIN((1-f)*d)*COS(lat2), B, COS((1-f)*d)-SIN(lat1)*SIN(lat2), lat3, ASIN(SIN(lat1)*COS((1-f)*d)+COS(lat1)*A), lon3, lon1+ATAN2(A*SIN(lon2-lon1), B-SIN(lat1)*SIN(lat3)), CONCATENATE(TEXT(DEGREES(lat3),"0.000000"), ", ", TEXT(DEGREES(lon3),"0.000000")) )
Diese Formel verwendet die LET-Funktion, die in neueren Excel-Versionen verfügbar ist. Sie führt die gleiche Berechnung wie die VBA-Funktion durch, ist aber möglicherweise etwas weniger genau aufgrund der Einschränkungen von Excel-Formeln.
Beide Methoden verwenden die Haversine-Formel zur Berechnung von Distanzen auf einer Kugel und berücksichtigen die Krümmung der Erde.