Premier chargement des fichiers
[mp-geo.git] / mp-geo.mp
diff --git a/mp-geo.mp b/mp-geo.mp
new file mode 100644 (file)
index 0000000..b24e51f
--- /dev/null
+++ b/mp-geo.mp
@@ -0,0 +1,1447 @@
+%Package mp-geographie
+%Auteur:Christophe Poulain
+%Version 0.61
+%11/04/2008
+
+input marith;
+input sarith;
+input TEX;
+
+pi:=3.141592654;
+c:=57.29578; % conversion d'un radian en degrés
+
+color _T[],rouge,vert,bleu,jaune,noir,blanc,orange,rose,violet,ciel,cielfonce,orangevif,gris,tan,payscolor;
+
+rouge=(1,0,0);
+bleu=(0,0,1);
+noir=(0,0,0);
+blanc=(1,1,1);
+orange=(1,0.5,0);
+violet=(1,0,1);
+rose=(1,0.7,0.7);
+cielfonce=(0.25,0.75,1);
+ciel=(0,1,1);
+orangevif=(1,0.25,0.1);
+vert=(0,1,0);
+jaune=(1,1,0);
+gris=0.8*white;
+
+tan=(0.824,0.705,0.55);
+payscolor=tan;
+
+vardef flamme=reverse(2mm*(0.5,1){dir90}..2mm*(0.75,1.5)..{dir90}2mm*(1,2))--2mm*(0.5,1){dir=-90}..2mm*(1,0.5)..{dir=90}2mm*(1.5,1)--((2mm*(0.5,1){dir90}..2mm*(0.75,1.5)..{dir90}2mm*(1,2)) reflectedabout (2mm*(1,0),2mm*(1,0)+2mm*(0,1)))--cycle
+enddef;
+
+%Les marques
+
+string marque_p;
+marque_p := "non";
+marque_r := 20;
+
+def MarquePoint(expr p)=
+  if marque_p = "creux":
+    if color p:
+      fill fullcircle scaled (marque_r/5) shifted (Projgeo(p)) withcolor white;
+      draw fullcircle scaled (marque_r/5) shifted (Projgeo(p));
+    else:
+      fill fullcircle scaled (marque_r/5) shifted (p) withcolor white;
+      draw fullcircle scaled (marque_r/5) shifted (p);
+    fi;
+  fi;
+enddef;
+
+vardef pointe(text t) =
+  for p_ = t: if (pair p_) or (color p_): MarquePoint(p_); fi endfor;
+enddef;
+
+%Définition pour la feuille
+
+path feuillet;
+numeric _tfig,_nfig;
+_nfig:=0;
+u:=1cm;
+
+def feuille(expr xa,ya,xb,yb) =
+  numeric Xa,Ya;
+  Xa=xa;
+  Ya=ya;
+  feuillet := (xa,ya)--(xa,yb)--(xb,yb)--(xb,ya)--cycle;
+  extra_endfig := "clip currentpicture to feuillet;" & extra_endfig;
+enddef;
+
+def figureespace(expr xa,ya,xb,yb) =
+  _nfig:=_nfig+1;
+  beginfig(_nfig);
+    feuille(xa,ya,xb,yb);
+enddef;  
+
+def finespace=
+endfig;
+enddef;
+
+def figure(expr xa,ya,xb,yb)=figureespace(xa,ya,xb,yb)
+enddef;
+
+def fin=finespace
+enddef;
+
+%definitions mathématiques
+vardef cercles(text t)=
+  save Cer;
+  save n;
+  n:=0;
+  for p_=t:
+    if color p_:
+      n:=n+1;
+      _T[n]:=p_;
+    fi;
+  endfor;
+  path Cer;
+  color ptcer[];
+  for k=0 step 5 until 360 :
+    ptcer[k div 5]-_T[1]=Distance(_T[1],_T[2])*((_T[4]-_T[3])*cosd(k)/Distance(_T[3],_T[4])+(_T[5]-_T[3])*sind(k)/Distance(_T[3],_T[5]));
+  endfor;
+  Cer=Projgeo(ptcer0)
+  for k=0 step 5 until 360 :
+    ..Projgeo(ptcer[k div 5])
+  endfor
+  ..cycle;
+  Cer
+enddef;
+
+vardef arcsind(expr x)=%en degré ici :)
+  angle((sqrt(1-x**2),x))
+enddef;
+
+vardef tand(expr x)=sind(x)/cosd(x)%
+enddef;
+
+vardef cotand(expr x)=cosd(x)/sind(x)%
+enddef;
+
+vardef ln(expr t)=mlog(t)/256%
+enddef;
+
+%représentation paramétrique de la sphère terrestre.
+vardef FX(expr t,v)=rayon*cosd(c*t)*cosd(c*v)
+enddef;
+
+vardef FY(expr t,v)=rayon*cosd(c*t)*sind(c*v)
+enddef;
+
+vardef FZ(expr t,v)=rayon*sind(c*t)
+enddef;
+
+%Paramètres et macros de représentation
+vardef Initialisation(expr r,t,p,d)=
+  Rho:=r;
+  Theta:=t;
+  Phi:=p;
+  DE:=d;
+  Aux1:=sind(Theta);
+  Aux2:=sind(Phi);
+  Aux3:=cosd(Theta);
+  Aux4:=cosd(Phi);
+  Aux5:=Aux3*Aux2;
+  Aux6:=Aux1*Aux2;
+  Aux7:=Aux3*Aux4;
+  Aux8:=Aux1*Aux4;
+enddef;
+
+vardef Oeil=(Rho*Aux7,Rho*Aux8,Rho*Aux2)
+enddef;
+
+vardef Vision(expr num)=
+  save bb;
+  color bb;
+  bb=(redpart(Oeil-Sommet[num]),greenpart(Oeil-Sommet[num]),bluepart(Oeil-Sommet[num]));  
+  bb
+enddef;
+
+vardef Normal(expr vecun,vecde,vectr)=
+  save aa;
+  color aa;
+  P1:=redpart(vecde-vecun);
+  P2:=greenpart(vecde-vecun);
+  P3:=bluepart(vecde-vecun);
+  Q1:=redpart(vectr-vecun);
+  Q2:=greenpart(vectr-vecun);
+  Q3:=bluepart(vectr-vecun);
+  aa=(P2*Q3-Q2*P3,P3*Q1-Q3*P1,P1*Q2-Q1*P2);
+  aa
+enddef;
+
+vardef ProduitScalaire(expr wec,mor)=
+  redpart(wec)*redpart(mor)+greenpart(wec)*greenpart(mor)+bluepart(wec)*bluepart(mor)
+enddef;
+
+vardef Distance(expr aa,bb)=%Entre deux points
+  sqrt((redpart(bb)-redpart(aa))*(redpart(bb)-redpart(aa))+(greenpart(bb)-greenpart(aa))*(greenpart(bb)-greenpart(aa))+(bluepart(bb)-bluepart(aa))*(bluepart(bb)-bluepart(aa)))
+enddef;
+
+vardef MaillageS=
+  path Maillage[];
+  color CentMaillage[];
+  %numeric Vmin,Vmax;
+  %total:=0;
+  for k=Udebut step 0.5*pasU until (Ufin):
+    for l=Vdebut step pasV until (Vfin):
+      Maillage[100*k+l]=Projgeo((FX(k,l),FY(k,l),FZ(k,l)))--Projgeo((FX(k,l+pasV),FY(k,l+pasV),FZ(k,l+pasV)))--Projgeo((FX(k+pasU,l+pasV),FY(k+pasU,l+pasV),FZ(k+pasU,l+pasV)))--Projgeo((FX(k+pasU,l),FY(k+pasU,l),FZ(k+pasU,l)))--cycle;
+      if ProduitScalaire(1/2[(FX(k,l),FY(k,l),FZ(k,l)),(FX(k+pasU,l+pasV),FY(k+pasU,l+pasV),FZ(k+pasU,l+pasV))]-pte3,Oeil-pte3)>0:
+       %total:=total+1;
+       %if total=1:
+       %  Vmin:=l;
+       %fi;
+       draw Maillage[100*k+l];
+      fi;
+    endfor;
+  endfor;
+  %drawoptions();
+  %for k=(Udebut+pasU) step pasU until (Ufin-pasU):
+  %  if abs(round(k*c))<100:
+  %    label.urt(TEX(""&decimal(round(k*c))&""),Projgeo(rayon*(cosd(round(k*c))*cosd(Theta),cosd(round(k*c))*sind(Theta),sind(round(k*c)))))
+  %  fi;
+  %endfor;
+  %Vmax:=0;
+  %Vmax:=Vmin+2*((Theta/c)-Vmin);
+  %label.top(TEX(""&decimal(round(Vmin*c))&"") rotated angle(Projgeo(rayon*(cosd(phim+10)*cosd(round(Vmin*c)),cosd(phim+10)*sind(round(Vmin*c)),sind(phim+10)))-Projgeo(rayon*(cosd(phim)*cosd(round(Vmin*c)),cosd(phim)*sind(round(Vmin*c)),sind(phim)))),Projgeo(rayon*(cosd(phim)*cosd(round(Vmin*c)),cosd(phim)*sind(round(Vmin*c)),sind(phim))));
+  %label.top(TEX(""&decimal(round(Theta))&"") rotated angle(Projgeo(rayon*(cosd(phim+10)*cosd(round(Theta)),cosd(phim+10)*sind(round(Theta)),sind(phim+10)))-Projgeo(rayon*(cosd(phim)*cosd(round(Theta)),cosd(phim)*sind(round(Theta)),sind(phim)))),Projgeo(rayon*(cosd(phim)*cosd(round(Theta)),cosd(phim)*sind(round(Theta)),sind(phim))));
+  %label.top(TEX(""&decimal(round(Vmax*c))&"") rotated angle(Projgeo(rayon*(cosd(phim+10)*cosd(round(Vmax*c)),cosd(phim+10)*sind(round(Vmax*c)),sind(phim+10)))-Projgeo(rayon*(cosd(phim)*cosd(round(Vmax*c)),cosd(phim)*sind(round(Vmax*c)),sind(phim)))),Projgeo(rayon*(cosd(phim)*cosd(round(Vmax*c)),cosd(phim)*sind(round(Vmax*c)),sind(phim))));
+enddef;
+
+vardef InitialiseMaillage(expr ud,uf,up,vd,vf,vp)=
+  Udebut:=ud;
+  Ufin:=uf;
+  pasU:=up;
+  Vdebut:=vd;
+  Vfin:=vf;
+  pasV:=vp;
+enddef;
+
+vardef MaillageSphere=
+  InitialiseMaillage(((phim div 10)+1)*pi/18,((phip div 10)-1)*pi/18,pi/18,-pi,pi,pi/36);
+  MaillageS;
+enddef;
+
+boolean maille;
+maille=false;
+
+vardef ParaMeri(expr lonn,latt)=%longitude et latitude en degrés%Parallèle et méridien particulier pour une représentation 3d.
+  maille:=true;
+  latpar:=latt;
+  lonpar:=lonn;
+enddef;
+
+vardef Maille=
+  InitialiseMaillage(((phim div 10)+1)*pi/18,((phip div 10)-1)*pi/18,pi/36,-pi,pi,pi/72);
+  path SMaillage[];picture Smaille;
+  drawoptions(withpen pencircle scaled 2bp withcolor orangevif);
+  for l=Vdebut step pasV until (Vfin+pasV):
+    SMaillage[100*latpar+l]=Projgeo((FX(latpar/c,l),FY(latpar/c,l),FZ(latpar/c,l)))--Projgeo((FX(latpar/c,l+pasV),FY(latpar/c,l+pasV),FZ(latpar/c,l+pasV)));
+    if ProduitScalaire(1/2[(FX(latpar/c,l),FY(latpar/c,l),FZ(latpar/c,l)),(FX(latpar/c,l+pasV),FY(latpar/c,l+pasV),FZ(latpar/c,l+pasV))]-pte3,Oeil-pte3)>0:
+      draw SMaillage[100*latpar+l];
+    fi;
+  endfor;
+  for k=Udebut step pasU until (Ufin+pasU):
+    SMaillage[k+100*lonpar]:=Projgeo((FX(k,lonpar/c),FY(k,lonpar/c),FZ(k,lonpar/c)))--Projgeo((FX(k+pasU,lonpar/c),FY(k+pasU,lonpar/c),FZ(k+pasU,lonpar/c)));
+    if ProduitScalaire(1/2[(FX(k,lonpar/c),FY(k,lonpar/c),FZ(k,lonpar/c)),(FX(k+pasU,lonpar/c),FY(k+pasU,lonpar/c),FZ(k+pasU,lonpar/c))]-pte3,Oeil-pte3)>0:
+      draw SMaillage[k+100*lonpar];
+    fi;
+  endfor;
+  drawoptions();
+    %);
+enddef;
+
+vardef Projgeo(expr X)=
+  pair $;
+  numeric Xobs,Yobs,Zobs,XProj,YProj;
+  Xobs = -redpart(X)*Aux1 + greenpart(X)*Aux3;
+  Yobs = -redpart(X)*Aux5 - greenpart(X)*Aux6 + bluepart(X)*Aux4;
+  Zobs = -redpart(X)*Aux7 - greenpart(X)*Aux8 - bluepart(X)*Aux2 + Rho;
+  XProj = DE*Xobs/Zobs;
+  YProj = DE*Yobs/Zobs;
+  $=(XProj,YProj);
+  $
+enddef;
+
+%Début du package
+numeric nbpts,nblec,nbcapitales;
+
+string arborescence;
+arborescence:="data/";
+
+vardef lecture(expr nomfichier,fond)=
+  color Coord[],Pays[];
+  numeric ll;
+  ll:=0;
+  nbpts:=scantokens readfrom nomfichier;
+  for k=1 upto (nbpts div 3):
+    pair latlon;
+    latlon=((scantokens readfrom nomfichier)+(scantokens readfrom nomfichier)+(scantokens readfrom nomfichier))/3;
+    Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+    if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+      if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+       ll:=ll+1;
+       Pays[k]=Coord[k];
+      else:
+       Pays[k]=2*Coord[k];
+      fi;
+    else:
+      Pays[k]=2*Coord[k];
+    fi;
+  endfor;
+  closefrom nomfichier;
+  path pays;
+  if ll>0:
+    pays=Projgeo(Pays[1])
+    for l=2 upto (nbpts div 3):
+      --Projgeo(Pays[l])
+    endfor;
+    if noncolore=true:
+      fill pays--cycle withcolor payscolor;
+    else:
+      fill pays--cycle withcolor fond;
+    fi;
+    draw pays;
+    clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+  fi;
+enddef;
+
+string nomfichiermul,NomFichier;
+
+vardef Lectureiles=
+  nomfichiermul:=arborescence&"iles.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    color Coord[],fond,Pays[];
+    numeric ll;
+    ll:=0;
+    nbpts:=scantokens readfrom nomfichiermul;
+    fond=scantokens readfrom nomfichiermul;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+      if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+       if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+         ll:=ll+1;
+         Pays[k]=Coord[k];
+       else:
+         Pays[k]=2*Coord[k];
+       fi;
+      else:
+       Pays[k]=2*Coord[k];
+      fi;
+    endfor;
+    path pays;
+     if ll>0:
+      pays=Projgeo(Pays[1])
+      for l=2 upto nbpts:
+       --Projgeo(Pays[l])
+      endfor;
+      if noncolore=true:
+       fill pays--cycle withcolor payscolor;
+      else:
+       fill pays--cycle withcolor fond;
+      fi;
+      draw pays;
+      clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturelacs=
+  nomfichiermul:=arborescence&"lacs.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    color Coord[],Pays[];
+    numeric ll;
+    ll:=0;
+    nbpts:=scantokens readfrom nomfichiermul;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+      if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+       if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+         ll:=ll+1;
+         Pays[k]=Coord[k];
+       else:
+         Pays[k]=2*Coord[k];
+       fi;
+      else:
+       Pays[k]=2*Coord[k];
+      fi;
+    endfor;
+    path pays;
+    if ll>0:
+      pays=Projgeo(Pays[1])
+      for l=2 upto nbpts:
+       --Projgeo(Pays[l])
+      endfor;
+      fill pays--cycle withcolor cielfonce;
+      draw pays;
+      clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturelacssup=
+  nomfichiermul:=arborescence&"lacssup.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    color Coord[],Pays[];
+    numeric ll;
+    ll:=0;
+    nbpts:=scantokens readfrom nomfichiermul;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      Coord[k]=rayon*(cosd(xpart(latlon))*cosd(ypart(latlon)),cosd(xpart(latlon))*sind(ypart(latlon)),sind(xpart(latlon)));
+      if ((xpart(latlon)>phim) and (xpart(latlon)<phip)):
+       if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+         ll:=ll+1;
+         Pays[k]=Coord[k];
+       else:
+         Pays[k]=2*Coord[k];
+       fi;
+      else:
+       Pays[k]=2*Coord[k];
+      fi;
+    endfor;
+    path pays;
+    if ll>0:
+      pays=Projgeo(Pays[1])
+      for l=2 upto nbpts:
+       --Projgeo(Pays[l])
+      endfor;
+      fill pays--cycle withcolor cielfonce;
+      draw pays;
+      clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturevolcans=
+  drawoptions(withcolor orange);
+  nomfichiermul:=arborescence&"volcans.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  show nblec;
+  for p=1 upto nblec:
+    color Coord[],Pays[];
+    pair latlon;
+    latlon=scantokens readfrom nomfichiermul;
+    Coord[p]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+    if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+      if ProduitScalaire(Coord[p]-pte3,Oeil-pte3)>0:
+       Pays[p]=Coord[p];
+       fill flamme shifted Projgeo(Pays[p]) withcolor 1/2[orange,jaune];
+      %else:
+%      Pays[k]=2*Coord[k];
+      fi;
+%    else:
+%      Pays[k]=2*Coord[k];
+    fi;
+  endfor;
+closefrom nomfichiermul;
+drawoptions();
+enddef;
+
+vardef Lecturerivieres=
+  nomfichiermul:=arborescence&"rivieres.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    color Coord[],fond,Pays[];
+    numeric ll;
+    ll:=0;
+    nbpts:=scantokens readfrom nomfichiermul;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      Coord[k]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+      if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+       if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+         ll:=ll+1;
+         Pays[k]=Coord[k];
+       else:
+         Pays[k]=2*Coord[k];
+       fi;
+      else:
+       Pays[k]=2*Coord[k];
+      fi;
+    endfor;
+    path pays;
+    if ll>0:
+      pays=Projgeo(Pays[1])
+      for l=2 upto nbpts:
+       --Projgeo(Pays[l])
+      endfor;
+      draw pays withcolor cielfonce;
+      clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturerivieressup=
+  nomfichiermul:=arborescence&"fleuveseurope.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    color Coord[],fond,Pays[];
+    numeric ll;
+    ll:=0;
+    nbpts:=scantokens readfrom nomfichiermul;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      Coord[k]=rayon*(cosd(xpart(latlon))*cosd(ypart(latlon)),cosd(xpart(latlon))*sind(ypart(latlon)),sind(xpart(latlon)));
+      if ((xpart(latlon)>phim) and (xpart(latlon)<phip)):
+       if ProduitScalaire(Coord[k]-pte3,Oeil-pte3)>0:
+         ll:=ll+1;
+         Pays[k]=Coord[k];
+       else:
+         Pays[k]=2*Coord[k];
+       fi;
+      else:
+       Pays[k]=2*Coord[k];
+      fi;
+    endfor;
+    path pays;
+    if ll>0:
+      pays=Projgeo(Pays[1])
+      for l=2 upto nbpts:
+       --Projgeo(Pays[l])
+      endfor;
+      draw pays withcolor cielfonce;
+      clip currentpicture to cercles(pte3,pte1,pte3,pte1,pte4);
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturecapitales=
+  marque_p:="creux";
+  nomfichiermul:=arborescence&"capitales.dat";
+  nbcapitales:=scantokens readfrom nomfichiermul;
+  for p=1 upto nbcapitales:
+    color Coord[];
+    pair latlon;
+    picture Nom;
+    string p_;
+    p_=scantokens readfrom nomfichiermul;
+    latlon=scantokens readfrom nomfichiermul;
+    Coord[p]=rayon*(cosd(xpart(latlon/60))*cosd(ypart(latlon/60)),cosd(xpart(latlon/60))*sind(ypart(latlon/60)),sind(xpart(latlon/60)));
+    Nom=image(
+      label.top(p_,Projgeo(Coord[p]));
+      );
+    if ((xpart(latlon/60)>phim) and (xpart(latlon/60)<phip)):
+      if ProduitScalaire(Coord[p]-pte3,Oeil-pte3)>0:
+       pointe(Coord[p]);
+       %draw Nom;
+      fi;
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+  marque_p:="non";
+enddef;
+
+vardef Lecture(expr Nomfichier)=
+  NomFichier:=arborescence&Nomfichier;
+  nblec:=scantokens readfrom NomFichier;
+  for w=1 upto nblec:
+    if projection="non":
+      lecture(scantokens readfrom NomFichier);
+    else:
+      lecturep(scantokens readfrom NomFichier);
+    fi;
+  endfor;
+  closefrom NomFichier;
+enddef;
+
+%Pour les projections
+string projection;
+projection:="non";
+
+vardef zoom(expr nbzoom)=
+  if projection="mercator":
+    xunit:=nbzoom;
+    yunit:=nbzoom*2*cm;
+  elseif projection="cylindrique":
+    xunit:=2.5*nbzoom;
+    yunit:=nbzoom*10*cm;
+  elseif projection="simple":
+    xunit:=nbzoom*0.5*mm;
+    yunit:=nbzoom*0.5*mm;
+  elseif projection="bonne":
+    xunit:=nbzoom*4*cm;
+    yunit:=xunit;
+  fi;
+enddef;
+
+vardef mercatorc(expr aa,bb)=
+  (xunit*(bb-theta),yunit*(ln(abs(tand(45+(aa/2))))-ln(abs(tand(45+(phi/2))))))
+enddef;
+
+vardef coniquec(expr aa,bb,pc)=
+  abscon:=5*cm*(cosd(aa)*sind(bb*sind(pc)))/(sind(pc)*cosd(aa-pc));
+  ordcon:=5*cm*(cosd(aa)*cosd(bb*sind(pc)))/(sind(pc)*cosd(aa-pc));
+  (abscon,ordcon)
+enddef;
+
+vardef cylindriquec(expr aa,bb)=
+  (xunit*(bb-theta),yunit*(sind(aa)-sind(phi)))
+enddef;
+
+vardef simplec(expr aa,bb)=
+  (xunit*(bb-theta),yunit*(aa-phi))
+enddef;
+
+vardef bonnec(expr aaa,bbb)=
+  save tt;
+  pair tt;
+  rho:=cotand(phi)+(phi-aaa)/c;
+  E:=(((bbb-theta)/c)*cosd(aaa))/rho;
+  tt=xunit*(rho*sind(E*c),cotand(phi)-rho*cosd(E*c));
+  tt
+enddef;
+
+vardef lecturep(expr nomfichier,fond)=
+  pair Coord[];
+  nbpts:=scantokens readfrom nomfichier;
+  numeric ll;
+  ll=0;
+  for k=1 upto nbpts:
+    pair latlon;
+    latlon=scantokens readfrom nomfichier;
+    if projection="mercator":
+      Coord[k]=mercatorc(xpart(latlon/60),ypart(latlon/60))
+    elseif projection="cylindrique":
+      Coord[k]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+    elseif projection="simple":
+      Coord[k]=simplec(xpart(latlon/60),ypart(latlon/60));
+    elseif projection="bonne":
+      Coord[k]=bonnec(xpart(latlon/60),ypart(latlon/60));
+    elseif projection="coniqueh":
+      if (xpart(latlon)>0) or (xpart(latlon)=0):
+       ll:=ll+1;
+       Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),45);
+      fi;
+    elseif projection="coniqueb":
+      if (xpart(latlon)<0):
+       ll:=ll+1;
+       Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+      fi;
+    fi;
+  endfor;
+  closefrom nomfichier;
+  path pays;
+  if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+    ll:=nbpts
+  fi;
+  if ll>0:
+    pays=Coord[1]
+    for l=2 upto ll:
+      --Coord[l]
+    endfor;
+    if noncolore=true:
+      fill pays--cycle withcolor payscolor;
+    else:
+      fill pays--cycle withcolor fond;
+    fi;
+    draw pays;
+  fi;
+enddef;
+
+vardef Lectureilesp=
+  if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+    nomfichiermul:=arborescence&"Ile.dat";
+  else:
+    nomfichiermul:=arborescence&"iles.dat";
+  fi;
+  nblec:=scantokens readfrom nomfichiermul;
+  if projection="bonne":
+    nblec:=nblec-1
+  fi;
+  for p=1 upto nblec:
+    pair Coord[];color fond;
+    nbpts:=scantokens readfrom nomfichiermul;
+    fond=scantokens readfrom nomfichiermul;
+    numeric ll;
+    ll=0;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      if projection="mercator":
+       Coord[k]=mercatorc(xpart(latlon/60),ypart(latlon/60))
+      elseif projection="simple":
+       Coord[k]=simplec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="cylindrique":
+       Coord[k]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="bonne":
+       Coord[k]=bonnec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="coniqueh":
+       if (xpart(latlon)>0) or (xpart(latlon)=0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),45)
+       fi;
+      elseif projection="coniqueb":
+       if (xpart(latlon)<0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+       fi;
+      fi;
+    endfor;
+    path pays;
+    if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+      ll:=nbpts
+    fi;
+    if ll>0:
+      pays=Coord[1]
+      for l=2 upto ll:
+       --Coord[l]
+      endfor;
+      if noncolore=true:
+       fill pays--cycle withcolor payscolor;
+      else:
+       fill pays--cycle withcolor fond;
+      fi;
+      draw pays;
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+ if (projection="mercator") or (projection="cylindrique") or (projection="simple"):
+    clip currentpicture to feuillet;
+  fi;
+  if projection="bonne":
+    lecturep(arborescence&"polesud.dat",blanc);
+    clip currentpicture to (bonnec(-90,-180) for k=-89 upto 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-89 upto 90:..bonnec(k,180) endfor)..cycle;
+  fi;
+enddef;
+
+vardef Lecturevillesp(expr nompays)=
+  nomfichiermul:=arborescence&"villes"&nompays&".dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  drawoptions(withcolor (0.15,0.15,0.15)); 
+  for p=1 upto nblec:
+    pair Coord[],latlon;string p_;
+    latlon=scantokens readfrom nomfichiermul;
+    p_=scantokens readfrom nomfichiermul;
+    if projection="mercator":
+      Coord[p]=mercatorc(ypart(latlon),xpart(latlon));
+    elseif projection="simple":
+      Coord[p]=simplec(ypart(latlon),xpart(latlon));
+    elseif projection="cylindrique":
+      Coord[p]=cylindriquec(ypart(latlon),xpart(latlon));
+    elseif projection="bonne":
+       Coord[p]=bonnec(ypart(latlon),xpart(latlon));
+    fi;
+    if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+      dotlabel.scantokens readfrom nomfichiermul(TEX(""&p_&""),Coord[p]);
+    fi;
+  endfor;
+  drawoptions();
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturelacsp=
+  nomfichiermul:=arborescence&"lacs.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    pair Coord[];
+    nbpts:=scantokens readfrom nomfichiermul;
+    numeric ll;
+    ll=0;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      if projection="mercator":
+       Coord[k]=mercatorc(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="simple":
+       Coord[k]=simplec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="cylindrique":
+       Coord[k]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="bonne":
+       Coord[k]=bonnec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="coniqueh":
+       if (xpart(latlon)>0) or (xpart(latlon)=0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),45);
+       fi;
+      elseif projection="coniqueb":
+       if (xpart(latlon)<0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+       fi;
+      fi;
+    endfor;
+    path lac;
+    if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+      ll:=nbpts
+    fi;
+    if ll>0:
+      lac=Coord[1]
+      for l=2 upto ll:
+       --Coord[l]
+      endfor;
+      fill lac--cycle withcolor cielfonce;
+      draw lac;
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturelacspsup=
+  nomfichiermul:=arborescence&"lacssup.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    pair Coord[];
+    nbpts:=scantokens readfrom nomfichiermul;
+    numeric ll;
+    ll=0;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      if projection="mercator":
+       Coord[k]=mercatorc(xpart(latlon),ypart(latlon));
+      elseif projection="simple":
+       Coord[k]=simplec(xpart(latlon),ypart(latlon));
+      elseif projection="cylindrique":
+       Coord[k]=cylindriquec(xpart(latlon),ypart(latlon));
+      elseif projection="bonne":
+       Coord[k]=bonnec(xpart(latlon),ypart(latlon));
+      elseif projection="coniqueh":
+       if (xpart(latlon)>0) or (xpart(latlon)=0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon),ypart(latlon),45);
+       fi;
+      elseif projection="coniqueb":
+       if (xpart(latlon)<0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon),ypart(latlon),-45);
+       fi;
+      fi;
+    endfor;
+    path lac;
+    if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+      ll:=nbpts
+    fi;
+    if ll>0:
+      lac=Coord[1]
+      for l=2 upto ll:
+       --Coord[l]
+      endfor;
+      fill lac--cycle withcolor cielfonce;
+      draw lac;
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturerivieresp=
+  nomfichiermul:=arborescence&"rivieres.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    pair Coord[];
+    nbpts:=scantokens readfrom nomfichiermul;
+    numeric ll;
+    ll:=0;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      if projection="mercator":
+       Coord[k]=mercatorc(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="simple":
+       Coord[k]=simplec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="cylindrique":
+       Coord[k]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="bonne":
+       Coord[k]=bonnec(xpart(latlon/60),ypart(latlon/60));
+      elseif projection="coniqueh":
+       if (xpart(latlon)>0) or (xpart(latlon)=0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),45);
+       fi;
+      elseif projection="coniqueb":
+       if (xpart(latlon)<0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+       fi;
+      fi;
+    endfor;
+    path riv;
+    if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+      ll:=nbpts;
+    fi;
+    if ll>0:
+      riv=Coord[1]
+      for l=2 upto ll:
+       --Coord[l]
+      endfor;
+      draw riv withcolor cielfonce;
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturerivierespsup=
+  nomfichiermul:=arborescence&"fleuveseurope.dat";
+  nblec:=scantokens readfrom nomfichiermul;
+  for p=1 upto nblec:
+    pair Coord[];
+    nbpts:=scantokens readfrom nomfichiermul;
+    numeric ll;
+    ll:=0;
+    for k=1 upto nbpts:
+      pair latlon;
+      latlon=scantokens readfrom nomfichiermul;
+      if projection="mercator":
+       Coord[k]=mercatorc(xpart(latlon),ypart(latlon));
+      elseif projection="simple":
+       Coord[k]=simplec(xpart(latlon),ypart(latlon));
+      elseif projection="cylindrique":
+       Coord[k]=cylindriquec(xpart(latlon),ypart(latlon));
+      elseif projection="bonne":
+       Coord[k]=bonnec(xpart(latlon),ypart(latlon));
+      elseif projection="coniqueh":
+       if (xpart(latlon)>0) or (xpart(latlon)=0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon),ypart(latlon),45);
+       fi;
+      elseif projection="coniqueb":
+       if (xpart(latlon)<0):
+         ll:=ll+1;
+         Coord[ll]=coniquec(xpart(latlon),ypart(latlon),-45);
+       fi;
+      fi;
+    endfor;
+    path riv;
+    if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+      ll:=nbpts;
+    fi;
+    if ll>0:
+      riv=Coord[1]
+      for l=2 upto ll:
+       --Coord[l]
+      endfor;
+      draw riv withcolor cielfonce;
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+enddef;
+
+vardef Lecturecapitalesp=
+  marque_p:="creux";
+  nomfichiermul:=arborescence&"capitales.dat";
+  nbcapitales:=scantokens readfrom nomfichiermul;
+  for p=1 upto nbcapitales:
+    pair Coord[],latlon;
+    string p_;
+    p_=scantokens readfrom nomfichiermul;
+    latlon=scantokens readfrom nomfichiermul;
+    ll:=0;
+    if projection="mercator":
+      Coord[p]=mercatorc(xpart(latlon/60),ypart(latlon/60));
+      ll:=1;
+    elseif projection="simple":
+      Coord[p]=simplec(xpart(latlon/60),ypart(latlon/60));
+      ll:=1;
+    elseif projection="cylindrique":
+      Coord[p]=cylindriquec(xpart(latlon/60),ypart(latlon/60));
+      ll:=1;
+    elseif projection="bonne":
+      Coord[p]=bonnec(xpart(latlon/60),ypart(latlon/60));
+      ll:=1;
+    elseif projection="coniqueh":
+      if (xpart(latlon)>0) or (xpart(latlon)=0):
+       ll:=1;
+       Coord[p]=coniquec(xpart(latlon/60),ypart(latlon/60),45);
+      fi;
+    elseif projection="coniqueb":
+      if (xpart(latlon)<0):
+       ll:=1;
+       Coord[p]=coniquec(xpart(latlon/60),ypart(latlon/60),-45);
+      fi;
+    fi;
+    if ll>0:
+      drawoptions(withcolor rouge);
+      pointe(Coord[p]);
+      drawoptions();
+      if (projection="mercator") or (projection="cylindrique") or (projection="simple") or (projection="bonne"):
+       label.top(p_,Coord[p]);
+      fi;
+    fi;
+  endfor;
+  closefrom nomfichiermul;
+  marque_p:="non";
+enddef;
+
+vardef MeridienParallele=
+  if (projection="mercator") or (projection="cylindrique") or (projection="simple"):
+    pair Coord[];
+    for k=-80 step 10 until 80:
+      for j=-180 step 10 until 180:
+       if projection="mercator":
+         Coord[100*k+j]=mercatorc(k,j);
+       elseif projection="simple":
+         Coord[k]=simplec(k,j);
+       elseif projection="cylindrique":
+         Coord[100*k+j]=cylindriquec(k,j);
+       fi;
+      endfor;
+    endfor;
+    for k=-80 step 10 until 80:
+      draw Coord[100*k-180]
+      for j=-170 step 10 until 180:
+       --Coord[100*k+j]
+      endfor;
+    endfor;
+    pair Coord[];
+    for k=-180 step 10 until 180:
+      for j=-80 step 10 until 80:
+       if projection="mercator":
+         Coord[0.001*k+10*j]=mercatorc(j,k);
+       elseif projection="simple":
+         Coord[k]=simplec(j,k);
+       elseif projection="cylindrique":
+         Coord[0.001*k+10*j]=cylindriquec(j,k);
+       fi;
+      endfor;
+    endfor;
+    for k=-180 step 10 until 180:
+      draw Coord[0.001*k-10*80]
+      for j=-70 step 10 until 80:
+       --Coord[0.001*k+10*j]
+      endfor;
+    endfor;
+  elseif projection="bonne":
+    pair Coord[][];
+    for k=-90 step 10 until 90:
+      for j=-180 step 10 until 180:
+       Coord[k][j]=bonnec(k,j);
+      endfor;
+    endfor;
+    for k=-90 step 10 until 90:
+      draw Coord[k][-180]
+      for j=-170 step 10 until 180:
+       --Coord[k][j]
+      endfor;
+    endfor;
+    pair Coord[][];
+    for k=-170 step 10 until 170:
+      for j=-90 step 10 until 90:
+       Coord[k][j]=bonnec(j,k);
+      endfor;
+    endfor;
+    for k=-170 step 10 until 170:
+      draw Coord[k][-90]
+      for j=-80 step 10 until 90:
+       ..Coord[k][j]
+      endfor;
+    endfor;
+  elseif projection="coniqueh":
+    pair Coord[];
+    for k=-180 step 10 until 180:
+      for j=0 step 10 until 90:
+       Coord[100*k+j]=coniquec(j,k,45);
+      endfor;
+    endfor;
+    for k=-180 step 10 until 180:
+      draw Coord[100*k]
+      for j=10 step 10 until 90:
+       --Coord[100*k+j]
+      endfor;
+    endfor;
+    pair Coord[];
+    for k=0 step 10 until 90:
+      for j=-180 step 10 until 180:
+       Coord[0.001*k+10*j]=coniquec(k,j,45);
+      endfor;
+    endfor;
+    for k=0 step 10 until 90:
+      draw Coord[0.001*k-10*180]
+      for j=-170 step 10 until 180:
+       --Coord[0.001*k+10*j]
+      endfor;
+    endfor;
+    clip currentpicture to coniquec(90,0,45)--(Coord[-10*180]
+      for j=-170 step 10 until 180:
+       --Coord[10*j]
+      endfor)--cycle;
+  elseif projection="coniqueb":
+    pair Coord[];
+    for k=-180 step 10 until 180:
+      for j=-90 step 10 until 0:
+       Coord[100*k+j]=coniquec(j,k,-45);
+      endfor;
+    endfor;
+    for k=-180 step 10 until 180:
+      draw Coord[100*k-90]
+      for j=-80 step 10 until 0:
+       --Coord[100*k+j]
+      endfor;
+    endfor;
+    pair Coord[];
+    for k=-90 step 10 until 0:
+      for j=-180 step 10 until 180:
+       Coord[0.001*k+10*j]=coniquec(k,j,-45);
+      endfor;
+    endfor;
+    for k=-90 step 10 until 0:
+      draw Coord[0.001*k-10*180]
+      for j=-170 step 10 until 180:
+       --Coord[0.001*k+10*j]
+      endfor;
+    endfor;
+    clip currentpicture to coniquec(-90,0,-45)--(Coord[-10*180]
+      for j=-170 step 10 until 180:
+       --Coord[10*j]
+      endfor)--cycle;
+  fi;
+enddef;
+
+boolean Echelle;
+Echelle=false;
+
+vardef echelle(expr Th,Ph,long)=%long en km.
+  Echelle:=true;
+  theta:=Th;
+  phi:=Ph;
+  Long:=long;
+  zoom(1);
+  numeric $;
+  if projection="bonne":
+    $=(cm*pi*cosd(Ph)*6340/36)/(long*abs(bonnec(Ph,Th)-bonnec(Ph,Th+5)));
+  elseif projection="mercator":
+    $=(cm*pi*cosd(Ph)*6340/36)/(long*abs(mercatorc(Ph,Th)-mercatorc(Ph,Th+5)));
+  elseif projection="simple":
+    $=(cm*pi*cosd(Ph)*6340/36)/(long*abs(simplec(Ph,Th)-simplec(Ph,Th+5)));
+  elseif projection="cylindrique":
+    $=(cm*pi*cosd(Ph)*6340/36)/(long*abs(cylindriquec(Ph,Th)-cylindriquec(Ph,Th+5)));
+  fi;
+  $
+enddef;
+
+boolean Amsud,Amnord,Amcentrale,Caraibes,Asie,Europe,Afrique,All;
+
+Amsud:=false;
+Amnord:=false;
+Amcentrale:=false;
+Caraibes:=false;
+Asie:=false;
+Europe:=false;
+Afrique:=false;
+All:=true;
+
+vardef Projection(expr TH,PH,Zoom)=
+  theta:=TH;
+  phi:=PH;
+  zoom(Zoom);
+  if projection="bonne":
+    fill (bonnec(-90,-180) for k=-85 step 5 until 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-85 step 5 until 90:..bonnec(k,180) endfor)..cycle withcolor ciel;
+  fi;
+  if All=true:
+    Lecture("Cameriquesud.dat");
+    Lecture("Ccaraibes.dat");
+    Lecture("Cameriquecentrale.dat");
+    Lecture("Cameriquenord.dat");
+    Lecture("Casia.dat");
+    Lecture("Ceurope.dat");
+    Lecture("Cafrique.dat");
+  else:
+    if Amsud=true:
+      Lecture("Cameriquesud.dat");
+    fi;
+    if Amnord=true:
+      Lecture("Cameriquenord.dat");
+    fi;
+    if Amcentrale=true:
+      Lecture("Cameriquecentrale.dat");
+    fi;
+    if Caraibes=true:
+      Lecture("Ccaraibes.dat");
+    fi;
+    if Asie=true:
+      if projection="bonne":
+       Lecture("Casie.dat");
+      else:
+       Lecture("Casia.dat");
+      fi;
+    fi;
+    if Europe=true:
+      Lecture("Ceurope.dat");
+    fi;
+    if Afrique=true:
+      Lecture("Cafrique.dat");
+    fi;
+  fi;
+  if lacs=true:
+    Lecturelacsp;
+    Lecturelacspsup;
+  fi;
+  Lectureilesp;
+  if capitales=true:
+    Lecturecapitalesp;
+  fi;
+  if fleuves=true:
+    Lecturerivieresp;
+    Lecturerivierespsup;
+  fi;
+  if maillage=true:
+    drawoptions(withcolor gris);
+    MeridienParallele
+    drawoptions();
+  fi;
+  if Echelle=true:
+    draw ((Xa,Ya)+u*(1,1))--((Xa,Ya)+u*(2,1));
+    labeloffset:=labeloffset*1.5;
+    label.top(btex 0 etex,(Xa,Ya)+u*(1,1));
+    label.top(TEX(""&decimal(Long)&"~km"),(Xa,Ya)+u*(2,1));
+    labeloffset:=labeloffset/1.5;
+    draw ((Xa,Ya)+u*(1,1.1))--((Xa,Ya)+u*(1,0.9));
+    draw (((Xa,Ya)+u*(1,1.1))--((Xa,Ya)+u*(1,0.9))) shifted(u*(1,0));
+  fi;
+enddef;
+
+vardef Simple(expr TH,PH,Zoom)=
+  projection:="simple";
+  theta:=TH;
+  phi:=PH;
+  zoom(Zoom);
+  Lecture("Cameriquesud.dat");
+  Lecture("Ccaraibes.dat");
+  Lecture("Cameriquecentrale.dat");
+  Lecture("Cameriquenord.dat");
+  Lecture("Casia.dat");
+  Lecture("Ceurope.dat");
+  Lecture("Cafrique.dat");
+  if lacs=true:
+    Lecturelacsp;
+    Lecturelacspsup;
+  fi;
+  Lectureilesp;
+  if capitales=true:
+    Lecturecapitalesp;
+  fi;
+  if fleuves=true:
+    Lecturerivieresp;
+   fi;
+  if maillage=true:
+    MeridienParallele
+  fi;
+enddef;
+
+vardef Mercator(expr TH,PH,Zoom)=
+  projection:="mercator";
+  theta:=TH;
+  phi:=PH;
+  zoom(Zoom);
+  Lecture("Cameriquesud.dat");
+  Lecture("Ccaraibes.dat");
+  Lecture("Cameriquecentrale.dat");
+  Lecture("Cameriquenord.dat");
+  Lecture("Casia.dat");
+  Lecture("Ceurope.dat");
+  Lecture("Cafrique.dat");
+  if lacs=true:
+    Lecturelacsp;
+    Lecturelacspsup;
+  fi;
+  Lectureilesp;
+  if capitales=true:
+    Lecturecapitalesp;
+  fi;
+  if fleuves=true:
+    Lecturerivieresp;
+  fi;
+  if maillage=true:
+    MeridienParallele
+  fi;
+enddef;
+
+vardef Cylindrique(expr TH,PH,Zoom)=
+  projection:="cylindrique";
+  theta:=TH;
+  phi:=PH;
+  zoom(Zoom);
+  Lecture("Cameriquesud.dat");
+  Lecture("Ccaraibes.dat");
+  Lecture("Cameriquecentrale.dat");
+  Lecture("Cameriquenord.dat");
+  Lecture("Casia.dat");
+  Lecture("Ceurope.dat");
+  Lecture("Cafrique.dat");
+  if lacs=true:
+    Lecturelacsp;
+    Lecturelacspsup;
+  fi;
+  Lectureilesp;
+  if capitales=true:
+    Lecturecapitalesp;
+  fi;
+  if fleuves=true:
+    Lecturerivieresp;
+  fi;
+  if maillage=true:
+    MeridienParallele
+  fi;
+enddef;
+
+vardef Bonne(expr TH,PH,Zoom)=
+  projection:="bonne";
+  theta:=TH;
+  phi:=PH;
+  zoom(Zoom);
+  fill (bonnec(-90,-180) for k=-85 step 5 until 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-85 step 5 until 90:..bonnec(k,180) endfor)..cycle withcolor ciel;
+  Lecture("Cameriquesud.dat");
+  Lecture("Ccaraibes.dat");
+  Lecture("Cameriquecentrale.dat");
+  Lecture("Cameriquenord.dat");
+  Lecture("Casie.dat");
+  Lecture("Ceurope.dat");
+  Lecture("Cafrique.dat");
+  if lacs=true:
+    Lecturelacsp;
+    Lecturelacspsup;
+  fi;
+  Lectureilesp;
+  if capitales=true:
+    Lecturecapitalesp;
+  fi;
+  if fleuves=true:
+    Lecturerivieresp;
+  fi;
+  if maillage=true:
+    drawoptions(withcolor gris);
+    MeridienParallele;
+    drawoptions();
+  fi;
+  draw (bonnec(-90,-180) for k=-85 step 5 until 90:..bonnec(k,-180) endfor)..reverse(bonnec(-90,180) for k=-85 step 5 until 90:..bonnec(k,180) endfor)..cycle;
+enddef;
+
+vardef ConiqueH=
+  projection:="coniqueh";
+  Lecture("Cameriquesud.dat");
+  Lecture("Ccaraibes.dat");
+  Lecture("Cameriquecentrale.dat");
+  Lecture("Cameriquenord.dat");
+  Lecture("Casie.dat");
+  Lecture("Ceurope.dat");
+  Lecture("Cafrique.dat");
+  if lacs=true:
+    Lecturelacsp;
+    Lecturelacspsup;
+  fi;
+  Lectureilesp;
+  if capitales=true:
+    Lecturecapitalesp;
+  fi;
+  if fleuves=true:
+    Lecturerivieresp;
+    Lecturerivierespsup;
+  fi;
+  drawoptions(withcolor gris);
+  MeridienParallele;
+  drawoptions();
+enddef;
+
+vardef ConiqueB=
+  projection:="coniqueb";
+  Lecture("Cameriquesud.dat");
+  Lecture("Ccaraibes.dat");
+  Lecture("Cameriquecentrale.dat");
+  Lecture("Cameriquenord.dat");
+  Lecture("Casie.dat");
+  Lecture("Ceurope.dat");
+  Lecture("Cafrique.dat");
+  if lacs=true:
+    Lecturelacsp;
+    Lecturelacspsup;
+  fi;
+  Lectureilesp;
+  if capitales=true:
+    Lecturecapitalesp;
+  fi;
+  if fleuves=true:
+    Lecturerivieresp;
+    Lecturerivierespsup;
+  fi;
+  drawoptions(withcolor gris);
+  MeridienParallele;
+  drawoptions();
+enddef;
+
+%%%%%%%
+
+rayon:=2;
+
+boolean fleuves,lacs,capitales,noncolore,maillage,volcans;
+fleuves=true;
+lacs=true;
+capitales=true;
+noncolore=false;
+maillage=false;
+volcans=false;
+
+vardef Mappemonde(expr longobs,latobs)=
+  projection:="non";
+  figureespace(-100u,-100u,100u,100u);
+  Initialisation(5,longobs,latobs,750);
+  numeric phim,phip,phii;%phi moins -- phi plus - phi intermédiaire
+  phim=Phi+arcsind(rayon/Rho)-90;
+  phip=Phi+90-arcsind(rayon/Rho);
+  color pte[];
+  pte1=rayon*(cosd(phim)*cosd(Theta),cosd(phim)*sind(Theta),sind(phim));
+  pte2=rayon*(cosd(phip)*cosd(Theta),cosd(phip)*sind(Theta),sind(phip));
+  pte3=1/2[pte1,pte2];
+  pte4-pte3=Normal((0,0,0),pte1,pte2);
+  if (Phi>90):
+    phip:=180-phip;
+    phii:=180-phim;
+    phim:=phip;
+    phip:=phii;
+  fi;
+  if (Phi<-90):
+    phip:=-180-phip;
+    phii:=-180-phim;
+    phim:=phip;
+    phip:=phii;
+  fi;
+  fill cercles(pte3,pte1,pte3,pte1,pte4) withcolor ciel;
+  Lecture("Cameriquesud.dat");
+  Lecture("Ccaraibes.dat");
+  Lecture("Cameriquecentrale.dat");
+  Lecture("Cameriquenord.dat");
+  Lecture("Casie.dat");
+  Lecture("Ceurope.dat");
+  Lecture("Cafrique.dat");
+  if volcans=true:
+    Lecturevolcans;
+  fi;
+  if lacs=true:
+    Lecturelacs;
+    Lecturelacssup;
+  fi;
+  Lectureiles;
+  if capitales=true:
+    Lecturecapitales;
+  fi;
+  if fleuves=true:
+    Lecturerivieres;
+    %Lecturerivieressup;
+  fi;
+  if maillage=true:
+    drawoptions(withcolor gris);
+    MaillageSphere;
+    drawoptions();
+  fi;
+  if maille=true:
+    Maille;
+  fi;
+  draw cercles(pte3,pte1,pte3,pte1,pte4);
+  finespace;
+enddef;
+
+endinput;
\ No newline at end of file

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.