Conversion de Coordonnées Géo-Cartographiques

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
PK1157
Messages : 10
Inscription : jeu. 14/mai/2015 23:37
Localisation : FRANCE 66 PYRENEES ORIENTALES

Conversion de Coordonnées Géo-Cartographiques

Message par PK1157 »

Bonjour,
Je suis tombé par hasard sur un message de kernadec sur ce forum dans lequel il avait la gentillesse de citer un travail réalisé sur le forum OpenOffice.
J'ai réalisé un petit utilitaire en PureBasic qui effectue les conversions entre systèmes géographiques ou projections cartographiques et permet de visualiser sur le web les points dont on fournit les coordonnées.
Peut-être cela intéressera-t-il quelqu'un ...
PK1157
Voici le source (GeKo.pb), je posterai le fichier d'aide GeKo_Aide.htm et le fichier de test GekoTest.csv dans un message suivant (taille !)

Edition le 10 juin 2015 18:53 : correction caractère accentué<=>entité HTML et lancement direct du navigateur pour les fichiers HTML produits.

Code : Tout sélectionner

Global NbParam.l=CountProgramParameters()
Global Dim LCmd$(7)
Global Dim GeoSys$(14)
Global Dim GeoPrm.l(14)
Global InSys$=""
Global OutSys$=""
Global NomPoint$=""
Global Result$=""
Global ResWeb$=""
Global$ RC$=Chr(13)+Chr(10)
Global$ TAB$=Chr(9)
Global.d LatWgs.d=0
Global.d LonWgs.d=0
Global.d LatNtf.d=0
Global.d LonNtf.d=0
Global.d XProj.d=0
Global.d YProj.d=0
Global NumFus=0
Global$ LettreZon$=""
Global$ WEB1$=""
Global$ WEB2$=""
Global$ NomWeb$=""
Global OS=0
Global$ Sys$=""

;Conversions Degrés <---> Radians
	Global.d Rad2Deg.d=180/#PI
	Global.d Deg2Rad.d=#PI/180
;système WGS84 (Ellipsoïde WGS84)
	Global.d aWGS.d=6378137:;Demi Grand-Axe de l'ellipsoïde WGS84 (m)
	Global.d bWGS.d=6356752.314245179:;Demi Petit-Axe de l'ellipsoïde WGS84 (m)
	Global.d eWGS.d=Sqr(1-((bWGS/aWGS)*(bWGS/aWGS))):;Première Excentricité de l'ellipsoïde WGS84
;système RGF93 (Ellipsoïde IAG-GRS80)
	Global.d aRGF.d=6378137:;Demi Grand-Axe de l'ellipsoïde IAG-GRS80 (m)
	Global.d bRGF.d=6356752.314140356:;Demi Petit-Axe de l'ellipsoïde IAG-GRS80 (m)
	Global.d eRGF.d=Sqr(1-((bRGF/aRGF)*(bRGF/aRGF))):;Première Excentricité de l'ellipsoïde IAG-GRS80
;système NTF (Ellipsoïde Clarke 1880)
	Global.d aNTF.d=6378249.2:;Demi Grand-Axe de l'ellipsoïde Clarke 1880 (m)
	Global.d bNTF.d=6356515:;Demi Petit-Axe de l'ellipsoïde Clarke 1880 (m)
	Global.d eNTF.d=Sqr(1-((bNTF/aNTF)*(bNTF/aNTF))):;Première Excentricité de l'ellipsoïde Clarke 1880
	Global.d MeridParis.d=2.33722916666667:;2°20'14,025" E de Greenwich

Procedure InitGeko()
	OS=OSVersion()
	Select OS
		Case #PB_OS_Windows_NT3_51 To #PB_OS_Windows_Future
			Sys$="W"
		Case  #PB_OS_Linux_2_2 To #PB_OS_Linux_Future
			Sys$="X"
		Default
			Sys$="N"
	EndSelect
	;Tableau des systèmes Géo/Carto utilisables
	;RGC et HTML ne'sont utilisables qu'en sortie !
	;CSV n'est utilisable qu'en entrée !
	For i=0 To 7
		LCmd$(i)=ProgramParameter(i)
		If i<>1:LCmd$(i)=ReplaceString(LCmd$(i),",","."):LCmd$(i)=UCase(LCmd$(i)):EndIf
	Next i
	GeoSys$(0)="CSV":GeoPrm(0)=1:;Utilisable en entrée (SOURCE) seulement
	GeoSys$(1)="WGS":GeoPrm(1)=2:;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(2)="WGSD":GeoPrm(2)=2:;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(3)="NTF":GeoPrm(3)=2:	;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(4)="NTFD":GeoPrm(4)=2:;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(5)="L1":GeoPrm(5)=2:	;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(6)="L2":GeoPrm(6)=2:	;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(7)="L2E":GeoPrm(7)=2:	;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(8)="L3":GeoPrm(8)=2:;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(9)="L4":GeoPrm(9)=2:;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(10)="L93":GeoPrm(10)=2:;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(11)="DFCI":GeoPrm(11)=1:;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(12)="UTM":GeoPrm(12)=4:  ;Utilisable en entrée (SOURCE) comme en sortie (CIBLE)
	GeoSys$(13)="RGC":GeoPrm(13)=0;Utilisable en sortie (CIBLE) seulement
	GeoSys$(14)="WEB":GeoPrm(14)=0;Utilisable en sortie (CIBLE) seulement
	WEB1$="<!DOCTYPE html PUBLIC "+Chr(34)+"-//W3C//DTD XHTML 1.1//FR"+Chr(34)+" "+Chr(34)+"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"+Chr(34)+">"
	WEB1$=WEB1$+RC$+"<html xmlns="+Chr(34)+"http://www.w3.org/1999/xhtml"+Chr(34)+" xml:lang="+Chr(34)+"fr"+Chr(34)+" >"
	WEB1$=WEB1$+RC$+"	<head>"
	WEB1$=WEB1$+RC$+"		<title>GeKo</title>"
	WEB1$=WEB1$+RC$+"		<meta http-equiv="+Chr(34)+"Content-Type"+Chr(34)+" content="+Chr(34)+"text/html; charset=UTF-8"+Chr(34)+" />"
	WEB1$=WEB1$+RC$+"		<meta name="+Chr(34)+"author"+Chr(34)+" content="+Chr(34)+"PK1157"+Chr(34)+">"
	WEB1$=WEB1$+RC$+"		<meta name="+Chr(34)+"copyright"+Chr(34)+" content="+Chr(34)+"PK1157"+Chr(34)+">"
	WEB1$=WEB1$+RC$+"		<style type="+Chr(34)+"text/css"+Chr(34)+">"
	WEB1$=WEB1$+RC$+"			table {margin: 0 auto; font-size: normal; text-align:center;border:1px solid black;}"
	WEB1$=WEB1$+RC$+"			caption {color:#801020; font-weight:bold;}"
	WEB1$=WEB1$+RC$+"			h1 {text-align:center;border:1px solid black;}"
	WEB1$=WEB1$+RC$+"			h2 {text-align:center;}"
	WEB1$=WEB1$+RC$+"			h3 {text-align:center;}"
	WEB1$=WEB1$+RC$+"			h4 {text-decoration:underline; color:teal;}"
	WEB1$=WEB1$+RC$+"			h5 {background: #C0C0F0; margin-left:40px; font-size: small; font-style : italic; color:teal;}"
	WEB1$=WEB1$+RC$+"		</style>"
	WEB1$=WEB1$+RC$+"	</head>"
	WEB1$=WEB1$+RC$+"	<body>"
	WEB1$=WEB1$+RC$+"		<h1>GeKo</h1>"
	WEB1$=WEB1$+RC$+"		<h2>Conversion G&eacute;o/Cartographique<br>(<i>Geodesic Konversion ?</i>)<br>Utilitaire en ligne de commande</h2>"
	WEB1$=WEB1$+RC$+"		<div>"
	WEB1$=WEB1$+RC$+"			<table width="+Chr(34)+"1000"+Chr(34)+" cols="+Chr(34)+"6"+Chr(34)+" border="+Chr(34)+"1"+Chr(34)+">"
	WEB1$=WEB1$+RC$+"				<caption>Conversion GeKo</caption>"
	WEB1$=WEB1$+RC$+"				<tr bgcolor="+Chr(34)+"#80DF80"+Chr(34)+"><th>Point</th><th>Lat.WGS84</th><th>lon.WGS84</th><th>OpenStreetMap<SUP>&reg;</SUP></th><th>GeoPortail I.G.N.<SUP>&reg;</SUP></th><th>GoogleMaps<SUP>&reg;</SUP></th></tr>"
	WEB2$="			</table>"
	WEB2$=WEB2$+RC$+"		</div>"
	WEB2$=WEB2$+RC$+"		<h2><a href="+Chr(34)+"mailto:pierrepetit57@laposte.net"+Chr(34)+" title="+Chr(34)+"Heureux d'&Ecirc;tre Utile&#013;(et un m&egrave;l de remerciement fait toujours plaisir !)"+Chr(34)+">HEU ...</a></h2>"
	WEB2$=WEB2$+RC$+"	</body>"
	WEB2$=WEB2$+RC$+"</html>"
EndProcedure
Procedure Aide()
	AppDir$=GetPathPart(ProgramFilename())
	CurDir$=GetCurrentDirectory()
	PrintN("Paramètre(s) absent(s) ou incorrects")
	If FileSize(CurDir$+"GeKo_Aide.htm")=-1
		If FileSize(AppDir$+"GeKo_Aide.htm")=-1
			CopyFile(AppDir$+"GeKo_Aide.htm",CurDir$+"GeKo_Aide.htm")
		EndIf
	EndIf
	If FileSize(CurDir$+"GeKo_Aide.htm")<>-1
		Select Sys$
			Case "W" : RunProgram(CurDir$+"Geko_Aide.htm")
			Case "X" : RunProgram("xdg-open",CurDir$+"Geko_Aide.htm","")
			Default :PrintN("Consultez le fichier "+CurDir$+"GeKo_Aide.htm avec votre navigateur.")
		EndSelect
	Else
		PrintN("Impossible d'ouvrir le fichier d'aide !")
	EndIf
EndProcedure
Procedure.d LatIsom(LatitDec.d, PremExcEllips.d)
	;LatitDec:Latitude Géographique en Degrés Décimaux
	;PremExEllips:Première excentricité de l'ellipsoïde
	LatitRad.d=LatitDec*Deg2Rad
	s.d=PremExcEllips*Sin(LatitRad)
	s=(1-s)/(1+s)
	s=Log(s)
	s=s*(PremExcEllips/2)
	s=Exp(s)
	s2.d=Tan(#PI/4+LatitRad/2)
	s=s2*s
	L.d=Log(s)
	ProcedureReturn(L)
EndProcedure
Procedure.d IsomLat(LatitIsom.d, PremExcEllips.d)
	;PremExEllips:Première excentricité de l'ellipsoïde (par Défaut, IAG/GRS 1980 pour WGS84)
;	;----------------------------------
	EL.d=Exp(LatitIsom)
	rTolConv.d=0.00000000001
	s0.d=0:s1.d=2*ATan(EL)-#PI/2
	While (Abs(s0-s1)) > TolConverg
		s0=s1
		d.d=Log(((1+PremExcEllips*Sin(s0))/(1-PremExcEllips*Sin(s0))))
		d=Exp(d*(PremExcEllips/2))
		s1=2*ATan(d*el)-#PI/2
	Wend
	s1=s1*Rad2Deg
	ProcedureReturn(s1)
EndProcedure
Procedure.d T2N(Coord$)
	;Conversion coordonnée Texte ([[D]D]D.[M]M.[S]S[.sss]) en Décimal(999.999999)
	;4 groupes au plus, séparés par un point
	Res.d=0:Deg.d=0:Min.d=0:Sec.d=0:Mil.d=0
	Deg=Val(StringField(Coord$,1,"."))
	Min=ValD(StringField(Coord$,2,"."))/60
	Sec=ValD(StringField(Coord$,3,"."))/3600
	Mil=ValD(Left(StringField(Coord$,4,".")+"000",3))/3600000
	Res=Deg+Min+Sec+Mil
	ProcedureReturn(Res)
EndProcedure
Procedure$ T2D(Coord$)
	;Conversion coordonnée Texte ([[D]D]D.[M]M.[S]S[.sss]) en DMS (DDD° MM' SS.sss")
	Res$=Coord$
	Res$=ReplaceString(Res$,".","&deg; ",#PB_String_NoCase,1,1)
	Res$=ReplaceString(Res$,".","' ",#PB_String_NoCase,1,1)
	Res$=Res$+"""
	ProcedureReturn(Res$)
EndProcedure
Procedure$ N2T(Coord.d)
	;Conversion coordonnée Décimales(999.999999) en Texte ([[D]D]D.[M]M.[S]S[.sss])
	;4 groupes au plus, séparés par un point
	ValIn.d=Coord
	Res$="":Deg=0:Min=0:Sec=0:Mil=0
	Deg=Int(ValIn):ValIn=(Valin-Deg)*60
	Min=Int(ValIn):ValIn=(Valin-min)*60
	Sec=Int(ValIn):ValIn=(Valin-Sec)*1000
	Mil=Round(ValIn,#PB_Round_Nearest)
	Res$=StrD(Deg)+"."+Right("00"+StrD(Min),2)+"."+Right("00"+StrD(Sec),2)+"."+Right("000"+StrD(Mil),3)
	ProcedureReturn(Res$)
EndProcedure
Procedure WGS_NTF(GLat.d,GLon.d)
	;Calcul des coordonnées NTF à partir des coordonnées géographiques WGS84 en Degrés décimaux
	;GLat, GLon en Degrés décimaux
	;h=hauteur sur l'ellipsoïde-mise à zéro
	Phi.d=GLat*Deg2Rad:Lambda.d=GLon*Deg2Rad:h.d=0
	AA.d=aWGS:e2.d=eWGS*eWGS
	v.d=AA/Sqr(1-e2*Sin(Phi)*Sin(Phi))
	;Coordonnée Géocentriques WGS84:X, Y, Z
	X.d=(v+h)*Cos(Phi)*Cos(Lambda)
	Y.d=(v+h)*Cos(Phi)*Sin(Lambda)
	Z.d=((1-e2)*v+h)*Sin(Phi)
	;Changement de référentiel WGS84 vers NTF
	f.d=(aNTF-bNTF)/aNTF
	X=X+168:Y=Y+60:Z=Z-320
	AA=aNTF:b=bNTF:e2=eNTF*eNTF
	p.d=Sqr(X*X+Y*Y):r.d=p+Z*Z
	u.d=ATan((Z/p)*((1-f)+(e2*AA/r)))
	Phi=ATan((Z*(1-f)+e2*AA*Sin(u)*Sin(u)*Sin(u))/((1-f)*(p-e2*AA*Cos(u)*Cos(u)*Cos(u))))
	Phi=Phi*Rad2Deg
	Lambda=ATan(Y/X)
	Lambda=Lambda-Deg2Rad*MeridParis
	If X < 0:Lambda=Lambda+#PI:EndIf
	Lambda=Lambda*Rad2Deg
	LatNtf=Phi:LonNtf=Lambda
EndProcedure
Procedure NTF_WGS (GLat.d,GLon.d)
	;Calcul des coordonées WGS84 à partir des coordonnées géographiques NTF en Degrés décimaux
	;GLat, GLon en Degrés décimaux
	;h=hauteur sur l'ellipsoïde-mise à zéro
	Phi.d=GLat*Deg2Rad:Lambda.d=(GLon+MeridParis)*Deg2Rad:h.d=0
	AA.d=aNTF:e2.d=eNTF*eNTF:f.d=(AA-bNTF)/AA
	v.d=AA/Sqr(1-e2*Sin(Phi)*Sin(Phi))
	;Coordonnée Géocentriques NTF:X, Y, Z
	X.d=(v+h)*Cos(Phi)*Cos(Lambda)
	Y.d=(v+h)*Cos(Phi)*Sin(Lambda)
	Z.d=((1-e2)*v+h)*Sin(Phi)
	;Changement de référentiel NGF vers WGS84
	X=X-168:Y.d=Y-60:Z.d=Z+320:AA=aWGS:b=bWGS:e2=eWGS*eWGS:f=(AA-b)/AA
	p.d=Sqr(X*X+Y*Y):r.d=p+Z*Z
	u.d=ATan((Z/p)*((1-f)+(e2*AA/r)))
	Phi=ATan((Z*(1-f)+e2*AA*Sin(u)*Sin(u)*Sin(u))/((1-f)*(p-e2*AA*Cos(u)*Cos(u)*Cos(u))))
	Phi=Phi*Rad2Deg:LatWgs=Phi
	Lambda.d=ATan(Y/X)
	If X < 0:Lambda=Lambda+#PI:EndIf
	Lambda=Lambda*Rad2Deg:LonWgs=Lambda
EndProcedure
Procedure NTF_Lamb(GLat.d,GLon.d, TypLamb$)
	LIsom.d=LatIsom(GLat,eNTF)
	n.d=0:c.d=0:Xs.d=0:Ys.d=0
	Select TypLamb$
		Case "L1"
			n=0.7604059656:c=11603796.98:Xs=600000:Ys=5657616.674
		Case "L2"
			n=0.7289686274:c=11745793.39:Xs=600000:Ys=6199695.768
		Case "L3"
			n=0.6959127966:c=11947992.52:Xs=600000:Ys=6791905.085
		Case "L4"
			n=0.6712679322:c=12136281.99:Xs=234.358:Ys=7239161.542
		Case "L2E"
			n=0.7289686274:c=11745793.39:Xs=600000:Ys=8199695.768
	EndSelect
	X.d=Xs+c*Exp(-n*LIsom)*Sin(n*GLon*Deg2Rad)
	X=Round(X,#PB_Round_Nearest):XProj=X
	Y.d=Ys-c*Exp(-n*LIsom)*Cos(n*GLon*Deg2Rad)
	Y=Round(Y,#PB_Round_Nearest):YProj=Y
EndProcedure
Procedure Lamb_NTF(XLambert.d,YLambert.d,TypLamb$)
	n.d=0:c.d=0:Xs.d=0:Ys.d=0
	Select TypLamb$
		Case "L1"
			n=0.7604059656:c=11603796.98:Xs=600000:Ys=5657616.674
		Case "L2"
			n=0.7289686274:c=11745793.39:Xs=600000:Ys=6199695.768
		Case "L3"
			n=0.6959127966:c=11947992.52:Xs=600000:Ys=6791905.085
		Case "L4"
			n=0.6712679322:c=12136281.99:Xs=234.358:Ys=7239161.542
		Case "L2E"
			n=0.7289686274:c=11745793.39:Xs=600000:Ys=8199695.768
	EndSelect
	R.d=Sqr((XLambert-Xs)*(XLambert-Xs)+(YLambert-Ys)*(YLambert-Ys))
	g.d=ATan((XLambert-Xs)/(Ys-YLambert))
	LX.d= g/n
	LX=LX*Rad2Deg:LonNtf=LX
	L.d=-1/n*Log(Abs(R/c))
	LY.d=IsomLat(L, eNTF):LatNtf=LY
EndProcedure
Procedure WGS_L93(GLat.d,GLon.d)
	ra.d=aRGF:;demi grand axe de l'ellipsoïde (m)
	re.d=eRGF:;première excentricité de l'ellipsoïde
	;paramètres de projection
	rlc.d=3*deg2rad:;Méridien central:Lambda0=3° Est de Greenwich pour Lambert93
	rPhi0.d=46.5*Deg2Rad:;latitude Origine pour Lambert93
	rPhi1.d=44*Deg2Rad:;1er parallèle automécoïque
	rPhi2.d=49*Deg2Rad:;2ème parallèle automécoïque
	;coordonnées à l'origine
	rx0.d=700000:rRy0.d=6600000
	;	coordonnées du point à traduire
	rPhi.d=GLat*Deg2Rad:rl.d=GLon*Deg2Rad
	;	calcul des grandes normales
	rgN1.d=ra/Sqr(1-re*re*Sin(rPhi1)*Sin(rPhi1))
	rgN2.d=ra/Sqr(1-re*re*Sin(rPhi2)*Sin(rPhi2))
	;calcul des latitudes isométriques
	rRgl1.d=Log(Tan(#PI/4+rPhi1/2)*Exp(Log((1-re*Sin(rPhi1))/(1+re*Sin(rPhi1)))*re/2))
	rRgl2.d=Log(Tan(#PI/4+rPhi2/2)*Exp(Log((1-re*Sin(rPhi2))/(1+re*Sin(rPhi2)))*re/2))
	rRgl0.d=Log(Tan(#PI/4+rPhi0/2)*Exp(Log((1-re*Sin(rPhi0))/(1+re*Sin(rPhi0)))*re/2))
	rRgl.d=Log(Tan(#PI/4+rPhi/2)*Exp(Log((1-re*Sin(rPhi))/(1+re*Sin(rPhi)))*re/2))
	;	calcul de l'exposant de la projection
	rn.d=(Log((rgN2*Cos(rPhi2))/(rgN1*Cos(rPhi1))))/(rRgl1-rRgl2)
	;	calcul de la constante de projection
	rcc.d=((rgN1*Cos(rPhi1))/rn)*Exp(rn*rRgl1)
	;	calcul des coordonnées Lambert93
	X93.d=Round(rx0+rcc*Exp(-1*rn*rRgl)*Sin(rn*(rl-rlc)),#PB_Round_Nearest):XProj=X93
	rys.d=rRy0+rcc*Exp(-1*rn*rRgl0)
	Y93.d=Round(rys-rcc*Exp(-1*rn*rRgl)*Cos(rn*(rl-rlc)),#PB_Round_Nearest):YProj=Y93
EndProcedure
Procedure L93_WGS(XL93.d,YL93.d)
	;Méridien central:Lambda0=3° Est de Greenwich pour Lambert93
	n.d=0.725607765:c.d=11754255.426:Xs.d=700000:Ys.d=12655612.05
	R.d=Sqr((XL93-Xs)*(XL93-Xs)+(YL93-Ys)*(YL93-Ys))
	L.d=-1/n*Log(Abs(R/c)):LatWgs=IsomLat(L, eWGS)
	g.d=ATan((XL93-Xs)/(Ys-YL93))
	LX.d=g/n:LX=LX*Rad2Deg+3:LonWgs=LX
EndProcedure
Procedure$ WGS_DFCI(LatWGS.d, LonWGS.d)
	;Calcul des coordonnées Cartographiques DFCI à partir des coordonnées Géographiques WGS84
	;Lambert 2 étendu !
	;1ERE LETTRE
	NTF_Lamb(LatNtf,LonNtf,"L2E")
	XLamb.d=XProj:YLamb.d=YProj-1500000
	a=Int(XLamb/100000):XLamb=XLamb-a*100000:If a>7:a=a+2:EndIf
	x$=Chr(a+65):res$=x$
	;2EME LETTRE
	a=Int((YLamb)/100000):YLamb=YLamb-a*100000:If a>7:a=a+2:EndIf
	x$=Chr(a+65):res$=res$+x$
	;3EME LETTRE (CHIFFRE)
	a=Int(XLamb/20000):XLamb=XLamb-a*20000:res$=res$+Str(a*2)
	;4EME LETTRE (CHIFFRE)
	a=Int(YLamb/20000):YLamb=YLamb-a*20000:res$=res$+Str(a*2)
	;5EME LETTRE
	a=Int(XLamb/2000):XLamb=XLamb-a*2000:If a>7:a=a+2:EndIf
	x$=Chr(a+65):res$=res$+x$ 
	;6EME LETTRE (CHIFFRE)
	a=Int(YLamb/2000):YLamb=YLamb-a*2000:res$=res$+a
	If XLamb>500 And XLamb<1501 And YLamb>500 And YLamb<1501
		res$=res$+".5"
	Else
		If XLamb<1000
			If YLamb<1000:res$=res$+".4":Else:res$=res$+".1"  :EndIf
		Else
			If YLamb<1000:res$=res$+".3":Else:res$=res$+".2":EndIf
		EndIf
	EndIf
	ProcedureReturn(res$)
EndProcedure
Procedure DFCI_WGS(DFCI$)
	YLamb.d=1500000 : XLamb.d=0
	Carr100$=UCase(Left(DFCI$,2)): Carr20$=UCase(Mid(DFCI$,3,2)) : Carr2$=UCase(Mid(DFCI$,5,2)) : Zon5$=UCase(Mid(DFCI$,7,2))
	If Len(Carr100$)=2
		x$=Left(Carr100$,1) : a=FindString("ABCDEFGHKLMN",x$)-1 : XLamb=XLamb+a*100000
		x$=Right(Carr100$,1) : a=FindString("ABCDEFGHKLMN",x$)-1 : YLamb=YLamb+a*100000
		If Len(Carr20$)=2
			x$=Left(Carr20$,1) : a=Val(x$): XLamb=XLamb+a*10000
			x$=Right(Carr20$,1) : a=Val(x$) : YLamb=YLamb+a*10000
			If Len(Carr2$)=2
				x$=Left(Carr2$,1) : a=FindString("ABCDEFGHKLMN",x$)-1 : XLamb=XLamb+a*2000
				x$=Right(Carr2$,1) : a=Val(x$) : YLamb=YLamb+a*2000
				If Len(Zon5$)=2
					x$=Right(Zon5$,1) : a=Val(x$)
					Select a
						Case 1
							XLamb=XLamb+500 : YLamb=YLamb+1500
						Case 2
							XLamb=XLamb+1500 : YLamb=YLamb+1500
						Case 3
							XLamb=XLamb+500 : YLamb=YLamb+500
						Case 4
							XLamb=XLamb+500 : YLamb=YLamb+500
						Default
							XLamb=XLamb+1000 : YLamb=YLamb+1000
					EndSelect
				Else
					XLamb=XLamb+1000 : YLamb=YLamb+1000
				EndIf
			Else
				XLamb=XLamb+5000 : YLamb=YLamb+5000
			EndIf
		Else
			XLamb=XLamb+50000 : YLamb=YLamb+50000
		EndIf
	EndIf
	Lamb_NTF(XLamb,YLamb,"L2E")
	NTF_WGS(LatNtf,LonNtf)
EndProcedure
Procedure WGS_UTM(LatWGS.d, LonWGS.d)
	GabZon$="AACCCDDEEFFGGHHJJKKLLMMNNPPQQRRSSTTUUVVWWXXXZZ"
	PrExc2.d=eWGS*eWGS:PrExc4.d=PrExc2*PrExc2:PrExc6.d=PrExc4*PrExc4
	Lambda.d=LonWGS*Deg2Rad:Phi.d=LatWGS*Deg2Rad
	SinPhi.d=Sin(Phi):S2.d=SinPhi*SinPhi:CosPhi.d=Cos(Phi):C2.d=CosPhi*CosPhi:TanPhi.d=Tan(Phi):T2.d=TanPhi*TanPhi
	Lambda0.d=Int((LonWGS+180)/6)+1:NumFus+Lambda0:;Fuseau UTM
	LettreZon$=Mid(GabZon$,Int((LatWGS+92)/4)+1,1):;Zone UTM
	Lambda0=(6*Lambda0-183)*Deg2Rad:;Méridien de Référence de la Projection
	A.d=(Lambda-Lambda0)*CosPhi
	A2.d=A*A:A3.d=A*A2:A4.d=A*A3:A5.d=A*A4:A6.d=A*A5
	k0.d=0.9996
	k1.d=1-PrExc2/4-3*PrExc4/64-5*PrExc6/256
	k2.d=3*PrExc2/8+3*PrExc4/32+45*PrExc6/1024
	k3.d=15*PrExc4/256+45*PrExc6/1024
	k4.d=35*PrExc6/3072
	C.d=PrExc2/(1-PrExc2)*C2
	sPhi.d=k1*Phi-k2*Sin(2*Phi)+k3*Sin(4*Phi)-k4*Sin(6*Phi)
	vPhi.d=1/Sqr(1-PrExc2*S2)
	tPhi.d=TanPhi*(A2/2+(5-T2+9*C+4*C*C)*A4/24+(61-58*T2+T2*T2)*A6/720)
	Nz.d=0:If LatWGS<0:Nz=10000000:EndIf
	N.d=Nz+k0*aWGS*(sPhi+vPhi*tPhi)
	N=Round(N,#PB_Round_Nearest):YProj=N
	E.d=500000+k0*aWGS*vPhi*(A+(1-T2+C)*A3/6+(5-18*T2+T2*T2)*A5/120)
	E=Round(E,#PB_Round_Nearest):XProj=E
EndProcedure
Procedure UTM_WGS(UtmX.d, UtmY.d, UtmFuseau, UtmZone$)
	;Calcul des coordonnées géographiques WGS84 en degrés décimaux à partir des coordonnées UTM
	;d'après Algorithme de Steve Dutch-University of GreenBay, Wisconsin
	;Longitudes Positives vers l'Est, Négatives vers l'Ouest
	;Latitudes Positives vers le Nord, Négatives vers le Sud
	GabZon$="AACCCDDEEFFGGHHJJKKLLMMNNPPQQRRSSTTUUVVWWXXXZZ"
	e2.d=eWGS*eWGS:e4.d=e2*e2:e6.d=e4*e2
	Hemisphere$="S":If UCase(UtmZone$)>"M":Hemisphere$="N":EndIf
	East.d=UtmX:LatD.d=UtmY:If Hemisphere$="S":LatD=10000000-UtmY:EndIf
	MCFuseau=6*UtmFuseau-183:;Méridien Central du Fuseau
	e1sq.d=e2/(1-e2): k0.d=0.9996
	arc.d=LatD/k0
	mu.d=arc/(aWGS*(1-e2/4-3*e4/64-5*e6/256))
	e1.d=(1-Sqr(1-e2))/(1+Sqr(1-e2))
	ca.d=3*e1/2-27*Pow(e1,3)/32
	cb.d=21*e1*e1/16-55*Pow(e1,4)/32
	cc.d=151*Pow(e1,3)/96
	cd.d=1097*Pow(e1,4)/512
	phi1.d=mu+ca*Sin(2*mu)+cb*Sin(4*mu)+cc*Sin(6*mu)+cd*Sin(8*mu)
	q0.d=e1sq*Cos(phi1)*Cos(phi1):t0.d=Tan(phi1)*Tan(phi1)
	n0.d=aWGS/Sqr(1-Pow(eWGS*Sin(phi1),2))
	r0.d=aWGS*(1-eWGS*eWGS)/Pow(1-Pow(eWGS*Sin(phi1),2),3/2)
	dd0.d=(500000-East)/(n0*k0)
	fact1.d=dd0
	fact2.d=(1+2*t0+q0)*Pow(dd0,3)/6
	fact3.d=(5-2*q0+28*t0-3*q0*q0+8*e1sq+24*t0*t0)*Pow(dd0,5)/120
	LonWgs=((MCFuseau*Deg2Rad)-(fact1-fact2+fact3)/Cos(phi1))*Rad2Deg
	fact1.d=n0*Tan(phi1)/r0:fact2=dd0*dd0/2
	fact3=(5+3*t0+10*q0-4*q0*q0-9*e1sq)*Pow(dd0,4)/24
	fact4=(61+90*t0+298*q0+45*t0*t0-252*e1sq-3*q0*q0)*Pow(dd0,6)/720
	If Hemisphere$="N"
		LatWgs=(phi1-fact1*(fact2+fact3+fact4))*Rad2Deg
	Else
		LatWgs=(-(phi1-fact1*(fact2+fact3+fact4)))*Rad2Deg
	EndIf
EndProcedure
Procedure QuelleCible(CodCible$)
	OutSys$=""
	For i=1 To 14
		If CodCible$=GeoSys$(i):OutSys$=CodCible$:EndIf
	Next i
EndProcedure
Procedure QuelleSource(NPrm)
	NomPoint$=LCmd$(NPrm-1):;Nom du Point
	P2$=LCmd$(NPrm):;Système-Source
	InSys$="":;Quel est le Système-Source ?
	For i=0 To 12
		If P2$=GeoSys$(i):InSys$=P2$:EndIf
	Next i
	If InSys$=""
		Result$="Système-Source Inconnu : "+P2$
		Result$=Result$+RC$+"Tapez GeKo pour l'aide"
	Else
		;Coordonnée(s)-Source
		NPrm=2:NomWeb$=""
		Select InSys$
			Case "WGS"
				NomWeb$="<br>Source : "+InSys$
				Coord$=LCmd$(NPrm+1):LatWgs=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>Lat : "+Coord$
				Coord$=LCmd$(NPrm+2):LonWgs=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>lon : "+Coord$
				WGS_NTF(LatWgs,LonWgs)
			Case "WGSD"
				NomWeb$="<br>Source : "+InSys$
				Coord$=LCmd$(NPrm+1):LatWgs=T2N(Coord$)
				NomWeb$=NomWeb$+"<br>Lat : "+T2D(Coord$)
				Coord$=LCmd$(NPrm+2):LonWgs=T2N(Coord$)
				NomWeb$=NomWeb$+"<br>lon : "+T2D(Coord$)
				WGS_NTF(LatWgs,LonWgs)
			Case "NTF"
				NomWeb$="<br>Source : "+InSys$
				Coord$=LCmd$(NPrm+1):LatNtf=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>Lat : "+Coord$
				Coord$=LCmd$(NPrm+2):LonNtf=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>lon : "+Coord$
				NTF_WGS(LatNtf,LonNtf)
			Case "NTFD"
				NomWeb$="<br>Source : "+InSys$
				Coord$=LCmd$(NPrm+1):LatNtf=T2N(Coord$)
				NomWeb$=NomWeb$+"<br>Lat : "+T2D(Coord$)
				Coord$=LCmd$(NPrm+2):LonNtf=T2N(Coord$)
				NomWeb$=NomWeb$+"<br>lon : "+T2D(Coord$)
				NTF_WGS(LatNtf,LonNtf)
			Case "L1","L2","L3","L4","L2E"
				NomWeb$="<br>Source : "+InSys$
				Coord$=LCmd$(NPrm+1):XProj=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>X - Easting : "+Coord$
				Coord$=LCmd$(NPrm+2):YProj=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>Y - Northing : "+Coord$
				Lamb_NTF(XProj,YProj,InSys$)
				NTF_WGS(LatNtf,LonNtf)
			Case "L93"
				NomWeb$="<br>Source : "+InSys$
				Coord$=LCmd$(NPrm+1):XProj=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>X - Easting : "+Coord$
				Coord$=LCmd$(NPrm+2):YProj=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>Y - Northing : "+Coord$
				L93_WGS(XProj,YProj):WGS_NTF(LatWgs,LonWgs)
			Case "DFCI"
				NomWeb$="<br>Source : "+InSys$
				Coord$=LCmd$(NPrm+1):DFCI_WGS(Coord$)
				NomWeb$=NomWeb$+"<br>Carreau : "+Coord$
			Case "UTM"
				NomWeb$="<br>Source : "+InSys$
				Coord$=LCmd$(NPrm+1):XProj=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>X - Easting : "+Coord$
				Coord$=LCmd$(NPrm+2):YProj=ValD(Coord$)
				NomWeb$=NomWeb$+"<br>Y - Northing : "+Coord$
				Coord$=LCmd$(NPrm+3):NumFus=Val(Coord$)
				NomWeb$=NomWeb$+"<br>Fuseau : "+Coord$
				Coord$=LCmd$(NPrm+4):LettreZon$=Coord$
				NomWeb$=NomWeb$+" - Zone : "+Coord$
				UTM_WGS(XProj,YProj,NumFus,LettreZon$):WGS_NTF(LatWgs,LonWgs)
		EndSelect
	EndIf
EndProcedure
Procedure$ GetRGC(Lat.d,Lon.d)
	InitNetwork()
	x$="":NomFich$="GeKoAdr.txt"
	ReqAdr$="https://maps.googleapis.com/maps/api/geocode/xml?latlng="+StrD(Lat)+","+StrD(Lon)
	If ReceiveHTTPFile(ReqAdr$, NomFich$)
		If ReadFile(2,NomFich$)
			While Eof(2)=0
				x$=ReadString(2):i=FindString(x$,"<formatted_address>",#PB_String_NoCase)
				If i>0
					x$=Mid(x$,3)
					x$=RemoveString(x$,"<formatted_address>",#PB_String_NoCase)
					x$=RemoveString(x$,"</formatted_address>",#PB_String_NoCase)
					Break
				EndIf
			Wend
			CloseFile(2)
			DeleteFile(NomFich$)
		EndIf
	EndIf
	ProcedureReturn(x$)
EndProcedure
Procedure GetResConv()
	If OutSys$="WGS" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";WGS;"+StrD(LatWgs,6)+";"+StrD(LonWgs,6)
	EndIf
	If OutSys$="WGSD" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";WGSD;"+N2T(LatWgs)+";"+N2T(LonWgs)
	EndIf
	If OutSys$="NTF" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";NTF;"+StrD(LatNtf,6)+";"+StrD(LonNtf,6)
	EndIf
	If OutSys$="NTFD" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";NTFD;"+N2T(LatNtf)+";"+N2T(LonNtf)
	EndIf
	If OutSys$="L2E" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		NTF_Lamb(LatNtf,LonNtf,"L2E")
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";L2E;"+XProj+";"+YProj;
	EndIf
	If OutSys$="L1" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		NTF_Lamb(LatNtf,LonNtf,"L1")
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";L1;"+XProj+";"+YProj
	EndIf
	If OutSys$="L2" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		NTF_Lamb(LatNtf,LonNtf,"L2")
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";L2;"+XProj+";"+YProj
	EndIf
	If OutSys$="L3" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		NTF_Lamb(LatNtf,LonNtf,"L3")
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";L3;"+XProj+";"+YProj
	EndIf
	If OutSys$="L4" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		NTF_Lamb(LatNtf,LonNtf,"L4")
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";L4;"+XProj+";"+YProj
	EndIf
	If OutSys$="L93" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		WGS_L93(LatWgs,LonWgs)
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";L93;"+XProj+";"+YProj
	EndIf
	If OutSys$="DFCI" Or OutSys$="*"
		If Result$<>"":Result$=Result$+RC$:EndIf
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";DFCI;"+WGS_DFCI(LatWgs,LonWgs)
	EndIf
	If OutSys$="UTM" Or OutSys$="*"
		WGS_UTM(LatWgs,LonWgs)
		If Result$<>"":Result$=Result$+RC$:EndIf
		Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";UTM;"+NumFus+";"+LettreZon$+";"+XProj+";"+YProj
	EndIf
	If OutSys$="RGC"
		If Result$<>"":Result$=Result$+RC$:EndIf
		Print(NomPoint$)
		x$=GetRGC(LatWgs,LonWgs)
		If x$<>""
			PrintN(TAB$+"OK")
			Result$=Result$+"GeKo"+";"+Chr(34)+NomPoint$+Chr(34)+";"+Chr(34)+x$+Chr(34)
		Else
			PrintN(TAB$+"KO")
			Result$=Result$+"<RGC>"+TAB$+"<<< geocodage inverse impossible avec GM >>>"
		EndIf
		; Attente 1 seconde et demie avant une nouvelle requête (voir Aide - serveur GoogleMaps)
		Delay(1500)
	EndIf
	If OutSys$="WEB"
		If ResWeb$<>"":ResWeb$=ResWeb$+RC$:EndIf
		ResWeb$=ResWeb$+TAB$+TAB$+TAB$+TAB$+"<tr>"
		ResWeb$=ResWeb$+RC$+TAB$+TAB$+TAB$+TAB$+TAB$+"<td bgcolor="+Chr(34)+"#FFFFB0"+Chr(34)+"><b>"+NomPoint$+"</b>"+NomWeb$+"</td><td>"+StrD(LatWgs)+"</td><td>"+StrD(LonWgs)+"</td>"
		ResWeb$=ResWeb$+RC$+TAB$+TAB$+TAB$+TAB$+TAB$+"<td><a target="+Chr(34)+"blank"+Chr(34)+" href="+Chr(34)+"http://www.openstreetmap.org/?lat="+StrD(LatWgs)+"&lon="+StrD(LonWgs)+"&zoom=17"+Chr(34)+">Carte OSM<SUP>&reg;</SUP></a></td>"
		ResWeb$=ResWeb$+RC$+TAB$+TAB$+TAB$+TAB$+TAB$+"<td><a target="+Chr(34)+"blank"+Chr(34)+" href="+Chr(34)+"http://www.geoportail.gouv.fr/embed/visu.html?c="+StrD(LonWgs)+","+StrD(LatWgs)+"&z=0.00002&l=GEOGRAPHICALGRIDSYSTEMS.MAPS.3D::GEOPORTAIL:OGC:WMTS==aggregate%281%29"+Chr(34)+">Carte IGN<SUP>&reg;</SUP></a></td>"
		ResWeb$=ResWeb$+RC$+TAB$+TAB$+TAB$+TAB$+TAB$+"<td><a target="+Chr(34)+"blank"+Chr(34)+" href="+Chr(34)+"http://maps.google.fr/maps?q="+StrD(LatWgs)+","+StrD(LonWgs)+Chr(34)+">Carte GM<SUP>&reg;</SUP></a></td>"
		ResWeb$=ResWeb$+RC$+TAB$+TAB$+TAB$+TAB$+"</tr>"
	EndIf
EndProcedure

OpenConsole()
InitGeko()
NomPoint$="":OptHlp=0:P1$="":P2$=""
If NbParam=0
		;Pas de paramètre - appel à l'aide
	OptHlp=1
Else
	P1$=LCmd$(0)
	If P1$="/H" Or P1$="-H" Or P1$="/?" Or P1$="-?"
		;1er paramètre - appel à l'aide
		OptHlp=1
	Else
		;1er paramètre - CSV ?
		If P1$="CSV"
			;Mode Conversion par lot (d'un fichier CSV)
			P2$=LCmd$(1)
			;2ème paramètre - Nom et chemin du Fichier-Source
			If FileSize(P2$)>0
				;Le fichier existe, on le traite ...
				l$=""
				If ReadFile(0,P2$)
					While Eof(0)=0
						l$=ReadString(0)
						If l$<>""
						For i=0 To 7
							LCmd$(i)=RemoveString(StringField(l$,i+1,";"),Chr(34))
							If i<>1:LCmd$(i)=ReplaceString(LCmd$(i),",","."):LCmd$(i)=UCase(LCmd$(i)):EndIf
						Next i
						P1$=LCmd$(0)
						QuelleCible(P1$)
						QuelleSource(2)
						GetResConv()
						EndIf
					Wend
					CloseFile(0)
				EndIf
			Else
				;Le fichier n'existe pas ou est vide, on conseille de lire la doc !
				PrintN("Fichier CSV vide ou inexistant : "+P2$)
				OptHlp=1
			EndIf
		Else
			;Mode Immédiat Console
			;1er paramètre - Système-Cible - Quel est le Système-Cible ?
			If P1$="*":OutSys$="*":Else:QuelleCible(P1$):EndIf
			If OutSys$=""
				Result$="Système-Cible Inconnu : "+P1$
				Result$=Result$+RC$+"Tapez GeKo pour l'aide"
			Else
				QuelleSource(2)
				GetResConv()
			EndIf
		EndIf
	EndIf
EndIf

If OptHlp=1
	Aide()
Else
	If OutSys$="WEB"
		CurDir$=GetCurrentDirectory():FilRes$=CurDir$+"GeKoRes.htm"
		CreateFile(1,FilRes$)
		WriteString(1,WEB1$+RC$+ResWeb$+RC$+WEB2$)
		CloseFile(1)
		If Result$<>"":Result$=Result$+RC$:EndIf
		Result$=Result$+RC$+"Ouvrez le fichier "+FilRes$+" avec votre navigateur WEB"+RC$
		Select Sys$
			Case "W" : RunProgram(FilRes$)
			Case "X" : RunProgram("xdg-open",FilRes$,""):PrintN(Result$):PrintN("Appuyez sur [Entree] pour quitter"):Input()
			Default :PrintN(Result$)
		EndSelect
	Else
		PrintN(Result$)
		PrintN("Appuyez sur [Entree] pour quitter"):Input()
	EndIf
EndIf
CloseConsole()
Dernière modification par PK1157 le mer. 10/juin/2015 17:55, modifié 1 fois.
Windows 10 64 bits
Linux XUbuntu
Avatar de l’utilisateur
PK1157
Messages : 10
Inscription : jeu. 14/mai/2015 23:37
Localisation : FRANCE 66 PYRENEES ORIENTALES

Suite : Conversion de Coordonnées Géo-Cartographiques

Message par PK1157 »

Voici le fichier d'Aide qui sert de notice d'utilisation : GeKo_Aide.htm
Edition : Correction de la syntaxe de l'option WEB en ligne de commande qui omet de préciser le paramètre "Nom du Point" ... Voilà ce qui arrive quand on code plus vite qu'on ne publie : c'est l'aide qui trinque ! - mille regrets.

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//FR" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
	<head>
		<title>GeKo_Aide</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
		<meta name="author" content="PK1157">
		<meta name="copyright" content="©PK1157">
		<style type="text/css">
			table {margin: 0 auto; font-size: normal; text-align:center;border:1px solid black;}
			caption {color:#801020; font-weight:bold;}
			h1 {text-align:center;border:1px solid black;}
			h2 {text-align:center;}
			h3 {text-align:center;}
			h4 {text-decoration:underline; color:teal;}
			h5 {background: #C0C0F0; margin-left:40px; font-size: small; font-style : italic; color:teal;}
			div {background: #FFE0E0; margin-left:80px;}
		</style>
	</head>
	<body>
		<h1>GeKo</h1>
		<h2>Conversion G&eacute;o/Cartographique<br>(<i>Geodesic Konversion ?</i>)<br>Utilitaire en ligne de commande</h2>
		<h4>AVERTISSEMENT</h4>
		<b>GeKo</b> est un utilitaire de conversion r&eacute;serv&eacute; &agrave; l'usage personnel de ses utilisateurs ; il ne saurait <b>EN&nbsp;AUCUN&nbsp;CAS</b> remplacer les outils logiciels agr&eacute;&eacute;s pour les professionnels (Fonctionnaires&nbsp;du&nbsp;Cadastre, g&eacute;om&egrave;tres, agriculteurs ou propri&eacute;taires&nbsp;terriens, gestionnaires&nbsp;publics qui auraient, par hasard, entendu parler de la Directive <a target=blank href="http://cnig.gouv.fr/?page_id=1177">INSPIRE</a> ...).
		<br><br>L'auteur d&eacute;cline toute responsabilit&eacute; pour l'usage de ce logiciel &agrave; des fins commerciales, professionnelles ou d'expertise judiciaire.
		<h4>CREDITS, REMERCIEMENTS et LIENS (tr&egrave;s) UTILES</h4>
		Pour la plupart des algorithmes impl&eacute;ment&eacute;s, un grand <b>MERCI</b> &agrave; l'I.G.N.(Institut Geographique National-France), Etablissement Public qui honore cet adjectif depuis de longues ann&eacute;es en rendant accessible au plus grand nombre un savoir et une exp&eacute;rience de si grande qualit&eacute; que seuls quelques-un(e)s ont eu la patience (passion ?), la rigueur et la t&eacute;nacit&eacute; de les &eacute;laborer ...
		<br><br>L'accueil du site de l'I.G.N.: <a target=blank href="http://www.ign.fr">I.G.N.</a>
		<br><br>Les ressources techniques (algorithmes avec jeux d'essai) : <a target=blank href="http://geodesie.ign.fr/index.php?page=algorithmes">RessourcesIGN</a>
		<br><br>Un site de base pour ceux(celles) qui veulent s'initier à la g&eacute;odesie : <a target=blank href="http://sgcaf.free.fr/pages/techniques/ign_coordonnees.htm">SGAF</a>
		<br><br>Pour la partie traitant des coordonnees UTM, une visite du site du Prof. Steve DUTCH (Universite du Wisconsin) s'impose : <a target=blank href="http://www.uwgb.edu/dutchs/index.html">Prof.S.DUTCH</a>
		<h3>Merci aussi &agrave; tous les anonymes qui ont publi&eacute; sur internet un petit bout d'algorithme, souvent bogu&eacute;, mais qui, une fois retravaill&eacute;, m'a permis de r&eacute;soudre -et&nbsp;surtout&nbsp;de&nbsp;comprendre- la nature du probl&egrave;me ...</h3>
		<h4>Conventions</h4>
		Les Latitudes (&agrave &eacute;crire toujours avec une Majuscule !) sont compt&eacute;es positives au Nord, n&eacute;gatives au Sud (de l'Equateur)
		<br>Les longitudes (&agrave &eacute;crire toujours avec une minuscule !) positives a l'Est, n&eacute;gatives &agrave; l'Ouest (du M&eacute;ridien d'Origine du syst&egrave;me)
		<br><br>Les Latitudes sont comprises entre -90&deg; et +90&deg;<br>Les longitudes sont comprises entre -180&deg; et +180&deg;
		<br><br>Les param&egrave;tres de <b>GeKo</b> sont insensibles &agrave; la casse ( ils peuvent &ecirc;tre transmis en MAJUSCULES ou minuscules)
		<h4>Pr&eacute;cision</h4>
		Sur Terre, un millioni&egrave;me de degr&eacute; (6<sup>&egrave;me</sup> d&eacute;cimale) de Latitude vaut environ 10 cm et un milli&egrave;me de seconde d'arc (3<sup>&egrave;me</sup> d&eacute;cimale) de Latitude vaut environ 3 cm ;<br>compte tenu des incertitudes de mesure, des aleas de transmission GPS, du registre NON-PROFESSIONNEL dans lequel se situe <b>GeKo</b>, les formats utilis&eacute;s par <b>GeKo</b> seront limit&eacute;s &agrave; :
		<br>- la 6<sup>&egrave;me</sup> d&eacute;cimale (de degr&eacute;) pour les formats num&eacute;riques&nbsp;;
		<br>- la 3<sup>&egrave;me</sup> d&eacute;cimale (de seconde d'arc) pour les formats textuels (DMSsss : Degr&eacute;s, Minutes, Secondes, fraction).
		<br><br>L'erreur de calcul test&eacute;e lors des conversions par <b>GeKo</b> reste inf&eacute;rieure au m&egrave;tre sur le terrain.
		<h4>Installation</h4>
		<h5>Linux (Ubuntu)&trade;&reg;</h5>
		<div>
			Enregistrer <b>sous un m&ecirc;me r&eacute;pertoire</b> les fichiers suivants qui constituent le logiciel dans son int&eacute;gralit&eacute; :
			<br>-&nbsp;&nbsp;<b>GeKo</b>&nbsp;&nbsp;&nbsp;&nbsp;(l'ex&eacute;cutable - penser &agrave; v&eacute;rifier les propri&eacute;t&eacute;s du fichier pour autoriser son ex&eacute;cution!)
			<br>-&nbsp;&nbsp;<b>GeKo_Aide.htm</b>&nbsp;&nbsp;&nbsp;&nbsp;(le pr&eacute;sent fichier d'aide)
			<br>Pour un fonctionnement correct du programme, <b>aucun de ces fichiers ne doit &ecirc;tre supprim&eacute;.</b>
			<br><a target=blank href="http://www.commentcamarche.net/faq/3585-bash-la-variable-d-environnement-path#v-ajouter-un-repertoire-a-la-variable-path">Modifier la liste des chemins par d&eacute;faut (PATH)</a> en y rajoutant le r&eacute;pertoire dans lequel <b>GeKo</b> a &eacute;t&eacute; enregistr&eacute;.
			<br>Le fichier <b>GeKoTest.csv</b> permet, comme son nom l'indique, de tester les capacit&eacute;s de GeKo sur les diff&eacute;rents syst&egrave;mes g&eacute;od&eacute;siques :
			<br><u>Utilisation :</u> GeKo CSV GeKoTest.csv (sous r&eacute;serve que le programme soit lanc&eacute; depuis le r&eacute;pertoire d'installation, sinon, adapter le chemin !).
			<br>Le fichier-source PureBasic<sup>&reg;</sup> <b>GeKo.pb</b> peut être modifi&eacute; librement 
			(sous la responsabilit&eacute; de l'utilisateur) pour s'adapter notamment &agrave; des &eacute;volutions 
			des <a href="#SWEB">services web</a> interrog&eacute;s ou pour y int&eacute;grer 
			de nouveaux syst&egrave;mes g&eacute;od&eacute;siques (dans ce cas, merci de m'en informer ...).
		</div>
		<h5>Windows&trade;&reg;</h5>
		<div>
			Enregistrer <b>sous un m&ecirc;me r&eacute;pertoire</b> les fichiers suivants qui constituent le logiciel dans son int&eacute;gralit&eacute; :
			<br>-&nbsp;&nbsp;<b>GeKo.exe</b>&nbsp;&nbsp;&nbsp;&nbsp;(le programme)
			<br>-&nbsp;&nbsp;<b>GeKo_Aide.htm</b>&nbsp;&nbsp;&nbsp;&nbsp;(le pr&eacute;sent fichier d'aide)
			<br>Pour un fonctionnement correct du programme, <b>aucun de ces fichiers ne doit &ecirc;tre supprim&eacute;.</b>
			<br><a target=blank href="http://sametmax.com/ajouter-un-chemin-a-la-variable-denvironnement-path-sous-windows/">Modifier la liste des chemins par d&eacute;faut (PATH)</a> en y rajoutant le r&eacute;pertoire dans lequel <b>GeKo</b> a &eacute;t&eacute; enregistr&eacute;.
			<br>Le fichier <b>GeKoTest.csv</b> permet, comme son nom l'indique, de tester les capacit&eacute;s de GeKo sur les diff&eacute;rents syst&egrave;mes g&eacute;od&eacute;siques :
			<br><u>Utilisation :</u> GeKo CSV GeKoTest.csv (sous r&eacute;serve que le programme soit lanc&eacute; depuis le r&eacute;pertoire d'installation, sinon, adapter le chemin !).
			<br>Le fichier-source PureBasic<sup>&reg;</sup> <b>GeKo.pb</b> peut être modifi&eacute; librement 
			(sous la responsabilit&eacute; de l'utilisateur) pour s'adapter notamment &agrave; des &eacute;volutions 
			des <a href="#SWEB">services web</a> interrog&eacute;s ou pour y int&eacute;grer 
			de nouveaux syst&egrave;mes g&eacute;od&eacute;siques (dans ce cas, merci de m'en informer ...).
		</div>
		<h4>Syntaxe d'utilisation</h4>
		<strong><strong>Sous Linux</strong></strong>, <u>ne pas oublier le <b>point-slash</b></u> : <strong><strong>./</strong>GeKo ... ...</strong>
		<br><b>GeKo</b>
		<div>Sans param&egrave;tre, le programme invite &agrave; consulter le pr&eacute;sent fichier d'aide</div>
		<br><b>GeKo</b><espace><<b>Code du Syst&egrave;me-Cible</b>><espace><<b>Code du Syst&egrave;me-Source</b>><espace><<b>1 &agrave; 4 Param&egrave;tre(s)</b>>
		<div>
			Utilisation standard comme convertisseur entre des systèmes de coordonnées géographiques, cartographiques (projections) ou de quadrillages d&eacute;riv&eacute;s.
			<br><br>
			<table width="90%" cols="5" border="1">
				<caption><b>Systèmes utilisables <i>(comme source ou comme cible)</i></b></caption>
				<tr><th>Code</th><th>Type</th><th>D&eacute;finition</th><th>Nb Param.<br>(Coord.)</th><th>D&eacute;tail</th></tr>
				<tr>
					<td><b>WGS</b></td>
					<td>G&eacute;o<br>D&eacute;cimal</td>
					<td>WGS84 (standard GPS)<br>Ellipsoide WGS84<br>Méridien Origine : Greenwich</td>
					<td>2</td>
					<td>Latitude<b><i> suivie de</i></b> longitude, s&eacute;par&eacute;es par <espace><br>Format : <a href="#Dec">D&eacute;cimal</a></td>
				</tr>
				<tr>
					<td><b>WGSD</b></td>
					<td>G&eacute;o<br>Textuel<br>DMSsss</td>
					<td>WGS84 (standard GPS)<br>Ellipsoide WGS84<br>Méridien Origine : Greenwich</td>
					<td>2</td>
					<td>Latitude<b><i> suivie de</i></b> longitude, s&eacute;par&eacute;es par <espace><br>Format : <a href="#Txt">Textuel - DMSsss</a></td>
				</tr>
				<tr>
					<td><b>NTF</b></td>
					<td>G&eacute;o<br>D&eacute;cimal</td>
					<td>IGN<br>Ellipsoide Clarke 1880<br>Méridien Origine : Paris</td>
					<td>2</td>
					<td>Latitude<b><i> suivie de</i></b> longitude, s&eacute;par&eacute;es par <espace><br>Format : <a href="#Dec">D&eacute;cimal</a></td>
				</tr>
				<tr>
					<td><b>NTFD</b></td>
					<td>G&eacute;o<br>Textuel<br>DMSsss</td>
					<td>IGN<br>Ellipsoide Clarke 1880<br>Méridien Origine : Paris</td>
					<td>2</td>
					<td>Latitude<b><i> suivie de</i></b> longitude, s&eacute;par&eacute;es par <espace><br>Format : <a href="#Txt">Textuel - DMSsss</a></td>
				</tr>
				<tr>
					<td><b>L1</b></td>
					<td>Carto<br>(projection)</td>
					<td>Projection Lambert Zone I (Base NTF)<br>Pertinence : France NORD (Latitudes 48&deg; &agrave; 52&deg; env.)</td>
					<td>2</td>
					<td><b>X</b> (Easting)<b><i> suivie de</i></b> <b>Y</b> (Northing), s&eacute;par&eacute;es par <espace><br>Format : <a href="#Met">M&eacute;trique</a></td>
				</tr>
				<tr>
					<td><b>L2</b></td>
					<td>Carto<br>(projection)</td>
					<td>Projection Lambert Zone II (Base NTF)<br>Pertinence : France CENTRE (Latitudes 45&deg; &agrave; 48&deg; env.)</td>
					<td>2</td>
					<td><b>X</b> (Easting)<b><i> suivie de</i></b> <b>Y</b> (Northing), s&eacute;par&eacute;es par <espace><br>Format : <a href="#Met">M&eacute;trique</a></td>
				</tr>
				<tr>
					<td><b>L3</b></td>
					<td>Carto<br>(projection)</td>
					<td>Projection Lambert Zone III (Base NTF)<br>Pertinence : France SUD (Latitudes 42&deg; &agrave; 46&deg; env.)</td>
					<td>2</td>
					<td><b>X</b> (Easting)<b><i> suivie de</i></b> <b>Y</b> (Northing), s&eacute;par&eacute;es par <espace><br>Format : <a href="#Met">M&eacute;trique</a></td>
				</tr>
				<tr>
					<td><b>L4</b></td>
					<td>Carto<br>(projection)</td>
					<td>Projection Lambert Zone IV (Base NTF)<br>Pertinence : France CORSE (Latitudes 41&deg; &agrave; 43&deg; env.)</td>
					<td>2</td>
					<td><b>X</b> (Easting)<b><i> suivie de</i></b> <b>Y</b> (Northing), s&eacute;par&eacute;es par <espace><br>Format : <a href="#Met">M&eacute;trique</a></td>
				</tr>
				<tr>
					<td><b>L2E</b></td>
					<td>Carto<br>(projection)</td>
					<td>Projection Lambert Zone II &eacute;tendue (Base NTF)<br>Pertinence : France METROPOLITAINE (Latitudes 41&deg; &agrave; 52&deg; env.)</td>
					<td>2</td>
					<td><b>X</b> (Easting)<b><i> suivie de</i></b> <b>Y</b> (Northing), s&eacute;par&eacute;es par <espace><br>Format : <a href="#Met">M&eacute;trique</a></td>
				</tr>
				<tr>
					<td><b>L93</b></td>
					<td>Carto<br>(projection)</td>
					<td>Projection Lambert 93 (Base RGF93)<br>Pertinence : France METROPOLITAINE (Latitudes 41&deg; &agrave; 52&deg; env.)</td>
					<td>2</td>
					<td><b>X</b> (Easting)<b><i> suivie de</i></b> <b>Y</b> (Northing), s&eacute;par&eacute;es par <espace><br>Format : <a href="#Met">M&eacute;trique</a></td>
				</tr>
				<tr>
					<td><b>UTM</b></td>
					<td>Quadrillage<br>(projection)</td>
					<td>Transverse Universelle de Mercator (Base IAG-GRS80)<br><a target=blank href="http://fr.wikipedia.org/wiki/Transverse_Universelle_de_Mercator#Formules_de_passage_de_latitude.2Clongitude_.28.CF.86.2C.CE.BB.29_aux_coordonn.C3.A9es_UTM_.28E.2CN.29">(un conseil : allez voir &ccedil;a, &ccedil;a d&eacute;chire grave!)</a><br>Pertinence : GLOBALE (ou presque)</td>
					<td>4</td>
					<td><b>Fuseau</b>, puis <b>Zone</b>, puis <b>X</b> (Easting), puis <b>Y</b> (Northing),<br>s&eacute;par&eacute;es par <espace><br>Format : <a href="#UTM">Mixte(UTM)</a></td>
				</tr>
				<tr>
					<td><b>DFCI</b></td>
					<td>Quadrillage<br>(projection)</td>
					<td>(Base Lambert II &eacute;tendu)<br><a target=blank href="http://ccffpeynier.free.fr/Files/dfci.pdf">(les pompiers, chasseurs, lapins et bartavelles l'utilisent ...)</a><br>Pertinence : FRANCE (et environs)</td>
					<td>1</td>
					<td><b>Fuseau</b>, puis <b>Zone</b>, puis <b>X</b> (Easting), puis <b>Y</b> (Northing),<br>s&eacute;par&eacute;es par <espace><br>Format : <a href="#DFCI">Composite</a></td>
				</tr>
			</table>
			<br>
		</div>
		<br><b>GeKo</b><espace><b>RGC</b><espace><<b>Code du Syst&egrave;me-Source</b>><espace><<b>1 &agrave; 4 Param&egrave;tre(s)</b>>
		<div>
			<br>Le code de pseudo-Syst&egrave;me-Cible <b>RGC</b> permet d'obtenir, &agrave; partir des coordonn&eacute;es-source, le <b>g&eacute;ocodage inverse <i>(ReverseGeoCoding)</i></b>, c'est-&agrave;-dire l'adresse postale correspondant &agrave; ces coordonn&eacute;es.
			<br>Cette fonction fait appel à un "<b><i>WebService</i></b>", celui de GoogleMaps&trade;.
			<br>Les conditions d'usage de ce service proscrivent notamment les requ&ecirc;tes trop fr&eacute;quentes et imposent un delai minimum d'une seconde entre deux requ&ecirc;tes successives provenant de la m&ecirc;me IP, <b>&agrave; peine de bannissement</b>, pour &eacute;viter la saturation des serveurs concern&eacute;s.
			<br>Merci de respecter cette restriction.
			<br><br>
		</div>
		<br><b>GeKo</b><espace><b>WEB</b><espace> <font color = "FF0000"><b>"Nom du Point"</b>&nbsp;|&nbsp;<b>""</b></font><espace><<b>Code du Syst&egrave;me-Source</b>><espace><<b>1 &agrave; 4 Param&egrave;tre(s)</b>>
		<div>
			<br>Le code de pseudo-Syst&egrave;me-Cible <b>WEB</b> permet de g&eacute;n&eacute;rer dans le r&eacute;pertoire courant un fichier HTML contenant des liens pour visualiser sur diff&eacute;rents sites cartrographiques le point d&eacute;sign&eacute; par les <b>coordonn&eacute;s-source</b> fournies, &agrave; l'image de l'exemple ci-apr&egrave;s :
			<br><br>
			<a href="#Csv">(voir ci-dessous l'utilisation du pseudo-Syst&egrave;me-Cible CSV)</a>
			<br><br>
			<table width="1000" cols="6" border="1">
				<caption>Conversion GeKo</caption>
				<tr bgcolor="#80DF80"><th>Point</th><th>Lat.WGS84</th><th>lon.WGS84</th><th>OpenStreetMap<SUP>&reg;</SUP></th><th>GeoPortail I.G.N.<SUP>&reg;</SUP></th><th>GoogleMaps<SUP>&reg;</SUP></th></tr>
				<tr>
					<td bgcolor="#FFFFB0"><b>Montpellier, Arc de Triomphe</b><br>Source : WGS<br>Lat : 43.6111388888889<br>lon : 3.8723888888889</td><td>43.6111388889</td><td>3.8723888889</td>
					<td><a target="blank" href="http://www.openstreetmap.org/?lat=43.6111388889&lon=3.8723888889&zoom=17">Carte OSM<SUP>&reg;</SUP></a></td>
					<td><a target="blank" href="http://www.geoportail.gouv.fr/embed/visu.html?c=3.8723888889,43.6111388889&z=0.00002&l=GEOGRAPHICALGRIDSYSTEMS.MAPS.3D::GEOPORTAIL:OGC:WMTS==aggregate%281%29">Carte IGN<SUP>&reg;</SUP></a></td>
					<td><a target="blank" href="http://maps.google.fr/maps?q=43.6111388889,3.8723888889">Carte GM<SUP>&reg;</SUP></a></td>
				</tr>
				<tr>
					<td bgcolor="#FFFFB0"><b>Port d'Ajaccio (Corse)</b><br>Source : L4<br>X - Easting : 531232<br>Y - Northing : 178507</td><td>41.9193360181</td><td>8.7438645681</td>
					<td><a target="blank" href="http://www.openstreetmap.org/?lat=41.9193360181&lon=8.7438645681&zoom=17">Carte OSM<SUP>&reg;</SUP></a></td>
					<td><a target="blank" href="http://www.geoportail.gouv.fr/embed/visu.html?c=8.7438645681,41.9193360181&z=0.00002&l=GEOGRAPHICALGRIDSYSTEMS.MAPS.3D::GEOPORTAIL:OGC:WMTS==aggregate%281%29">Carte IGN<SUP>&reg;</SUP></a></td>
					<td><a target="blank" href="http://maps.google.fr/maps?q=41.9193360181,8.7438645681">Carte GM<SUP>&reg;</SUP></a></td>
				</tr>
				<tr>
					<td bgcolor="#FFFFB0"><b>...</td><td>...</td><td>...</td>
					<td>....</td>
					<td>....</td>
					<td>....</td>
				</tr>
				<tr>
					<td bgcolor="#FFFFB0"><b>Arc de Triomphe du Peyrou (Montpellier)</b><br>Source : UTM<br>X - Easting : 570398.3<br>Y - Northing : 4829056.1<br>Fuseau : 31 - Zone : T</td><td>43.6111567647</td><td>3.8723887595</td>
					<td><a target="blank" href="http://www.openstreetmap.org/?lat=43.6111567647&lon=3.8723887595&zoom=17">Carte OSM<SUP>&reg;</SUP></a></td>
					<td><a target="blank" href="http://www.geoportail.gouv.fr/embed/visu.html?c=3.8723887595,43.6111567647&z=0.00002&l=GEOGRAPHICALGRIDSYSTEMS.MAPS.3D::GEOPORTAIL:OGC:WMTS==aggregate%281%29">Carte IGN<SUP>&reg;</SUP></a></td>
					<td><a target="blank" href="http://maps.google.fr/maps?q=43.6111567647,3.8723887595">Carte GM<SUP>&reg;</SUP></a></td>
				</tr>
				<tr>
					<td bgcolor="#FFFFB0"><b>Etretat - Pointe de la Courtine</b><br>Source : DFCI<br>Carreau : EM42C2.4</td><td>49.6981607582</td><td>0.1833521264</td>
					<td><a target="blank" href="http://www.openstreetmap.org/?lat=49.6981607582&lon=0.1833521264&zoom=17">Carte OSM<SUP>&reg;</SUP></a></td>
					<td><a target="blank" href="http://www.geoportail.gouv.fr/embed/visu.html?c=0.1833521264,49.6981607582&z=0.00002&l=GEOGRAPHICALGRIDSYSTEMS.MAPS.3D::GEOPORTAIL:OGC:WMTS==aggregate%281%29">Carte IGN<SUP>&reg;</SUP></a></td>
					<td><a target="blank" href="http://maps.google.fr/maps?q=49.6981607582,0.1833521264">Carte GM<SUP>&reg;</SUP></a></td>
				</tr>
			</table>
			<br>
		</div>
		<a name="Csv">
		<br><b>GeKo</b><espace><b>CSV</b><espace><<b>Chemin du fichier CSV</b>>
		<div>
			<br>Le code de pseudo-Syst&egrave;me-Source <b>CSV</b> permet d'obtenir une conversion par lot (vers un syst&egrave;me-cible homog&egrave;ne), les donn&eacute;es-sources &eacute;tant inscrites dans un fichier au format CSV (texte ASCII, s&eacute;parateur point-virgule), dont les champs respectent la syntaxe de GeKo en mode Console.
			<br>Voir le fichier <b>GeKoTest.csv</b> fourni pour une explication par l'exemple.
			<br>Tester "GeKo CSV GeKoTest.csv" pour le plaisir ...
			<br><br>
		</div>
		<h4>Format des Param&egrave;tres</h4>
		<h5><a name="Dec">D&eacute;cimal</h5>
		<div>
			Format Num&eacute;rique : [-][9][9]<b>9.9</b>[9][9][9][9][9]
			<br>soit 1 &agrave; 3 chiffres, un point d&eacute;cimal (ou virgule) et 1 &agrave; 6 chiffres
			<br>- m&ecirc;me pour le m&eacute;ridien origine, le z&eacute;ro des degr&eacute;s doit figurer ;
			<br>- m&ecirc;me pour un degr&eacute; rond, le point suivi d'un z&eacute;ro doivent figurer.
		</div>
		<h5><a name="Txt">Textuel - DMSsss</h5>
		<div>
			Format Textuel - DMSsss : [-][D][D]<b>D</b>[.M][M][.S][S][.s][.s][.s]
			<br>soit 1 &agrave; 3 chiffres pour les degr&eacute;s ;
			<br> - un point d&eacute;cimal (ou virgule) ;
			<br> - 1 &agrave; 2 chiffres pour les minutes d'arc ;
			<br> - 1 &agrave; 2 chiffres pour les secondes d'arc ;
			<br> - un point d&eacute;cimal (ou virgule) ;
			<br> - 1 &agrave; 3 chiffres pour les milli&egrave;mes
			<br><br> [ GeKo WEB "Essai" WGSD 49 3 ] permet d'admirer l'usine &eacute;l&eacute;vatoire (la station d'&eacute;puration ?) d'Isles-les-Meldeuses !
		</div>
		<h5><a name="Met">M&eacute;trique</h5>
		<div>
			Les 2 coordonn&eacute;es cart&eacute;siennes X et Y correspondent &agrave; des distances exprim&eacute;es <b>en m&egrave;tres</b> vers le Nord et vers l'Est
			<br><b>exemple (L1)</b> : 445409 225232 => Aiguille d'Etretat (Normandie)
			<br><b>exemple (L2)</b> : 306786 252997 => Pont Willy Brandt (Nantes)
			<br><b>exemple (L3)</b> : 644518 44187 => Gare de Perpignan (Centre du Monde)
			<br><b>exemple (L4)</b> : 531232 178507 => Port d'Ajaccio (Corse)
			<br><b>exemple (L2E)</b> : 445203 2525466 => Aiguille d'Etretat (Normandie)
			<br><b>exemple (L93)</b> : 770447 6279510 => Arc de Triomphe du Peyrou (Montpellier)
		</div>
		<h5><a name="UTM">Mixte (UTM)</h5>
		<div>
			Le <b>Fuseau</b> est repr&eacute;sent&eacute; par <b>un nombre entier compris entre 1 et 60</b>, croissant vers l'Est, &agrave; partir du m&eacute;ridien 180&deg;, tous les 6&deg;. 
			<br>La <b>Zone</b> est repr&eacute;sent&eacute;e par <b>une lettre comprise entre C et X</b>, croissant vers le Nord, soit 20 zones de 8&deg; de latitude, de part et d'autre de l'Equateur.
			<br>-&nbsp;&nbsp;&nbsp;&nbsp;(<b>i</b> et <b>o</b> exclues pour &eacute;viter les confusions avec 1 et 0)</b>
			<br>-&nbsp;&nbsp;&nbsp;&nbsp;(20 zones de 8&deg; = 160&deg; : les r&eacute;gions polaires sont exclues au-del&agrave; de 80&deg; Nord ou Sud)
			<br><b>X</b> (Easting) exprim&eacute;e en m&egrave;tres (rajouter des z&eacute;ros si n&eacute;cessaire) est un entier.
			<br><b>Y</b> (Northing) exprim&eacute;e en m&egrave;tres (rajouter des z&eacute;ros si n&eacute;cessaire) est un entier.
			<br><b>exemple</b> : 31 T 570398 4829056 => Arc de Triomphe (Montpellier)
		</div>
		<h5><a name="DFCI">Composite (DFCI)</h5>
		<div>
			Ce <b>syst&egrave;me de rep&eacute;rage</b> consiste en un quadrillage en carreaux imbriqu&eacute;s de 100, 20 et 2 km, bas&eacute; sur la projection <b>Lambert II &eacute;tendue</b>.
			<br>Une extension sous forme de pseudo-d&eacute;cimale (1 &agrave; 5) permet d'adresser un carreau d'1 km de c&ocirc;t&eacute; :
			<br>- dans le carreau de 2 km de côté, chaque chiffre représente un carreau d'un km&sup2; :
			<br>&nbsp;&nbsp;- 1 représente le carreau Nord-Ouest ;
			<br>&nbsp;&nbsp;- 2 représente le carreau Nord-Est ;
			<br>&nbsp;&nbsp;- 3 représente le carreau Sud-Est ;
			<br>&nbsp;&nbsp;- 4 représente le carreau Sud-Ouest ;
			<br>&nbsp;&nbsp;- 5 représente le carreau Central.
			<br><b>exemple</b> : EM42C2.4 => Etretat (Pointe de la Courtine)
			<br><br>Bien &eacute;videmment, la conversion de coordonn&eacute;e-source DFCI renvoie avec une pr&eacute;cision m&eacute;trique le centre du carreau d&eacute;sign&eacute;, lequel concerne une zone d'un km<sup>2</sup>. 
		</div>
		<h4><a name="SWEB">Services WEB</h4>
		<div>
			A la date de r&eacute;daction du programme, les diff&eacute;rents services WEB utilis&eacute;s sont accessibles par les <b>liens (ou balises "&lsaquo;a&rsaquo;")</b> ci-dessous :
			<table cols="4" border="1">
				<tr><th>Code</th><th>Fonction</th><th>Serveur</th><th>lien ou balise &lsaquo;a&rsaquo;</th></td>
				<tr><td>WEB<br>(OSM)</td><td>Visualisation<br>Carto</td><td>OpenStreetMap</td><td>href="http://www.openstreetmap.org/?lat=<b>%Latit%</b>&lon=<b>%longit%</b>&zoom=18"</td></tr>
				<tr><td>WEB<br>(IGN)</td><td>Visualisation<br>Carto</td><td>G&eacute;oportail IGN</td><td>href="http://www.geoportail.gouv.fr/embed/visu.html?c=<b>%longit%</b>,<b>%Latit%</b>&z=0.00002&l=GEOGRAPHICALGRIDSYSTEMS.MAPS.3D::GEOPORTAIL:OGC:WMTS==aggregate%281%29"</td></tr>
				<tr><td>WEB<br>(GM)</td><td>Visualisation<br>Carto</td><td>Google Maps&trade;</td><td>href="http://maps.google.fr/maps?q=<b>%Latit%</b>,<b>%longit%</b>"</td></tr>
				<tr><td>RGC</td><td><i>Reverse GeoCoding</i><br>G&eacute;ocodage Inverse</td><td>Google Maps&trade;</td><td>href="https://maps.googleapis.com/maps/api/geocode/xml?latlng=<b>%Latit%</b>,<b>%longit%</b>"</td></tr>
			</table>
			<b>%Latit%</b> et <b>%longit%</b> doivent &ecirc;tre remplac&eacute;s par les valeurs de Latitude et longitude WGS84 choisies, exprim&eacute;es en format d&eacute;cimal (point s&eacute;parateur).
			<br>L'utilisation du code WEB pour la visualisation ou RGC pour le g&eacute;ocodage inverse n&eacute;cessitent &eacute;videmment un acc&egrave;s &agrave; internet fonctionnel !
			<br>
		</div>
		<h2><a href="mailto:pierrepetit57@laposte.net" title="Heureux d'&Ecirc;tre Utile&#013;(et un m&egrave;l de remerciement fait toujours plaisir !)">HEU ...</a></h2>
	</body>
</html>

et le fichier de test :GeKoTest.csv :

Code : Tout sélectionner

WEB;"Montpellier, Arc de Triomphe";WGS;43.6111388888889;3.8723888888889
WEB;"Montpellier, Arc de Triomphe";WGSD;43.36.40.1;3.52.20.6
WEB;"Montpellier, Arc de Triomphe";NTF;43.6111327777778;1.5357608333333
WEB;"Montpellier, Arc de Triomphe";NTFD;43.36.40.078;1.32.8.739
WEB;"Col de Voza (St Gervais-les-Bains)";L2E;943347;2107069
WEB;"Etretat, Aiguille";L1;445406;225229
WEB;"Nantes, Pont Willy Brandt";L2;306786;252997
WEB;"Gare de Perpignan (Centre du Monde)";L3;644518;44187
WEB;"Port d'Ajaccio (Corse)";L4;531232;178507
WEB;"Arc de Triomphe du Peyrou (Montpellier)";UTM;570398.3;4829056.1;31;T
WEB;"Etretat – Pointe de la Courtine";DFCI;EM42C2.4

Dernière modification par PK1157 le jeu. 02/juil./2015 20:24, modifié 2 fois.
Windows 10 64 bits
Linux XUbuntu
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Conversion de Coordonnées Géo-Cartographiques

Message par djes »

Ce code très complet pourrait bien m'être utile un de ces 4, merci beaucoup !
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Conversion de Coordonnées Géo-Cartographiques

Message par comtois »

C'est clair, ça pourra être utile un jour, même si je n'en ai pas l'usage dans l'immédiat.

Merci du partage.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Conversion de Coordonnées Géo-Cartographiques

Message par falsam »

1er message et 1er projet opérationnel. Bravo, merci et bienvenu PK1157 :)

Je n'ai pas regardé l'aide immédiatement et je n'avais pas compris qu'il fallait lancer GeKo en ligne de commande.:oops:

Je pense que je ne suis pas le seul à me faire avoir. (En principe)

1 - Créer l'éxécutable (ex: geko.exe) dans le meme dossier que le ficher csv.
2 - Ouvrir le dossier contenant geko.
3 - Presser la touche Shift + clique droit: menu contextuel -> Ouvrir une fenêtre de commande ici
2 - lancer geko en ligne de commande : geko csv GetoTest.csv
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
PK1157
Messages : 10
Inscription : jeu. 14/mai/2015 23:37
Localisation : FRANCE 66 PYRENEES ORIENTALES

Re: Conversion de Coordonnées Géo-Cartographiques

Message par PK1157 »

Merci de votre réactivité !
Les limitations (évidentes en matière de sûreté) du forum m'ont empêché de télécharger un "package" qui aurait contenu le source (.pb), l'aide (.htm) et le fichier-test(.csv).
Ce qui m'a séduit, c'est le fait que PB soit accessible à plusieurs plateformes, c'est pourquoi j'ai rédigé cette version "exécutable" des fonctions Libre/OpenOffice dont je rappelle l'origine dans mon message initial.
Le choix de réaliser un utilitaire "en ligne de commande" réside certainement pour beaucoup dans mon âge, mais aussi du souci de fournir un outil qui peut être appelé entant que fonction par un logiciel "plus évolué" à l'instar d'un programme rédigé dans un cadre "propriétaire" comme VB ou Windev ou ...
En effet, mon grand âge me conduit à reproduire les habitudes de programmation que je pratiquais lorsque j'avais encore plein de cheveux (et de boutons !) :
C'était l'époque ou APL (http://fr.wikipedia.org/wiki/APL_%28langage%29) était le top du top de la programmation, sur des Apple II (sans le +, c'est à dire sans les flottants !) ... On fêtait alors le bicentenaire de la révolution étazunienne...
Le fichier le plus important est donc le fichier d'aide, car celui-ci indique comment utiliser le programme, quelque soit la plate-forme.
merci de vous être intéressé à mon ouvrage.
PK1157
Windows 10 64 bits
Linux XUbuntu
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Conversion de Coordonnées Géo-Cartographiques

Message par djes »

Les programmes en ligne de commande, c'est ce qu'il y a de mieux pour tout ce qui est «moulinette» de données, d'ailleurs, c'est ce qui est utilisé dans la plupart des SIG. Sauf qu'on n'a pas toujours le code source, ou qu'il est (plus ou moins volontairement) noyé dans la masse. Ici, on y comprend quelque chose, c'est du concret.
Avatar de l’utilisateur
PK1157
Messages : 10
Inscription : jeu. 14/mai/2015 23:37
Localisation : FRANCE 66 PYRENEES ORIENTALES

Re: Conversion de Coordonnées Géo-Cartographiques

Message par PK1157 »

Spock a écrit :tres bon code, merci

pour ton aide tu peux faire comme ça

Code : Tout sélectionner

Procedure Aide()
	; AppDir$=GetPathPart(ProgramFilename())
	CurDir$=GetCurrentDirectory()
	PrintN("Paramètre(s) absent(s) ou incorrects")    
	if FileSize(CurDir$+"Geko_Aide.html") <> -1 
		RunProgram(CurDir$+"Geko_Aide.html")
		Else
		PrintN("Impossible d'ouvrir le fichier d'aide !")
	EndIf
EndProcedure
ps: non je ne re-code pas... ;)
Bonne suggestion, ça marche aussi pour l'affichage du résultat avec le code de pseudo-conversion "WEB".

Code : Tout sélectionner

Sous Windows RunProgram() utilise l'application par défaut associée à un type de fichier. Par exemple: RunProgram("Test.html") ouvrira le navigateur configuré sur votre système. 
J'ai testé sous Windows, mais qu'en est-il de Linux ? Je verrai ce soir à la maison ...
PK1157
Windows 10 64 bits
Linux XUbuntu
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Conversion de Coordonnées Géo-Cartographiques

Message par Kwai chang caine »

Strict, Propre, parfait :D
Et ben dis donc si tu commences comme ça ....ça promet :wink:

Juste un point d'interrogation qui me fait un carré dans IE

Code : Tout sélectionner

 <h2>Conversion G?o/Cartographique<br>(<i>Geodesic Konversion ?</i>)<br>Utilitaire en ligne de commande</h2>
Autrement bravo et surtout merci beaucoup de ce splendide partage 8)
Et aussi à FALSAM pour l'explication (Bien sur) :wink:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
PK1157
Messages : 10
Inscription : jeu. 14/mai/2015 23:37
Localisation : FRANCE 66 PYRENEES ORIENTALES

Re: Conversion de Coordonnées Géo-Cartographiques

Message par PK1157 »

Kwai chang caine a écrit :Strict, Propre, parfait :D
Et ben dis donc si tu commences comme ça ....ça promet :wink:

Juste un point d'interrogation qui me fait un carré dans IE

Code : Tout sélectionner

 <h2>Conversion G?o/Cartographique<br>(<i>Geodesic Konversion ?</i>)<br>Utilitaire en ligne de commande</h2>
Autrement bravo et surtout merci beaucoup de ce splendide partage 8)
Et aussi à FALSAM pour l'explication (Bien sur) :wink:
Le point d'interrogation qui fait un carré dans IE, ça résulte de l'oubli de la conversion en entité HTML du "e accent aigu"
la ligne doit être remplacée par :

Code : Tout sélectionner

<h2>Conversion G&eacute;o/Cartographique<br>(<i>Geodesic Konversion ?</i>)<br>Utilitaire en ligne de commande</h2>
ces "HTML entities" qui commencent par l'esperluette et finissent par un point-virgule permettent de faire reconnaître par les navigateurs les caractères spécifiques d'une langue ou d'un domaine d'utilisation.
Pour plus d'info, voir ce lien : http://dev.w3.org/html5/html-author/charref
J'ai commis le même oubli dans le fichier d'aide et dans la procédure InitGeKo. Désolé.
PK1157
Windows 10 64 bits
Linux XUbuntu
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Conversion de Coordonnées Géo-Cartographiques

Message par Kwai chang caine »

Merci pour cette explication, et encore pour ton travail 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre