Problème de calcul de distance entre deux coordonnées géographiq

zazou36000 Messages postés 2 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 29 juin 2015 - 26 juin 2015 à 12:59
zazou36000 Messages postés 2 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 29 juin 2015 - 29 juin 2015 à 10:29
Bonjour
J'ai essayé d'utiliser le code de cs_Jack :
[vba excel] calculer la distance entre deux coordonnées géographiques.
Mon but étant de calculer la distance qui sépare un point donné sur la carte, d'une ville de l'Indre (distance en vol d'oiseau).
Exemple :




Le souci est que mon résultat (Distance) est NÉGATIF. Le bon résultat serait 89 Km entre Civaux et Aigurande.
Je ne trouve pas le hic.
Si j'arrive à comprendre et donc rectifier ce résultat. L'étape suivante est de boucler le calcul pour chaque point d'arrivée.

Private Sub CalculeDistance()
    
    ' Calcule la distance entre deux coordonnées géographiques
    ' Les coordonnées Latitude et Longitude doivent être exprimées en degrés décimaux
    '   (et pas en degrés, minutes, secondes)

    Dim gRayonMoyen As Single
    Dim gLatitude1  As Single
    Dim gLongitude1 As Single
    Dim gLatitude2  As Single
    Dim gLongitude2 As Single
    Dim gDistance   As Single
    
    If Not (IsEmpty(Range("LAT_ORIGINE")) Or _
            IsEmpty(Range("LNG_ORIGINE")) Or _
            IsEmpty(Range("LAT")) Or _
            IsEmpty(Range("LNG"))) Then
        If Range("LAT_ORIGINE").Value = Range("LAT").Value And _
           Range("LNG_ORIGINE").Value = Range("LNG").Value Then
            Range("Distance").Value = 0
        Else
            gRayonMoyen = 6371  ' de la terre, en km
            gPi = 4 * Atn(1)
            ' Convertit les degrés en radians
            gLatitude1 = Range("LAT_ORIGINE").Value / 180 * gPi
            gLongitude1 = Range("LNG_ORIGINE").Value / 180 * gPi
            gLatitude2 = Range("LAT").Value / 180 * gPi
            gLongitude2 = Range("LNG").Value / 180 * gPi
            ' Calcul
            gDistance = ACos((Sin(gLatitude1) * Sin(gLatitude2)) _
                           + (Cos(gLatitude1) * Cos(gLatitude2) * Cos(gLongitude1 - gLongitude2))) _
                      * gRayonMoyen
            ' Affichage
            Range("Distance").Value = gDistance
        End If
    End If
    
End Sub

Private Function ACos(AngleRandian As Single) As Single
    ' ArcCosinus
    ACos = Atn((AngleRandian * (-1)) _
               / Sqr(((AngleRandian * (-1)) * AngleRandian) + 1)) _
         + (gPi / 2)
End Function



Toute ma gratitude à celui ou celle qui consacrera un peu de temps pour m'aider.
Un grand MERCI

PS: mon niveau en programmation est bas.
A voir également:

2 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juin 2015 à 23:27
Bonjour,
1) moi, c'est 98 km et non 89 km, que je calcule
2) il est probable que tu t'es emmêlé les pinceaux entre les coordonnées
3) tu dis être d'un "niveau très bas en programmation".
Pourquoi alors utiliser VBA ? Une formule Excel suffit ===>>> regarde ===>>>



Et si tu tiens à utiliser VBA1 ===>>> utilise donc, depuis VBA, la propriété Formula !
1
zazou36000 Messages postés 2 Date d'inscription vendredi 26 juin 2015 Statut Membre Dernière intervention 29 juin 2015
29 juin 2015 à 10:29
Merci de ton aide ucfoutu,
Je vais pour l'instant utiliser la formule.
Mais je cherche tout de même à trouver mon erreur sur le code.
Encore merci de t'être penché sur ma question.
Et merci pour ta solution
Bonne journée à toi.
0
Rejoignez-nous