J'ai une Sub qui calcule une Latitude ET une Longitude en fonction d'un point géographique de référence, d'une distance et d'un "cap" via le code suivant
B4X:
Sub Sp(Lat As Double,Lng As Double, Hdg As Double,D As Double)
Dim SpLat,SpLng as Double
SpLat= ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))
SpLng= Lng + ATan2D(SinD(Hdg)*Sin(D/6371)*CosD(Lat),Cos(D/6371)-SinD(Lat)*SinD(SpLat))
End Sub
Comment puis je faire pour obtenir le résultat via la syntaxe suivante :
sp(40,0,135,12).SpLat
ou
sp(40,0,135,12).SpLng
ceci est impossible.
Ceci oui:
B4X:
Sub Sp(Lat As Double,Lng As Double, Hdg As Double,D As Double) As Double()
Dim Sp(2) As Double
Sp(0) = ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))
Sp(1) = Lng + ATan2D(SinD(Hdg)*Sin(D/6371)*CosD(Lat),Cos(D/6371)-SinD(Lat)*SinD(SpLat))
Return Sp
End Sub
ou ceci:
B4X:
Sub Sp(Lat As Double,Lng As Double, Hdg As Double,D As Double) As Location
Dim Loc As Location
Loc.Latitude = ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))
Loc.Longitude = Lng + ATan2D(SinD(Hdg)*Sin(D/6371)*CosD(Lat),Cos(D/6371)-SinD(Lat)*SinD(SpLat))
Return Loc
End Sub
Location est un objet de la librairie GPS.
Une troisième solutuon serait de définir une Variable Type.
Merci Klaus, j'ai opté pour la définition d'une variable Type et le résultat est bien comme attendu
B4X:
Type CoordSp(SpLat As Double, SpLng As Double)
B4X:
Sub SP(Lat As Double,Lng As Double, Hdg As Double,D As Double) As CoordSp
Dim Result As CoordSp
Result.Initialize
Result.SpLat= ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))
Result.SpLng= Lng + ATan2D(SinD(Hdg)*Sin(D/6371)*CosD(Lat),Cos(D/6371)-SinD(Lat)*SinD(ASinD((SinD(Lat)*Cos(D/6371))+(CosD(Lat)*Sin(D/6371)*CosD(Hdg)))))
Return Result
End Sub