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](https://mijon.pagesperso-orange.fr/PureBasic/antipode.jpg)
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