Calcul de la position aux antipodes de sa position

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
PhM
Messages : 118
Inscription : dim. 08/déc./2019 10:50

Calcul de la position aux antipodes de sa position

Message par PhM »

Bonjour,

Petit programme du jour : Calcul de la position aux antipodes de sa propre position
1/ entrer la latitude et la longitude de n'importe quel lieu dans le monde (en degrés décimaux)
2/ appuyer sur CALCULER et les 2 positions antipodiques apparaissent sur 2 cartes distinctes avec la distance les séparant
A refaire autant de fois que vous le souhaiter.

Image

Tout est ici (source, images et exe) pour Windows x64 : https://mijon.pagesperso-orange.fr/Pure ... tipode.zip

Le source (manque l'image)

Code : Tout sélectionner

; -------------------------------------------------------------------------------------------------------
;          Calcul de l'antipode des coordonnées de départ sur terre (valeurs en degrés décimaux)
;                           et affichage sur deux cartes Openstreetmap
;
;                       Philippe Mjon - décembre 2019 PureBasic 5.71 LTS (x64)
;
;                     Référence de calcul : https://fr.wikipedia.org/wiki/Terre
;                Rayon moyen de la terre  = (2 x rayon equatorial) + rayon polaire / 3
;             Rayon moyen de la terre  = ((2x6378.137)+6356.7523) /3 = 6371.0087890625 km
;
;                           Ex : Paris (lat1 = 48.856667, long1 = 2.350987)
;                           Ex : Lyon (lat2 = 45.767299, long2 = 4.834329)
;
; -------------------------------------------------------------------------------------------------------
dat$ = " déc. 2019"
ver$ = " v1.0"
UsePNGImageDecoder()

Declare Openstreetmap ()

; ---------------------------------------- Boucle principale ---------------------------------------------

If OpenWindow(0, 0, 0, 300, 400, " ANTIPODE     " + Chr(169) + "Ph. Mijon " + dat$ + ver$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  SetWindowColor(0, RGB(255, 255 ,255))         ; couleur du fond de la fenetre
  
  If LoadImage(0, "F:\Purebasic\geoide.png")    ; localisation de l'image à adapter suivant votre cas
    ImageGadget(10, 32, 0, 239, 224, ImageID(0)); ImageGadget standard
  EndIf
    
  TextGadget(11, 8, 235,280,15,"Latitude d'un lieu au format décimal")
  StringGadget(12, 8,  250, 280, 20, "48.856667")
  TextGadget(13, 8, 275,280,15,"Longitude d'un lieu au format décimal")
  StringGadget(14, 8,  290, 280, 20, "2.350987")
  TextGadget(15, 8, 315,280,15,"Distance invariable estimée entre les 2 points antipodaux (km)")
  StringGadget(16, 8,  330, 280, 20, "")
  ButtonGadget(17, 60, 355, 80, 40,"CALCULER")
  ButtonGadget(18, 160, 355, 80, 40,"QUITTER")
  
  Repeat  
    Evenement  = WaitWindowEvent()

    Select Evenement
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 17
            Openstreetmap ()
          Case 18
            CloseWindow(0)
            End       
        EndSelect      
    EndSelect
    
  Until Evenement = #PB_Event_CloseWindow
EndIf            

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

; ------------------------------------------- Procédure -------------------------------------------------

Procedure Openstreetmap ()
; coordonnées décimales de départ
lat1.D = ValD(GetGadgetText(12))
long1.D = ValD(GetGadgetText(14))

; calcul des coordonnées décimales aux antipodes
lat2.D=-lat1
long2.D=long1-180

; calcul invariable de la distance entre les 2 points antipodaux d'une sphère
Rm.f = 6371008.7890625;   Rayon_moyen en m
km = ACos(Sin(Radian(lat1)) * Sin(Radian(lat2)) + Cos(Radian(lat1)) * Cos(Radian(lat2)) * Cos(Radian(long1-long2))) * Rm
resultat$ = StrF((km)/1000,0)

SetGadgetText(16, resultat$)

If OpenWindow(1,410,350,700,700," POSITION DE DEPART              ")
  zoom = 11
  html1$="https://www.openstreetmap.org/?&mlat="+lat1+"&mlon="+long1+"#map="+zoom+"/"+lat1+"/"+long1 ; Openstreetmap
  WebGadget(1,10,10,690,690,html1$)
EndIf

If OpenWindow(2,1440,350,700,700," AUX ANTIPODES              ")
  zoom = 4
  html2$="https://www.openstreetmap.org/?&mlat="+lat2+"&mlon="+long2+"#map="+zoom+"/"+lat2+"/"+long2 ; Openstreetmap
  WebGadget(2,10,10,690,690,html2$)
EndIf

EndProcedure

End
Enjoy !