\documentclass[12pt]{article} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage[frenchb]{babel} \usepackage[pdftex,a4paper,margin=1.5cm,nohead]{geometry} \usepackage{graphicx} \graphicspath{{figuresdoc/}} \usepackage[colorlinks=true]{hyperref} \usepackage{calc,url,subfigure,amsmath} \usepackage{fourier,mflogo,manfnt,pifont,textcomp} \input{christ5} \pagestyle{empty} \usepackage{tikz} \usetikzlibrary{shapes} \usetikzlibrary{topaths} \newsavebox{\dangerbox} \newlength{\marge}\setlength{\marge}{7.5mm} \newenvironment{Danger}{% \begin{lrbox}{\dangerbox} \begin{minipage}{\linewidth-\marge} } {% \end{minipage}% \end{lrbox} \tikzstyle{mybox} = [draw=blue!20, fill=red!20, very thick, rectangle, rounded corners, inner sep=10pt] \par \begin{tikzpicture} \node [mybox] (box) {% \begin{minipage}[t!]{\linewidth-\marge} \usebox{\dangerbox} \end{minipage} }; \end{tikzpicture} \par } \definecolor{LightRed}{rgb}{1,0.8,0.8} \title{\texttt{mp-geo}} \author{C.Poulain} \date{\today} \begin{document} \maketitle \begin{abstract} \texttt{mp-geo} est un paquet \MP\ permettant de représenter la Terre. Il est possible de la voir sous n'importe quel angle. La majorité des éléments présents réellement sont présents sur les représentations construites. Certaines projections planes sont également présentes. \end{abstract} \begin{figure}[ht] \centering \includegraphics[scale=0.8]{pagepresentation.png} \caption{Vue de l'Asie ($\theta=90$\degres; $\phi=20$\degres).} \label{Asie} \end{figure} \tableofcontents \newpage \begin{center} \begin{Danger} Avant toutes choses, ce package nécessite de modifier les limites de \MP. {\em A priori}\footnotemark, seule la variable \verb+main_memory_size+ est à changer.\footnotemark \end{Danger} \end{center} \footnotetext[1]{{\em A priori} car en cours d'élaboration, j'ai du également modifier \verb!buffer\_size! et \verb!path\_size!. J'ai même réussi à obtenir une erreur \texttt{independent variables : 33 182 318} qui indique que l'on dépasse les limites internes de \MP.} \footnotetext[2]{Sous un environnement Debian Etch et Lenny, la démarche est la suivante : \begin{itemize} \item Sous \texttt{root}, éditer le fichier \texttt{95NonPath.cnf} se trouvant dans le répertoire \verb!/etc/texmf/texmf.d/!; \item rechercher la variable \verb!main\_memory\_size! et la mettre à \nombre{40000000}; \item enfin toujours sous \texttt{root}, on effectue un rafraîchissement : \texttt{update-texmf} puis \texttt{fmtutil-sys --refresh}. \end{itemize} On doit être à l'aise avec cette valeur. ;-) } En effet, \texttt{mp-geo} est un package gourmand en ressources. \`A titre d'exemple, la création de l'image \ref{Asie} a duré environ 26 secondes\footnote{Les réponses données par la commande \texttt{time} sous Linux sont\\ \verb!real 0m26.795s!\\ \verb!user 0m26.590s!\\ \verb!sys 0m0.116s!\\Tous les temps mesurés dans cette documentation l'ont été sur cette machine.} sur un AMD64-2800+ équipé de 512 Mo de RAM. \section{Introduction} Ce package est encore {\em en développement}. Par comparaison avec le package PStricks \verb!pst-geo!, \verb!mp-geo! comporte, dans l'état actuel, beaucoup moins de points de tracés\footnote{Les données proviennent de la page \url{ftp://ftp.blm.gov/pub/gis/wdbprg.zip} dont l'utilisation n'est pas simple. En effet, les programmes disponibles dans cette archive ne fonctionnent que sous DOS ! Eh oui, vous avez bien lu. Cependant, heureux utilisateur de Linux, \verb!dosbox! est venu à mon secours pour obtenir toutes ces précieuses données.} (surtout pour les lacs et rivières), certaines projections ne sont pas présentes, la présence des villes n'est pas implantée (seule la présence des capitales est disponible),\ldots \par Cependant, il peut apporter des satisfactions à l'utilisateur de \MP\ qui, à ma connaissance, ne dispose pas d'un tel package. \\Mais, à terme, il est vrai qu'il faudrait réussir (et avoir le temps surtout) à implémenter certaines particularités de \verb!pst-geo!. Et en parlant de ce package, je tiens à remercier Manuel {\sc Luque} pour l'aide et les encouragements qu'il a pu m'apporter durant l'élaboration de \texttt{mp-geo}. \begin{figure}[ht] \centering \includegraphics[scale=0.7]{grandslacs.png} \caption{Les grands lacs d'Amérique du Nord ($\theta=-105$\degres; $\phi=45$\degres)} \end{figure} \section{Fonctionnement} \subsection{Généralités et options} Ce package est {\em indépendant}, bien qu'il reprenne bon nombre d'éléments de \verb!geometriesyr16.mp!\footnote{Un autre de mes packages \MP\ personnels, dédié, quant à lui, à la géométrie.} et plus particulièrement du package dédié à la géométrie spatiale \verb!donymodule.mp!. L'observateur est alors représenté par deux angles (en degrés) : \begin{itemize} \item un angle $\theta$ qui représente la longitude de l'observateur; \item un angle $\phi$ qui représente la latitude de l'observateur. \end{itemize} \par Les données initiales étaient dans un seul fichier. Elles ont été fragmentées en fichiers individuels \verb!.dat! afin de pouvoir les retrouver facilement et d'y avoir un accès plus facile. On dispose ainsi d'un fichier par pays ainsi que d'un fichier par continent (cela donne une meilleure visibilité au code source du package). \\On dispose d'un seul fichier pour toutes les îles\footnote{Ceci pose un problème d'accès direct à des pays comme Cuba ou l'Australie. Un autre souci à régler\ldots}. Enfin les lacs sont regroupés dans un seul fichier ainsi que pour les fleuves et rivières et les volcans\footnote{Ce sont les 813 volcans qui ont eu une éruption ces 10\,000 dernières années.}. \\\`A noter que les lacs, les fleuves, les capitales et les volcans sont {\em optionnels}; leur affichage est fait par défaut sauf pour les capitales et volcans; mais l'utilisateur peut en décider autrement en changeant les paramètres \verb!lacs!, \verb!fleuves!, \verb!capitales! et \verb!volcans! à \verb!false!. Ceci peut être non négligeable lors de la mesure du temps de compilation. Par exemple, le temps de compilation de la figure \ding{172} a été de 37~s alors que pour la figure \ding{173}, la compilation a duré 27~s. \begin{figure}[ht] \centering \subfigure[Figure \ding{172}]{\includegraphics[scale=0.7]{payscomplets.png}}\hfill\subfigure[Figure \ding{173}]{\includegraphics[scale=0.7]{paysnus.png}} \end{figure} Une autre option est celle de colorer uniformément ou pas les pays. Par défaut, cette option \verb!noncolore! est positionnée à \verb!false!\footnote{Le théorème des quatre couleurs n'est pas implanté.}. Si l'on modifie sa valeur, on obtient une image telle que la figure \ref{unicolore}. \begin{figure}[ht] \centering \includegraphics[scale=0.7]{mondenoncolore.png} \caption{Coloration uniforme ($\theta=105$\degres; $\phi=30$\degres).} \label{unicolore} \end{figure} \par Enfin, on dispose de l'option \verb!maillage! (positionnée par défaut à \verb!false!) qui permet l'affichage des méridiens et parallèles (Figure \ref{meridien}). En latitude, le pas est de 10\degres\ alors qu'en longitude, il est de 5\degres. \begin{figure}[ht] \centering \includegraphics[scale=0.7]{oceaniemeridien.png} \caption{Méridiens et parallèles ($\theta=120$\degres; $\phi=-20$\degres).} \label{meridien} \end{figure} \par Les données ont conservé leur présentation d'origine : elles sont sous la forme de points repérés en coordonnées sphériques par la latitude et la longitude; l'unité choisie étant la minute pour davantage de précision.\\Tous les fichiers sont regroupés dans un sous-répertoire \verb!data!. Par défaut, \verb!arborescence! (qui est un type \verb!string! de \MP) est réglé sur ce dossier\footnote{Pour un changement, ne pas oublier le \verb!/! au bout du chemin :\\ \verb! arborescence:="../data/"; ! }. \subsection{Méthodes pour la représentation spatiale} Pour la représentation, le principe général est le suivant : \begin{itemize} \item on lit les fichiers un à un; \item pour chaque point lu, on teste s'il s'agit d'un point visible ou pas. S'il est visible, on l'affiche sinon on passe au suivant. \end{itemize} Le nombre de points étant assez conséquent, il faut impérativement le réduire. Pour cela, en fonction de la position de l'observateur, on détermine les latitudes minimale et maximale que l'observateur peut voir. \begin{figure}[ht] \centering \includegraphics{latminmax-1.pdf} \caption{Détermination des latitudes minimales et maximales de vision.} \end{figure} \par On a alors un premier test : {\em si la l'attitude du point lu est comprise entre les valeurs \ding{172} et \ding{173} alors on continue; sinon on passe au suivant.} \\Le deuxième test est, quant à lui, sur la visibilité (ou l'invisibilité) du point. Pour ce faire, on teste le produit scalaire des vecteurs $\vecteur{HP}$ et $\vecteur{HA}$ ($A$ étant la position de l'observateur). {\em S'il est positif alors le point est vu, s'il est négatif alors le point est invisible.} \begin{figure}[ht] \centering \includegraphics{vuoupasvu-1.pdf} \caption{Vu ou pas vu ?} \end{figure} \par La suite fût plus laborieuse : le remplissage des différents pays. Une première idée : \begin{itemize} \item tester chaque point des frontières; \item si le point est vu, on le garde sinon on passe au suivant. \end{itemize} Je peux vous dire que certains pays deviennent alors très anguleux ! \par La deuxième idée, qui est celle retenue, n'est pas très orthodoxe, je dois bien le dire ! Mais elle fonctionne :) \begin{itemize} \item tester chaque point des frontières; \item si le point est vu, on le garde sinon on le remplace par {\em un point dont les coordonnées cartésiennes sont les doubles de celle du point étudié.} \end{itemize} Pourquoi ? Afin de faire sortir tous les points invisibles du cercle de vision. Ainsi, après le remplissage, on {\em clippe} le tout dans le cercle de vision. Et le tour est joué ! \begin{figure}[ht] \centering \includegraphics[scale=0.3]{exemplemanuel-1.pdf} \caption{Méthode pour remplir correctement les pays.} \end{figure} \subsection{Dernières remarques} \begin{center} \begin{Danger} Cette section n'est valable que pour la représentation spatiale. \end{Danger} \end{center} On peut régler la distance au centre de la sphère et la distance à l'écran en modifiant les valeurs de la macro \verb!Initialisation!. Cependant, je crois que les valeurs par défaut (respectivement égales à 5 et 750) sont correctes pour obtenir des images satisfaisantes. Ce n'est qu'une opinion personnelle :) Une explication un peu plus persuasive : \MP\ n'est pas le meilleur lorsqu'il s'agit de faire des calculs; en changeant ces valeurs, le résultat peut alors devenir très déroutant\ldots \\On peut également régler le rayon de la sphère terrestre en changeant le paramètre \verb!rayon! qui doit rester inférieur à la distance au centre de la sphère. \par Voici pour finir une dernière image et son code source : \begin{verbatim} input mp-geo; fleuves:=false; lacs:=false; capitales:=false; Mappemonde(0,-90); end \end{verbatim} \begin{figure}[ht] \centering \includegraphics[scale=0.7]{polesud} \caption{L'immensité du pôle sud ($\theta=0$; $\phi=90$\degres).} \end{figure} Ooops ! une petite dernière\ldots\footnote{Ne cherchez pas après les fonctionnalités pour la transparence, elles ne sont pas implémentées dans le package; elles ne sont valables que dans des cas particuliers\ldots} \begin{figure}[ht] \centering \includegraphics{globetransparent.png} \caption{Un peu de transparence.} \end{figure} \section{Projections planes} Ces projections permettent de représenter la Terre sur une surface plane. Quelques projections sont mises en places afin d'avoir la possibilité de produire des cartes. \par En plus des options \verb!lacs!, \verb!fleuves!, \verb!capitales!, \verb!noncolore! et \verb!maillage!, on dispose de l'option \verb!projection!\footnote{Qui est un type \verb!string! de \MP} qui peut prendre les valeurs \verb!mercator!, \verb!coniqueh!, \verb!coniqueb!, \verb!cylindrique!, \verb!simple!\footnote{Si un point de la sphère terrestre est représentée par ses coordonnées géographiques $(\phi;\lambda)$ en degrés alors les formules de projection sont \[\left\{\begin{array}{l} x=\lambda-\lambda_0\\ y=\phi-\phi_0\\ \end{array} \right.\] où $(\phi_0;\lambda_0)$ sont les coordonnées géographiques du centre de la future projection.} et \verb!bonne! (la valeur par défaut étant \verb!non!). La syntaxe utilisée sera donc \begin{verbatim} projection:="mercator" \end{verbatim} Cependant, cette option est automatiquement modifiée par l'appel de la macro traçant la projection plane. Il ne faudra pas oublier de la repositionner à \verb!non! si l'on veut faire plusieurs figures différentes au sein d'un même fichier \MP, par exemple une mappemonde et une projection plane. \subsection{Projection Mercator} Plutôt qu'un long discours, voici le code\footnote{On a repris la syntaxe de \verb!geometriesyr16!; \verb!figure! créant un cadre enfermant la figure obtenue.} permettant d'appeller une représentation plane selon la projection Mercator\footnote{Si un point de la sphère terrestre est représentée par ses coordonnées géographiques $(\phi;\lambda)$ en degrés alors les formules de projection sont \[\left\{\begin{array}{l} x=\lambda-\lambda_0\\ \\ y=\ln\left(\tan\left(45+\dfrac\phi2\right)\right)-\ln\left(\tan\left(45+\dfrac{\phi_0}2\right)\right)\\ \end{array} \right.\] où $(\phi_0;\lambda_0)$ sont les coordonnées géographiques du centre de la future projection.} centrée sur le point de coordonnées (3\degres;48\degres)\footnote{On reconnaît les coordonnées sphériques de notre belle capitale Paris.} avec un zoom égal à 30 (le temps de compilation est de 27 secondes\footnote{Il faudrait implémenter une option permettant de choisir tel ou tel continent\ldots}). \begin{verbatim} input mp-geo; figure(-10u,-10u,10u,10u); Mercator(3,48,30); fin; end \end{verbatim} \begin{figure}[h] \centering \includegraphics{Mercator.png} \caption{Carte de France selon une projection Mercator.} \end{figure} Une possibilité est offerte d'afficher certaines villes {\em françaises}\footnote{En espérant pouvoir le faire pour un maximum de pays et que ce soit disponible également pour la représentation spatiale.} en ajoutant \begin{verbatim} Lecturevillesp("France"); \end{verbatim} \subsection{Projection cylindrique} Avec le code \begin{verbatim} input mp-geo; maillage:=true; figure(-10u,-10u,10u,10u); Cylindrique(3,48,15); Lecturevillesp("France"); fin; end \end{verbatim} on obtient la carte en projection cylindrique\footnote{Pour un point de la sphère terrestre de coordonnées $(\phi;\lambda)$, les formules de projection sont \[\left\{\begin{array}{l} x=\lambda-\lambda_0\\ \\ y=\sin\phi-\sin\phi_0\\ \end{array} \right. \] où $(\phi_0;\lambda_0)$ sont les coordonnées géographiques du centre de la future projection.}. \begin{figure}[ht] \centering \includegraphics{Cylindrique.png} \caption{Carte de France selon la projection cylindrique.} \end{figure} \subsection{Projection de Bonne} Cette projection\footnote{Pour un point de la sphère terrestre de coordonnées $(\phi;\lambda)$, les formules de projection sont \[\left\{\begin{array}{l} x=\rho\sin E\\ \\ y=\textrm{cotan}\phi_0-\rho\cos E\\ \end{array} \right. \] avec $\rho=\textrm{cotan}\phi_0+\phi_0-\phi$ et $E=(\lambda-\lambda_0)*cos(\phi)/\rho$ où $(\phi_0;\lambda_0)$ sont les coordonnées du centre de la future projection. Attention, dans ces formules, tous les angles doivent être en radians} est particulière, elle est en forme de \og coeur\fg. Ce qui donne \begin{figure}[ht] \centering \includegraphics{Bonne.png} \caption{Projection de Bonne} \end{figure} avec le code source (pour 28 secondes de compilation) \begin{verbatim} input mp-geo; maillage:=true; capitales:=false; figure(-10u,-15u,10u,10u); Bonne(0,40,1); fin; end \end{verbatim} dans lequel \verb!0,40! représentent $(\lambda_0;\phi_0)$, 1 étant le facteur de zoom. \subsection{Nouvelle méthode} Avec le développement de ces projections, on s'aperçoit qu'elles ont toutes le même fonctionnement en commun. Aussi, depuis la version \texttt{0.60}, une autre méthode\footnote{Ne vous inquiétez pas : pour des soucis de compatibilité, les autres moyens de projection ont été conservés.} a été implantée. \par En effet, il me semble plus simple de procéder de la manière suivante : \begin{verbatim} input mp-geo; figure(-10u,-10u,10u,10.5u); projection:="bonne"; Projection(0,41,50); Lecturevillesp("France"); fin; end \end{verbatim} Ceci afin d'alléger un peu les commandes à connaître. Un autre avantage est de choisir simplement le mode de projection choisi. \par Pour la création des cartes, il fallait, jusqu'à cette version \texttt{0.60}, parcourir tous les points de la planète pour ne garder que ceux intéressants.\\Dorénavant, les paramètres \verb!Amnord!, \verb!Amsud!, \verb!Amcentrale!, \verb!Caraibes!, \verb!Asie!, \verb!Europe!, \verb!Afrique! et \verb!All! font leurs apparitions. Par défaut, ils sont tous positionnés à \verb!false! sauf \verb!All!. Autrement, le comportement par défaut est celui qui prend le plus de temps ! Aussi, on prendra soin de changer certains de ces positionnements pour obtenir des temps de compilation moins grands. \subsection{Cartes et échelles} Pour pouvoir lire correctement une carte obtenue par projection\footnote{Uniquement les projections déjà vues, c'est-à-dire \verb!simple!, \verb!cylindrique!, \verb!mercator! et \verb!bonne!}, il m'a semblé nécessaire d'y adjoindre une échelle. On ne peut avoir qu'une échelle moyenne; sinon il faudrait déterminer l'échelle de chaque parallèle ou méridien. \par Aussi, la méthode choisie est la suivante : \begin{itemize} \item Supposons que la projection soit centrée sur le point $(\lambda_0;\theta_0)$; on détermine alors la longueur {\em réelle} de l'arc de parallèle situé entre les points $(\lambda_0;\theta_0)$ et $(\lambda_0;\theta_0+5\mbox{\degres})$; \item on détermine ensuite cette même longueur mais {\em sur le dessin}; \item on termine par une simple relation de proportionnalité. \end{itemize} On utilisera donc la syntaxe \verb!echelle(2,46.5,50)! pour un calcul d'échelle de 1~cm pour 50~km pour une projection centrée sur le point $(46,5;2)$. \begin{verbatim} input mp-geo; All:=false; Europe:=true; figure(-10u,-10u,10u,10.5u); projection:="bonne"; Projection(2,46.5,echelle(2,46.5,50)); fin; end \end{verbatim} pour obtenir la figure \begin{figure}[ht] \centering \includegraphics{projectionbonne} \caption{Projection de Bonne -- Centrée sur Paris -- \'Echelle $1\,:\,500\,000$.} \end{figure} \subsection{Projection conique} Cette projection est un peu spéciale, je n'ai pas réussi à l'inclure avec les autres. La projection conique disponible est la {\em projection conique équidistante tangente}\footnote{D'après \url{http://thierry.hatt.gps.free.fr/projections/images-proj/coniq-equid-lambert.htm}. Pour un point de la sphère terrestre de coordonnées $(\phi;\lambda)$, les formules de projection sont \[\left\{\begin{array}{l} x=\dfrac{\cos\phi\sin(\lambda\sin(45))}{\sin{45}\cos(\phi-45)}\\ \\ y=\dfrac{\cos\phi\cos(\lambda\sin(45))}{\sin{45}\cos(\phi-45)}\\ \end{array} \right. \] }; le parallèle de contact étant soit le 45\degres\ Nord soit le 45\degres\ Sud. On choisit l'hémisphère à représenter par le code source \begin{verbatim} input mp-geo; figure(-20u,-20u,20u,20u); ConiqueH; fin; end \end{verbatim} pour obtenir \begin{figure}[ht] \centering \includegraphics{coniqueHN.png} \caption{Projection conique - Hémisphère nord.} \end{figure} ou alors \begin{verbatim} input mp-geo; figure(-20u,-20u,20u,20u); ConiqueB; fin; end \end{verbatim} pour voir l'hémisphère sud. \begin{figure}[ht] \centering \includegraphics{coniqueBS.png} \caption{Projection conique - Hémisphère sud.} \end{figure} \par\`A noter que cette fois-ci, le maillage n'est pas facultatif\footnote{On pourrait peut-être ajouter des graduations}. \newpage \section{Historique} \begin{description} \item[24/03/2008] Version \texttt{0.60} : Regroupement des projections. Ajout d'une échelle sur les cartes obtenues par projection. Ajout des grands fleuves (ou rivières) européens. \item[14/03/2008] Version \texttt{0.58} : Ajout de fleuves et lacs supplémentaires. \item[14/03/2008] Version \texttt{0.56} : Ajout des volcans :). \item[18/02/2008] Version \texttt{0.55} : Ajout des projections de Bonne. \item[18/02/2008] Version \texttt{0.54} : Modification mineure dans la lecture des fichiers de données. \item[15/02/2008] Version \texttt{0.53} : Ajout d'une troisième projection : la projection {\em simple}. \item[15/02/2008] Version \texttt{0.52} : Ajout d'une troisième projection : la projection {\em cylindrique}. \item[14/02/2008] Version \texttt{0.51} : Ajout d'une deuxième projection : une projection {\em conique}. \item[14/02/2008] Version \texttt{0.5} : Ajout d'une première projection : la projection {\em Mercator}. \item[12/02/2008] Version \texttt{0.46} : Possibilité d'affichage d'un point particulier sur la surface de la Terre (avec son méridien et son parallèle tracés). \item[12/02/2008] Version \texttt{0.45} : Choix possible de l'affichage ou non des méridiens et parallèles. \item[11/02/2008] Version \texttt{0.4} : Rendu indépendant de \verb!geometriesyr16.mp!. \item[08/02/2008] Version \texttt{0.35} : Amélioration de la méthode de tracé. \item[08/02/2008] Version \texttt{0.32} : Choix possible du chemin de lecture des fichiers \verb!.dat!. \item[08/02/2008] Version \texttt{0.31} : Choix possible de la couleur de remplissage dans le cas d'un remplissage uniforme. \item[07/02/2008] Version \texttt{0.3} : Choix possibles d'un affichage ou non des capitales, fleuves et lacs. Choix possible d'un remplissage uniforme ou coloré. \item[07/02/2008] Version \texttt{0.2} : Création d'un unique fichier de données par continent. \item[07/02/2008] Version \texttt{0.11} : Ajout du positionnement des capitales. \item[06/02/2008] Version \texttt{0.1}. \end{description} \newpage \listoffigures \end{document}