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.