%% %% This is file `pst-map2d.tex', %% %% IMPORTANT NOTICE: %% %% Package `pst-map2d.tex' %% %% Manuel Luque (France) %% Giuseppe Matarazzo (Italy) %% Herbert Voss (Germany) %% %% May 09, 2004 %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: %% `pst-map2d' is a PSTricks package to create geographical objects %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\fileversion{1.05} \def\filedate{2004/05/10} \message{`PST-map2d' v\fileversion, \filedate\space (ML/GM/HV)} \csname PSTMaptwod\endcsname \let\PSTMaptwodLoaded\endinput % Require PSTricks \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi \ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi % David Carlisle interface to the `keyval' package. \input pst-key.tex % \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax \SpecialCoor % \define@key{psset}{path}{\edef\psk@WorldMap@Path{#1}} % chemin des données \setkeys{psset}{path=data} %\openin1=chemin.txt %\read1 to \psk@WorldMap@Path % \define@key{psset}{level}{\edef\psk@WorldMap@level{#1}} \setkeys{psset}{level=1} % \define@key{psset}{type}{\edef\psk@WorldMap@type{#1}} \setkeys{psset}{type=1} % type=1 ==> Mercator % type=2 ==> Lambert % type=3 ==> simple % type=4 ==> Sanson-Flamsteed % type=5 ==> cylindrical % type=6 ==> Babinet % type=7 ==> Collignon % type=8 ==> Bonne \define@key{psset}{n}{\edef\psk@WorldMap@n{#1}} \setkeys{psset}{n=1.77245} % sqrt(pi) % pour Collignon % \define@key{psset}{limiteL}{\edef\psk@WorldMap@limiteL{#1}} \setkeys{psset}{limiteL=180} % longitude limite % \define@key{psset}{latitude0}{\edef\psk@WorldMap@latitudeO{#1}} \setkeys{psset}{latitude0=45} % pour Bonne latitude 0 % \define@key{psset}{longitude0}{\edef\psk@WorldMap@longitudeO{#1}} \setkeys{psset}{longitude0=0} % pour Bonne longitude 0 % \define@key{psset}{increment}{\edef\psk@WorldMap@increment{#1}} \setkeys{psset}{increment=10} % \define@key{psset}{MapFillColor}{\edef\psk@WorldMap@Fillcolor{#1}} % couleur des continents \setkeys{psset}{MapFillColor= 0.99 0.95 0.7 } % \newif\ifPst@WorldMap@capitals \define@key{psset}{capital}[false]{\@nameuse{Pst@WorldMap@capitals#1}} \setkeys{psset}{capital=false} % \newif\ifPst@WorldMap@city \define@key{psset}{city}[false]{\@nameuse{Pst@WorldMap@city#1}} \setkeys{psset}{city=false} % \newif\ifPst@WorldMap@Rivers \define@key{psset}{rivers}[true]{\@nameuse{Pst@WorldMap@Rivers#1}} \setkeys{psset}{rivers=true} % \newif\ifPst@WorldMap@Borders \define@key{psset}{borders}[true]{\@nameuse{Pst@WorldMap@Borders#1}} \setkeys{psset}{borders=false} % \newif\ifPst@WorldMap@maillage \define@key{psset}{maillage}[true]{\@nameuse{Pst@WorldMap@maillage#1}} \setkeys{psset}{maillage=true} % \newif\ifPst@WorldMap@Fill \define@key{psset}{Fill}[true]{\@nameuse{Pst@WorldMap@Fill#1}} \setkeys{psset}{Fill=true} % \newif\ifPst@WorldMap@USA \define@key{psset}{USA}[false]{\@nameuse{Pst@WorldMap@USA#1}} \setkeys{psset}{USA=false} % \newif\ifPst@WorldMap@AUS \define@key{psset}{AUS}[false]{\@nameuse{Pst@WorldMap@AUS#1}} \setkeys{psset}{AUS=false} % \newif\ifPst@WorldMap@MEX \define@key{psset}{MEX}[false]{\@nameuse{Pst@WorldMap@MEX#1}} \setkeys{psset}{MEX=false} % \def\VariablesMap{% /Coeff_mercatorY {2 div 45 add dup sin exch cos div ln 57.2958 mul} def % Mercator /Coeff_simpleY {1 mul} def % simple /Coeff_lambertY {sin 57.2958 mul} def % Lambert /Coeff_sanson_flamsteedY {1 mul} def % Sanson_Flamstead /Coeff_cylindricalY { dup sin exch cos div 57.2958 mul} def % Cylindrical /Coeff_babinetY { sin 2 sqrt mul 57.2958 mul} def % Babinet /n \psk@WorldMap@n\space def /Coeff_collignonY { 0 ge { 1 2 sqrt 90 Y sub 2 div sin mul sub 57.2958 mul n mul} { 1 2 sqrt 90 Y add 2 div sin mul sub 57.2958 mul n mul neg} ifelse }def % Collignon /Coeff_BonneY {pop /RHO l0 dup cos exch sin div Y neg l0 add 57.2958 div add def /Theta Y cos X L0 sub mul RHO div def Theta cos RHO mul neg 57.2958 mul}def % Bonne % /Coeff_mercatorX {1 mul} def % Mercator /Coeff_simpleX {1 mul} def % simple /Coeff_lambertX {1 mul} def % Lambert /Coeff_sanson_flamsteedX {Y cos mul} def % Sanson_Flamstead /Coeff_cylindricalX { 1 mul } def % Cylindrical /Coeff_babinetX { 2 mul 2 sqrt mul 3.1415926 div Y cos mul} def % Babinet /Coeff_collignonX { 2 mul 2 sqrt mul 90 Y abs sub 2 div sin mul n div} def % Collignon /l0 \psk@WorldMap@latitudeO\space def /L0 \psk@WorldMap@longitudeO\space def /Coeff_BonneX { pop /RHO l0 dup cos exch sin div Y neg l0 add 57.2958 div add def /Theta Y cos X L0 sub mul RHO div def Theta sin RHO mul 57.2958 mul } def % Bonne \ifcase\psk@WorldMap@type\or /CoeffY {Coeff_mercatorY} def /CoeffX {Coeff_mercatorX} def /StartY -85 def \or /CoeffY {Coeff_simpleY} def /CoeffX {Coeff_simpleX} def /StartY -90 def \or /CoeffY {Coeff_lambertY} def /CoeffX {Coeff_lambertX} def /StartY -90 def \or /CoeffY {Coeff_sanson_flamsteedY} def /CoeffX {Coeff_sanson_flamsteedX} def /StartY -90 def \or /CoeffY {Coeff_cylindricalY} def /CoeffX {Coeff_cylindricalX} def /StartY -85 def \or /CoeffY {Coeff_babinetY} def /CoeffX {Coeff_babinetX} def /StartY -90 def \or /CoeffY {Coeff_collignonY} def /CoeffX {Coeff_collignonX} def /StartY -90 def \or /CoeffY {Coeff_BonneY} def /CoeffX {Coeff_BonneX} def /StartY -90 def \fi% /step \psk@WorldMap@level\space def % hv 2004-05-04 } \newcount\TypeProjection \def\WorldMap{\pst@object{WorldMap}} \def\WorldMap@i{\@ifnextchar[{\WorldMap@do}{\WorldMap@do[]}} \def\WorldMap@do[#1]{{% \setkeys{psset}{#1}% \begin@ClosedObj \addto@pscode{% \VariablesMap (\psk@WorldMap@Path/river.dat) run (\psk@WorldMap@Path/pcoast.dat) run (\psk@WorldMap@Path/pisland.dat) run (\psk@WorldMap@Path/pborder.dat) run (\psk@WorldMap@Path/plake.dat) run (\psk@WorldMap@Path/usa.dat) run (\psk@WorldMap@Path/aus.dat) run (\psk@WorldMap@Path/mex.dat) run 1 setlinejoin 0 0 translate /xunit {\pst@number\psxunit\space mul 20 div }def /yunit {\pst@number\psyunit\space mul 20 div }def /increment \psk@WorldMap@increment\space def /limiteLongitude \psk@WorldMap@limiteL\space def % \ifPst@WorldMap@Fill gsave newpath /X limiteLongitude neg def /Y StartY def X CoeffX xunit Y CoeffY yunit moveto StartY 2 StartY neg {% /Y exch def X CoeffX xunit Y CoeffY yunit lineto } for /X limiteLongitude def StartY neg -2 StartY { /Y exch def X CoeffX xunit Y CoeffY yunit lineto } for closepath /Color {0.5 0.8 0.8} def Color setrgbcolor fill grestore \fi /CalculsPoints { /region exch def newpath /nbr region length def % nombre de régions region 0 get aload pop /Y exch def /X exch def X CoeffX xunit Y CoeffY yunit moveto /ncount 0 def % hv 2004-05-04 0 1 nbr 1 sub { /ncount ncount 1 add def % hv 2004-05-04 region exch get aload pop ncount step mod 0 eq nbr ncount sub 0 lt or { % hv 2004-05-04 /Y exch def /X exch def X CoeffX xunit Y CoeffY yunit lineto }{ pop pop } ifelse % hv 2004-05-04 } for } def % /Draw { { CalculsPoints \ifPst@WorldMap@Fill closepath % Colour in earth's surfaces gsave Color setrgbcolor fill grestore \fi stroke } forall } def \ifPst@WorldMap@Borders border \else coasts \fi %/Color {0.5 0.8 0.5} def /Color {\psk@WorldMap@Fillcolor} def Draw islands Draw \ifPst@WorldMap@MEX mexico Draw \fi \ifPst@WorldMap@USA usa Draw \fi \ifPst@WorldMap@AUS australia Draw \fi /Color {0.5 0.8 0.8} def lake Draw % les rivières \ifPst@WorldMap@Rivers /DrawRivers { { CalculsPoints 0 0 1 setrgbcolor stroke } forall }def river DrawRivers \fi % \ifPst@WorldMap@maillage % meridiens limiteLongitude neg increment limiteLongitude {% for X /X exch def newpath /Y StartY def X CoeffX xunit StartY CoeffY yunit moveto StartY increment 10 div StartY neg { % for Y /Y exch def X CoeffX xunit Y CoeffY yunit lineto } for gsave % 11 janvier 2004 X 0 eq {1 0 0 setrgbcolor}{0.2 setgray} ifelse % 0.25 setlinewidth stroke grestore } for % parallèles StartY increment StartY neg {% for Y /Y exch def newpath /X limiteLongitude neg def X CoeffX xunit Y CoeffY yunit moveto limiteLongitude neg increment 10 div limiteLongitude { % for X /X exch def X CoeffX xunit Y CoeffY yunit lineto } for % 11 janvier 2004 Y 0 eq {1 0 0 setrgbcolor}{0.2 setgray} ifelse % 0.25 setlinewidth stroke } for \fi /DrawCitys { /CITY exch def /Rayon exch def /nbr CITY length def % nombre de villes 0 1 nbr 1 sub { /compteur exch def CITY compteur get aload pop /X exch def /Y exch def gsave 1 0 0 setrgbcolor newpath X CoeffX xunit Y CoeffY yunit Rayon 0 360 arc closepath fill grestore } for } def \ifPst@WorldMap@city % les capitales (\psk@WorldMap@Path/c-cap.dat) run 1.5 % rayon du point citycapitals DrawCitys % les autres villes (\psk@WorldMap@Path/c-sub.dat) run 0.5 % rayon du point CitySub DrawCitys \fi \ifPst@WorldMap@capitals % les capitales (\psk@WorldMap@Path/c-cap.dat) run 1.5 citycapitals DrawCitys \fi }% \end@ClosedObj }} % \def\pnodeMap(#1,#2)#3{% hv 2004-05-09 \pst@killglue \pnode(! \VariablesMap /Y #2 def /X #1 def X CoeffX 20 div Y CoeffY 20 div){#3}% } % %------------------- hv 2004-05-08 ---------------------- \def\psNodeLabelStyle{} \define@key{psset}{mapCountry}{\edef\psk@WorldMap@mapCountry{#1}} \setkeys{psset}{mapCountry=all} \define@key{psset}{nodeWidth}{\edef\psk@WorldMap@nodeWidth{#1}} \setkeys{psset}{nodeWidth=1mm} \newpsstyle{psNodeMapStyle}{fillstyle=solid,fillcolor=red} % \def\mapput{\@ifnextchar[{\mapput@i}{\mapput@i[90]}} \def\mapput@i[#1](#2,#3){\@ifnextchar[{\mapput@iii[#1](#2,#3)}{\mapput@ii[#1](#2,#3)}} \def\mapput@ii[#1](#2,#3)#4{\mapput@iii[#1](#2,#3)[#4]{#4}} \def\mapput@iii[#1](#2,#3)[#4]#5{% \@ifnextchar[{\mapput@iv[#1](#2,#3)[#4]#5}{\mapput@iv[#1](#2,#3)[#4]#5[\@empty]}} \def\mapput@iv[#1](#2,#3)[#4]#5[#6]{{% % [angle](longitude,lattitude)[node name]{node label}[country] \def\pst@tempb{all} \ifx\pst@tempb\psk@WorldMap@mapCountry \mapput@v[#1](#2,#3)[#4]{#5} \else \def\pst@tempb{#6} % \typeout{Compare \pst@tempb{} with \psk@WorldMap@mapCountry} \ifx\pst@tempb\psk@WorldMap@mapCountry \mapput@v[#1](#2,#3)[#4]{#5} \fi% \fi% }} \def\mapput@v[#1](#2,#3)[#4]#5{{% \pnodeMap(#2,#3){#4} % \typeout{Node: #4} \pst@dima=\psk@WorldMap@nodeWidth \pscircle[style=psNodeMapStyle](#4){\pst@dima} \pscircle*(#4){0.5\pst@dima} \uput{1.2\pst@dima}[#1](#4){{\psNodeLabelStyle #5}}% }} %------------------- hv 2004-05-08 ---------------------- % \catcode`\@=\PstAtCode\relax \endinput