File: //usr/share/texmf/tex/generic/pstricks/pst-map2d.tex
%%
%% This is file `pst-map2d.tex',
%%
%% IMPORTANT NOTICE:
%%
%% Package `pst-map2d.tex'
%%
%% Manuel Luque <Mluque5130@aol.com> (France)
%% Giuseppe Matarazzo <joematara@hotmail.com> (Italy)
%% Herbert Voss <voss@perce.de> (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