Page 1 sur 2

Convertisseur de coordonées GPS

Publié : lun. 19/mars/2012 11:45
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


Re: Convertisseur de coordonées GPS

Publié : lun. 19/mars/2012 12:05
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

Re: Convertisseur de coordonées GPS

Publié : lun. 19/mars/2012 12:38
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

Re: Convertisseur de coordonées GPS

Publié : lun. 19/mars/2012 12:39
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 :)

Re: Convertisseur de coordonées GPS

Publié : lun. 19/mars/2012 12:52
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 ;)

Re: Convertisseur de coordonées GPS

Publié : lun. 19/mars/2012 15:00
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

Re: Convertisseur de coordonées GPS

Publié : lun. 19/mars/2012 17:05
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: )

:)

Re: Convertisseur de coordonées GPS

Publié : lun. 16/avr./2012 16:20
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.

Re: Convertisseur de coordonées GPS

Publié : lun. 16/avr./2012 18:32
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) )

Re: Convertisseur de coordonées GPS

Publié : lun. 16/avr./2012 20:12
par MetalOS
Pour une fois que je poste un truc qui est sensé :lol: :lol: :lol: :lol:

Re: Convertisseur de coordonées GPS

Publié : dim. 29/avr./2012 22:13
par Backup
j'ai apporté une correction sur mon code ci dessus ;)
j'avais un probleme avec certaines valeur .. résolu :)

Re: Convertisseur de coordonées GPS

Publié : lun. 30/avr./2012 3:19
par Frenchy Pilou
C'est précis à combien un GPS pour le point indiqué ? 1 mètre, 10 mètres ...?

Re: Convertisseur de coordonées GPS

Publié : lun. 30/avr./2012 7:34
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

Re: Convertisseur de coordonées GPS

Publié : jeu. 20/mars/2014 23:18
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 :)

Re: Convertisseur de coordonées GPS

Publié : ven. 21/mars/2014 13:38
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?