Convertisseur de coordonées GPS

Programmation d'applications complexes
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Convertisseur de coordonées GPS

Message par Backup »

Convertisseur GPS

de coordonnées Decimal style : 39.873928 en son equivalent degres,minute,secondes style :N 39° 52' 26.14''

Marche dans les deux sens , mais je l'ai surtout fait pour une conversion Decimal-> degres minute secondes ...

Code : Tout sélectionner

;***********************************************
;Titre  :*convertisseur_gps
;Auteur  : Dobro
;Date  :20/03/2014
;Heure  :23:12:14
;Version Purebasic :  PureBasic 5.22 LTS (Windows - x86)
;Version de l'editeur :EPB V2.54
; Libairies necessaire : Aucune 
;***********************************************


; ******************* base 60 2 Deci ******************************
;Exemple. Soit une latitude de 45° 53' 36" (45 degrés, 53 minutes et 36 secondes). Exprimée en degrés décimaux, la latitude sera égale à :
;latitude = 45 + (53 / 60) + (36 / 3600) = 45.89
;Formulation générale :
;latitude (degrés décimaux) = degrés + (minutes / 60) + (secondes / 3600)


; ******************* decimal 2 base 60 ************************** 
;      Exemple : soit une longitude de 121,135°
; 
;     Le nombre avant la virgule indique les degrés ? 121°
;     Multiplier le nombre après la virgule par 60 ? 0,135 * 60 = 8,1
;     Le nombre avant la virgule devient la minute (8')
;     Multiplier le nombre après la virgule par 60 ? 0,1 * 60 = 6
;     Le résultat correspond aux secondes (6").
;     Notre longitude sera de 121° 8' 6"
; 
;http://www.maplorer.com/convert1.html 

;47.285288

Declare  OpenWindow_Window_0()
Declare.s Convert_gps(gps_Deci.s,gps_sexa.s)



;{- Enumerations / DataSections
;{ Windows
Enumeration
	#Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
	#Titre
	
	#Text_base_60
	#Text_deci
	#String_Sexa
	#String_decimal
	
	#Text_base_602
	#Text_deci2
	
	#String_Sexa2
	#String_decimal2
	
	#Auteur
	#info
	#info2
	#button_carte
EndEnumeration
;}
;{ Fonts
Enumeration
	#Font_Titre
	#Font_String_Sexa
	#Font_String_decimal
	#Font_String_Sexa2
	#Font_String_decimal2
EndEnumeration
;}
;}
Procedure OpenWindow_Window_0()
	If OpenWindow(#Window_0, 506, 152, 459, 289, "Convertisseur GPS", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
		;If CreateGadgetList(WindowID(#Window_0))
		TextGadget(#Titre, 42, 8, 342, 48, "Convertisseur GPS")
		
		TextGadget(#Text_base_60, 20, 82, 80, 28, "Deg Min Sec")
		TextGadget(#Text_deci, 20, 124, 70, 22, "Decimal")
		StringGadget(#String_Sexa, 114, 78, 240, 32, "00 00 00")
		StringGadget(#String_decimal, 114, 116, 240, 32, "00.0000")
		
		TextGadget(#Text_base_602, 20, 170, 80, 28, "Deg Min Sec")
		TextGadget(#Text_deci2, 20, 208, 70, 22, "Decimal")
		StringGadget(#String_Sexa2, 114, 166, 240, 32, "00 00 00")
		StringGadget(#String_decimal2, 114, 204, 240, 32, "00.0000")
		
		TextGadget(#Auteur, 366, 270, 80, 24, "By Dobro")
		TextGadget(#Info, 366, 78, 80, 40, "Lat=Nord"+chr(10)+"(si positif)")
		TextGadget(#Info2, 366, 166, 80, 40, "Lon=Est"+chr(10)+"(si positif)")
		; Gadget Fonts
		SetGadgetFont(#Titre, LoadFont(#Font_Titre, "Microsoft Sans Serif", 22, #PB_Font_Bold|#PB_Font_HighQuality))
		SetGadgetFont(#String_Sexa, LoadFont(#Font_String_Sexa, "Microsoft Sans Serif", 14, #PB_Font_HighQuality))
		SetGadgetFont(#String_decimal, LoadFont(#Font_String_decimal, "Microsoft Sans Serif", 14, #PB_Font_HighQuality))
		
		SetGadgetFont(#String_Sexa2, LoadFont(#Font_String_Sexa2, "Microsoft Sans Serif", 14, #PB_Font_HighQuality))
		SetGadgetFont(#String_decimal2, LoadFont(#Font_String_decimal2, "Microsoft Sans Serif", 14, #PB_Font_HighQuality))
		
		ButtonGadget(#button_carte,114,260,200,25,"afficher la carte")
		
		;EndIf
	EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
	Select WaitWindowEvent(2)
		; ///////////////////
		Case #PB_Event_Gadget
		Select EventGadget()
			Case #Titre
			Case #Text_base_60
			Case #Text_deci
			Case #button_carte
			;www.itilog.com/fr/gps/39.873928/-4.046692
			;https://www.google.fr/maps/@45.317723,5.4372395,8z
			;https://maps.google.com/maps?q=48.838857,3.010464
			if copie_gps_Deci.s<>"" and copie_gps_Deci2.s<>""
				;
				;html$="www.itilog.com/fr/gps/"+copie_gps_Deci.s+"/"+copie_gps_Deci2.s  ;<<<<<<<<<<<<<<<<<<< en utilisant Itilog
				;html$="https://www.google.fr/maps/@"+copie_gps_Deci.s+","+copie_gps_Deci2.s+","+"13z" ; <<<<<<<<<<<< en utilisant GoogleMap
				html$="https://maps.google.com/maps?q="+copie_gps_Deci.s+","+copie_gps_Deci2.s+"" ; <<<<<<<<<<<< en utilisant GoogleMap avec pointeur
				RunProgram(html$)
			Endif
			
			Case #String_Sexa
			gps_sexa.s=GetGadgetText(#String_Sexa)
			gps_Deci.s=""
			SetGadgetText(#String_decimal,gps_Deci.s)
			SetGadgetText(#String_decimal, Convert_gps(gps_Deci.s,gps_sexa.s))
			Case #String_decimal
			gps_Deci.s=GetGadgetText(#String_decimal)
			copie_gps_Deci.s=gps_Deci.s
			if valf(gps_Deci.s)<0
				gps_Deci.s=strf(-valf(gps_Deci.s),6)
				;;SetGadgetText(#String_decimal,gps_Deci.s )
			Endif
			gps_sexa.s=""
			SetGadgetText(#String_Sexa,gps_sexa.s )
			SetGadgetText(#String_Sexa, Convert_gps(gps_Deci.s,gps_sexa.s))
			Case #String_Sexa2
			gps_sexa.s=GetGadgetText(#String_Sexa2)
			gps_Deci2.s=""
			SetGadgetText(#String_decimal2,gps_Deci2.s)
			SetGadgetText(#String_decimal2, Convert_gps(gps_Deci2.s,gps_sexa.s))
			Case #String_decimal2
			gps_Deci2.s=GetGadgetText(#String_decimal2)
			copie_gps_Deci2.s=gps_Deci2.s
			if valf(gps_Deci2.s)<0
				gps_Deci2.s=strf(-valf(gps_Deci2.s),6)
				;;SetGadgetText(#String_decimal2,gps_Deci.s )
			Endif
			gps_sexa.s=""
			SetGadgetText(#String_Sexa2,gps_sexa.s )
			SetGadgetText(#String_Sexa2, Convert_gps(gps_Deci2.s,gps_sexa.s))
			Case #Auteur
		EndSelect
		; ////////////////////////
		Case #PB_Event_CloseWindow
		Select EventWindow()
			Case #Window_0
			CloseWindow(#Window_0)
			Break
		EndSelect
	EndSelect
Forever
;
;}





procedure.s Convert_gps(gps_Deci.s,gps_sexa.s)
	; By Dobro
	diviseur.s="10,100,1000,10000,100000,1000000,10000000"
	
	
	if gps_Deci.s<>"" 
		degres_deci.s=stringfield(gps_Deci.s,1,".")
		minute_deci.s=stringfield(gps_Deci.s,2,".")
		if  len(minute_deci.s)>6
			minute_deci.s=left(minute_deci.s,6)
		endif
		
		
		if len(minute_deci.s)>0
			divi=val(StringField(diviseur.s,len(minute_deci.s),"," ))
			else
			divi=1
		endif
		
		degres=val(degres_deci.s)
		minut.i=val(minute_deci.s)*60/divi
		
		seconde.d=valf(minute_deci.s)*60/divi
		sec$=strf(seconde.d) :sec$=StringField(sec$,2,".")
		seconde.d=valf(sec$)*60/divi
		
		gps_sexa.s=str(degres)+"° "+str(minut.i)+"' "+Strf(seconde.d/10000,2)+"''"
		ProcedureReturn gps_sexa.s
	endif
	
	if gps_sexa.s<>""
		
		gps_sexa.s=ReplaceString(gps_sexa.s,"°"," ")
		gps_sexa.s=ReplaceString(gps_sexa.s,"''"," ")
		gps_sexa.s=ReplaceString(gps_sexa.s,"'"," ")
		
		degres_sexa.s=stringfield(gps_sexa.s,1," ")
		minute_sexa.s=stringfield(gps_sexa.s,2," ")
		seconde_sexa.s=stringfield(gps_sexa.s,3," ")
		reste0.i=val(degres_sexa.s)
		reste1.d=val(minute_sexa.s)/60
		reste2.d=val(seconde_sexa.s)/3600
		gps_deci.s=strf(reste0.i+reste1.d+reste2.d,5)
		ProcedureReturn gps_deci.s
	endif
endprocedure


; 





; 



; 



; 



; 







; 



; 



; 

; Epb

Dernière modification par Backup le sam. 22/mars/2014 0:08, modifié 8 fois.
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Convertisseur de coordonées GPS

Message par kernadec »

bonjour Dobro
merci,
mais quand j'entre en décimales 45.272727

la 6ème décimale provoque un ptit bug sur XP sp2

Cordialement
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Convertisseur de coordonées GPS

Message par GallyHC »

Bonjour,

J'ai verifier avec un code que j'avais fait en VisualBasic 6 pour la premiere maxi-box et on a les même resultats :). Sinon cela peu etre vraiment utile pour moi.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertisseur de coordonées GPS

Message par Backup »

kernadec a écrit :bonjour Dobro
merci,
mais quand j'entre en décimales 45.272727

la 6ème décimale provoque un ptit bug sur XP sp2

Cordialement
oui c'est une division par zero !

c'est due a cette ligne :

Code : Tout sélectionner

 diviseur.s="10,100,1000,10000,100000"
comme tu le vois c'est prévu pour 5 decimal max !
si tu veux 6 decimal , il suffit d'ajouter
diviseur.s="10,100,1000,10000,100000,1000000"
etc ... tu ajoute un zero , a chaque decimale supplémentaire ..

mais franchement 5 decimales c'est deja tres précis :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertisseur de coordonées GPS

Message par Backup »

je viens d'ajouter un test pour ne pas que ça depasse 6 caracteres apres la virgule (le point)
ça ne devrai plus planter ;)
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Convertisseur de coordonées GPS

Message par kernadec »

merci, Dobro

j'utilise aussi ce programme pour convertir les différents systèmes de projections.
il est gratuit et top pour une utilisation de coordonnées Lambert des cartes IGN vers
Google Maps qui utilise : World Geodetic system 1984 (WGS84)
ou à l'inverse pour obtenir une distance entre deux points avec les Cood. Lambert.

http://vtopo.free.fr/convers3.htm

Cordialement
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertisseur de coordonées GPS

Message par Backup »

tu sais moi j'y connais rien :)

Ma frangine qui conduit des cars de tourismes avait les coordonnées de lieux touristique au format Décimal

mais au moment de vouloir les rentrer dans son Snooper , probleme ! il est en Sexagésimal...

alors que sur le miens (Carmin Zumo gps moto) pas de probleme , il est en Décimal ..

bref cette écueil m'a forcé a faire ce petit convertisseur ... pour les prochaines fois :)

je me suis dis que ça pourrai servir pour ceux qui comme moi ont été confronté a ce probleme ( qui n'arrive pas tout les jours.. :lol: )

:)
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Convertisseur de coordonées GPS

Message par MetalOS »

Voici un petite procédure que j'utilise dans un de mes logiciel pour convertir des coordonnées Heures, minutes, secondes en décimal.

Code : Tout sélectionner

Procedure Convert()
 LatD1.s = GetGadgetText(#Gadget_Form3_StringLatDeg)
  LatD.l = Val(LatD1.s)
 LatM1.s = GetGadgetText(#Gadget_Form3_StringLatMin)
  LatM.l = Val(LatM1.s)
 LatS1.s = GetGadgetText(#Gadget_Form3_StringLatSec)
  LatS.l = Val(LatS1.s)
 LongD1.s = GetGadgetText(#Gadget_Form3_StringLongDeg)
  LongD.l = Val(LongD1.s)
 LongM1.s = GetGadgetText(#Gadget_Form3_StringLongMin)
  LongM.l = Val(LongM1.s)
 LongS1.s = GetGadgetText(#Gadget_Form3_StringLongSec)
  LongS.l = Val(LongS1.s)  
 
 ResultatLongitude.f = LongD.l + (LongM.l/60) + (LongS.l/3600)
  ResultatLong$ = StrF(ResultatLongitude.f) 
 ResultatLatitude.f = LatD.l + (LatM.l/60) + (LatM.l/3600)   
  ResultatLat$ = StrF(ResultatLatitude.f) 
  
 SetGadgetText(#Gadget_Form3_StringResultLat, ResultatLat$)
 SetGadgetText(#Gadget_Form3_StringResultLong, ResultatLong$)

EndProcedure
Si ça peut aider.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertisseur de coordonées GPS

Message par Backup »

ben c'est la procedure complementaire de la mienne , :)

moi c'est deci -> base 60

toi c'est base 60 -> deci :) (latitude (degrés décimaux) = degrés + (minutes / 60) + (secondes / 3600) )
Avatar de l’utilisateur
MetalOS
Messages : 1492
Inscription : mar. 20/juin/2006 22:17
Localisation : Lorraine
Contact :

Re: Convertisseur de coordonées GPS

Message par MetalOS »

Pour une fois que je poste un truc qui est sensé :lol: :lol: :lol: :lol:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertisseur de coordonées GPS

Message par Backup »

j'ai apporté une correction sur mon code ci dessus ;)
j'avais un probleme avec certaines valeur .. résolu :)
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Convertisseur de coordonées GPS

Message par Frenchy Pilou »

C'est précis à combien un GPS pour le point indiqué ? 1 mètre, 10 mètres ...?
Est beau ce qui plaît sans concept :)
Speedy Galerie
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertisseur de coordonées GPS

Message par Backup »

en principe un GPS civil , c'est ( suivant les modeles ) precis de 2 a 15 metres ...
souvent une interpolation est effectué ..

ça peut paraitre , peut précis , mais il faut se rappeler qu'a l'echelle de l'europe ( les 3/4 des GPS maintenant couvre l'europe )
5 mètres c'est vraiment pas grand chose :)

les GPS Militaire eux sont plus precis ( de l'ordre du cm .. )

d'ici 2015 le Nouveau GPS civil ( pour le moment on squatte le GPS militaire ) , Galileo
sera plus precis ( a 1 metre prés )
http://cosmopolitech.blogspot.fr/2012/0 ... opeen.html

mon prg va au dela de la precision d'un GPS :)

apres la virgule on est au dm

au passage une adresse internet qui fait aussi ce genre de conversion mais en plus Affiche
sur la Carte ou c'est ... :)

http://www.gpsfrance.net/services/adresse2gps.php
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Convertisseur de coordonées GPS

Message par Backup »

j'ai mis a jour mon code de conversion Premiere page ...

car un petite erreur de virgule etait encore présent ...
je l'ai bien testé , maintenant, c'est clean :)
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Convertisseur de coordonées GPS

Message par nico »

J'ai testé avec d'autres sites et cela semble fonctionner correctement; tu ne pourrais pas mettre quatre champs longitude et latitude et le résultat sur les deux autres champs?
Répondre