Bonjour, j'ai un problème de calcul de distance Vol d'Oiseau entre 2 points XY.
La formule géométrique a l'air correcte.
Dans les 2 exemples ci joints Entre MONTERAULT FAULT SUR YONNE (77) et NANTERRE (92) ma formule calcule 99 kms en vol d'oiseau alors que sur tous les utilitaires la distance entre ces 2 villes est de 79 kms et 103 kms par la route.
Pareil pour la distance entre CHAMPIGNY SUR MARNE (94) et ROSNY SUR SEINE(78) , la distance calculée est de 99 kms alors qu' en vol d'oiseau sur tous les utilitaires la distance entre ces 2 villes est de 68 kms et 89 kms par la route: La distance en vol d'oiseau ne peut être supérieure à la distance par route !

J'ai vérifié les coordonnées XY tout est correct.
Voici le Code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Option Compare Database
Function Calcul_Distance(x_cible As Double, y_cible As Double, x_ref As Double, y_ref As Double) As Double
 
Calcul_Distance = 6371 * ArcCosinus(Math.Cos(Radians(y_cible)) * Math.Cos(Radians(y_ref)) * Math.Cos(Radians(x_ref) - Radians(x_cible)) + Math.Sin(Radians(y_cible)) * Math.Sin(Radians(y_ref)))
 
End Function
'---------------------------------------
Function PI() As Double
    PI = Atn(1) * 4
End Function
'-------------------------------------------
Public Function ArcCosinus(Valeur As Double) As Double
 
    If Valeur = 1 Then
        ArcCosinus = 0
    Else
        ArcCosinus = Atn(-Valeur / Sqr(-Valeur * Valeur + 1)) + _
        2 * Atn(1)
    End If
End Function
'----------------------
Function Radians(degres As Double) As Double
    'Conversion de degrés en radians
  Radians = degres / 180 * PI()
 
End Function
'------------------------------
 
Sub test_calcul()
 
    Dim x1 As Double
    Dim y1 As Double
    Dim x2 As Double
    Dim y2 As Double
    Dim Resultat As Double
 
 
 
   'Nanterre (92)
   x1 = 48.8886993055556
   y1 = 2.21100338888889
     'Monterault Fault sur Yonne (77)
  x2 = 48.3804315
  y2 = 2.94655349999994
  '
    Resultat = Calcul_Distance(x1, y1, x2, y2)
    MsgBox "Distance Nanterre (92) -> Monterault Fault sur Yonne (77) = " & Round(Resultat, 2) & "km"
 
 
 'Champigny sur Marne (94)
 x1 = 48.8126479
 y1 = 2.52886820000003
 'Rosny sur Seine (78
 x2 = 49.000443
 y2 = 1.650059
    Resultat = Calcul_Distance(x1, y1, x2, y2)
    MsgBox "Champigny sur Marne (94)  -> Rosny sur Seine (78) = " & Round(Resultat, 2) & "km"
 
End Sub
Merci pour votre aide