%%
%% This is file `pst-mapII.tex',
%%
%% IMPORTANT NOTICE:
%%
%% Package `pst-map2dII.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-map2dII' is a PSTricks package to create geographical objects
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\fileversion{0.8}
\def\filedate{2004/05/09}

\message{`PST-map2dII v\fileversion, \filedate\space (ML/GM/HV)}

\csname PSTMapTwoDII\endcsname
\let\PSTMapTwoDIILoaded\endinput

% Require PSTricks
\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}
%
\define@key{psset}{type}{\edef\psk@WorldMapII@type{#1}}
\setkeys{psset}{type=1}
\define@key{psset}{increment}{\edef\psk@WorldMapII@increment{#1}}
\setkeys{psset}{increment=10}
% 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}{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
%
\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@WorldMapII@Rivers
\define@key{psset}{rivers}[true]{\@nameuse{Pst@WorldMapII@Rivers#1}}
\setkeys{psset}{rivers=false}
%
\newif\ifPst@WorldMapII@Borders
\define@key{psset}{borders}[true]{\@nameuse{Pst@WorldMapII@Borders#1}}
\setkeys{psset}{borders=true}
%
\newif\ifPst@WorldMapII@maillage
\define@key{psset}{maillage}[true]{\@nameuse{Pst@WorldMapII@maillage#1}}
\setkeys{psset}{maillage=true}
%
\newif\ifPst@WorldMapII@Fill
\define@key{psset}{Fill}[true]{\@nameuse{Pst@WorldMapII@Fill#1}}
\setkeys{psset}{Fill=true}
%
\newif\ifPst@WorldMapII@Europe
\define@key{psset}{europe}[true]{\@nameuse{Pst@WorldMapII@Europe#1}}
\setkeys{psset}{europe=true}
%
\newif\ifPst@WorldMapII@Asia
\define@key{psset}{asia}[true]{\@nameuse{Pst@WorldMapII@Asia#1}}
\setkeys{psset}{asia=false}
%
\newif\ifPst@WorldMapII@Africa
\define@key{psset}{africa}[true]{\@nameuse{Pst@WorldMapII@Africa#1}}
\setkeys{psset}{africa=false}
%
\newif\ifPst@WorldMapII@namer
\define@key{psset}{namer}[true]{\@nameuse{Pst@WorldMapII@namer#1}}
\setkeys{psset}{namer=false}
%
\newif\ifPst@WorldMapII@samer
\define@key{psset}{samer}[true]{\@nameuse{Pst@WorldMapII@samer#1}}
\setkeys{psset}{samer=false}
%
\newif\ifPst@WorldMapII@all% hv 2004-05-05
\define@key{psset}{all}[true]{%
  \setkeys{psset}{europe=true,asia=true,africa=true,namer=true,samer=true}
}
%
\define@key{psset}{level}{\edef\psk@WorldMapII@level{#1}}% hv 2004-05-05
\setkeys{psset}{level=5}% only every 5th data record
%
\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@WorldMapII@type\or% type 1  % hv 2004-05-04
    /CoeffY {Coeff_mercatorY} def
    /CoeffX {Coeff_mercatorX} def
    /StartY -85 def
  \or% type 2  % hv 2004-05-04
    /CoeffY {Coeff_simpleY} def
    /CoeffX {Coeff_simpleX} def
    /StartY -90 def
  \or% type 3  % hv 2004-05-04
    /CoeffY {Coeff_lambertY} def
    /CoeffX {Coeff_lambertX} def
    /StartY -90 def
  \or% type 4  % hv 2004-05-04
    /CoeffY {Coeff_sanson_flamsteedY} def
    /CoeffX {Coeff_sanson_flamsteedX} def
    /StartY -90 def
  \or% type 5  % hv 2004-05-04
    /CoeffY {Coeff_cylindricalY} def
    /CoeffX {Coeff_cylindricalX} def
    /StartY -85 def
  \or% type 6  % hv 2004-05-04
    /CoeffY {Coeff_babinetY} def
    /CoeffX {Coeff_babinetX} def
    /StartY -90 def
  \or% type 7  % hv 2004-05-04
    /CoeffY {Coeff_collignonY} def
    /CoeffX {Coeff_collignonX} def
    /StartY -90 def
  \else% every other is type 8  % hv 2004-05-04
    /CoeffY {Coeff_BonneY} def
    /CoeffX {Coeff_BonneX} def
    /StartY -90 def
  \fi
  /step \psk@WorldMapII@level\space def % hv 2004-05-04
}
 %
\newcount\TypeProjection
\def\WorldMapII{\pst@object{WorldMapII}}
\def\WorldMapII@i{\@ifnextchar[{\WorldMapII@do}{\WorldMapII@do[]}}
\def\WorldMapII@do[#1]{{%
  \setkeys{psset}{#1}%
  \begin@ClosedObj
  \addto@pscode{%
    /increment \psk@WorldMapII@increment\space def
    \VariablesMap
    1 setlinejoin
    0 0 translate
    /xunit {\pst@number\psxunit\space mul 20 div } def
    /yunit {\pst@number\psyunit\space mul 20 div } def
    /limiteLongitude \psk@WorldMap@limiteL\space def
%
    /CalculsPoints {
      /region exch def
       gsave
      newpath
      /nbr region length def % nombre de points
      region nbr 2 sub get
      /Y exch def
      region nbr 1 sub get
      /X exch def
      X CoeffX xunit Y CoeffY yunit moveto
      /ncount 0 def % hv 2004-05-04
      nbr 2 sub -2 2  {
        /Counter exch def % hv 2004-05-04
        /ncount ncount 1 add def % hv 2004-05-04
        ncount step ge { % hv 2004-05-04
          region Counter get
          /Y exch def
          region Counter 1 add get
          /X exch def
          X CoeffX xunit Y CoeffY yunit lineto
          /ncount 0 def % hv 2004-05-04
        }{ /ncount ncount 1 add def } ifelse % hv 2004-05-04
     } for
    } def
%
    /CalculsPointsAsia {
      /region exch def
      gsave
      newpath
      /nbr region length def % nombre de points
      region nbr 2 sub get
      /Y exch def
      region nbr 1 sub get
      /X exch def
      X 0 le {/X X 360 add def} if
      X CoeffX xunit Y CoeffY yunit moveto
      /ncount 0 def % hv 2004-05-04
      nbr 2 sub -2 2  {
        /Counter exch def % hv 2004-05-04
        /ncount ncount 1 add def % hv 2004-05-04
        ncount step ge { % hv 2004-05-04
          region Counter get
          /Y exch def
          region Counter 1 add get
          /X exch def
          X 0 le {/X X 360 add def} if
          X CoeffX xunit Y CoeffY yunit lineto
          /ncount 0 def % hv 2004-05-04
        }{ /ncount ncount 1 add def } ifelse % hv 2004-05-04
      } for
    } def
%
    /Draw {
      { CalculsPoints
        stroke
      } forall
    } def
%
    /DrawAsia {
      { CalculsPointsAsia
        stroke
      } forall
    } def
    /DrawRivers {
      { CalculsPoints
        gsave
        0 0 1 setrgbcolor
        stroke
        grestore
      } forall
    } def
%
    /DrawRiversAsia {
      { CalculsPointsAsia
        gsave
        0 0 1 setrgbcolor
        stroke
        grestore
      } forall
    } def
    /DrawBdy {
      { CalculsPoints
        gsave
        1 0 0 setrgbcolor
        stroke
        grestore
      } forall
    } def
    \ifPst@WorldMapII@Europe
      (\psk@WorldMap@Path/europe-cil.dat) run
      europe-cil
      Draw
      \ifPst@WorldMapII@Rivers
        (\psk@WorldMap@Path/europe-riv.dat) run
        europe-riv
        DrawRivers
      \fi
    \ifPst@WorldMapII@Borders
      (\psk@WorldMap@Path/europe-bdy.dat) run
      europe-bdy
      DrawBdy
    \fi
  \fi
%
\ifPst@WorldMapII@Africa
(\psk@WorldMap@Path/africa-cil.dat) run
 africa-cil
  Draw
\ifPst@WorldMapII@Rivers
(\psk@WorldMap@Path/africa-riv.dat) run
  africa-riv
  DrawRivers
 \fi
\ifPst@WorldMapII@Borders
(\psk@WorldMap@Path/africa-bdy.dat) run
 africa-bdy
  DrawBdy
\fi
\fi
%
\ifPst@WorldMapII@Asia
(\psk@WorldMap@Path/asia-cil.dat) run
 asia-cil
  DrawAsia
(\psk@WorldMap@Path/asia-isl.dat) run
 asia-isl
  Draw
\ifPst@WorldMapII@Rivers
(\psk@WorldMap@Path/asia-riv.dat) run
  asia-riv
  DrawRiversAsia
 \fi
\ifPst@WorldMapII@Borders
(\psk@WorldMap@Path/asia-bdy.dat) run
 asia-bdy
  DrawBdy
\fi
\fi
\ifPst@WorldMapII@namer
(\psk@WorldMap@Path/namer-cil.dat) run
 namer-cil
  Draw
\ifPst@WorldMapII@Rivers
(\psk@WorldMap@Path/namer-riv.dat) run
  namer-riv
  DrawRivers
  \fi
\ifPst@WorldMapII@Borders
(\psk@WorldMap@Path/namer-bdy.dat) run
(\psk@WorldMap@Path/namer-pby.dat) run
 namer-bdy
  DrawBdy
 namer-pby
  DrawBdy
\fi
 \fi
\ifPst@WorldMapII@samer
(\psk@WorldMap@Path/samer-cil.dat) run
 samer-cil
  Draw
 (\psk@WorldMap@Path/samer-arc.dat) run
 samer-arc
 DrawAsia
\ifPst@WorldMapII@Rivers
(samer-riv.dat) run
  samer-riv
  DrawRivers
 \fi
\ifPst@WorldMapII@Borders
(\psk@WorldMap@Path/samer-bdy.dat) run
 samer-bdy
  DrawBdy
\fi
\fi
%
\ifPst@WorldMapII@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
