%%
%% 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
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\csname PSTMapTwoDII\endcsname
\let\PSTMapTwoDIILoaded\endinput

% Require PSTricks
\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex \fi
\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex \fi
%
%
\def\fileversion{0.83}
\def\filedate{2009/08/28}
\message{`PST-map2dII v\fileversion, \filedate\space (ML/GM/HV)}
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax

\pst@addfams{pst-map2dII}% added 2005-09-29 hv

\SpecialCoor
%
\define@key[psset]{pst-map2dII}{path}{\edef\psk@WorldMap@Path{#1}} % chemin des données
\psset{path=data}
%
\define@key[psset]{pst-map2dII}{type}{\edef\psk@WorldMapII@type{#1}}
\psset{type=1}
\define@key[psset]{pst-map2dII}{increment}{\edef\psk@WorldMapII@increment{#1}}
\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]{pst-map2dII}{n}{\edef\psk@WorldMap@n{#1}}
\psset{n=1.77245} % sqrt(pi) % pour Collignon
%
\define@key[psset]{pst-map2dII}{limiteL}{\edef\psk@WorldMap@limiteL{#1}}
\psset{limiteL=180} % longitude limite
%
\define@key[psset]{pst-map2dII}{limiteL}{\edef\psk@WorldMap@limiteL{#1}}
\psset{limiteL=180} % longitude limite
%
\define@key[psset]{pst-map2dII}{latitude0}{\edef\psk@WorldMap@latitudeO{#1}}
\psset{latitude0=45}  % pour Bonne latitude 0
%
\define@key[psset]{pst-map2dII}{longitude0}{\edef\psk@WorldMap@longitudeO{#1}}
\psset{longitude0=0}  % pour Bonne longitude 0
%
\newif\ifPst@WorldMap@capitals
\define@key[psset]{pst-map2dII}{capital}[false]{\@nameuse{Pst@WorldMap@capitals#1}}
\psset{capital=false}
%
\newif\ifPst@WorldMap@city
\define@key[psset]{pst-map2dII}{city}[false]{\@nameuse{Pst@WorldMap@city#1}}
\psset{city=false}
%
\newif\ifPst@WorldMapII@Rivers
\define@key[psset]{pst-map2dII}{rivers}[true]{\@nameuse{Pst@WorldMapII@Rivers#1}}
\psset{rivers=false}
%
\newif\ifPst@WorldMapII@Borders
\define@key[psset]{pst-map2dII}{borders}[true]{\@nameuse{Pst@WorldMapII@Borders#1}}
\psset{borders=true}
%
\newif\ifPst@WorldMapII@maillage
\define@key[psset]{pst-map2dII}{maillage}[true]{\@nameuse{Pst@WorldMapII@maillage#1}}
\psset{maillage=true}
%
\newif\ifPst@WorldMapII@Europe
\define@key[psset]{pst-map2dII}{europe}[true]{\@nameuse{Pst@WorldMapII@Europe#1}}
\psset{europe=true}
%
\newif\ifPst@WorldMapII@Asia
\define@key[psset]{pst-map2dII}{asia}[true]{\@nameuse{Pst@WorldMapII@Asia#1}}
\psset{asia=false}
%
\newif\ifPst@WorldMapII@Africa
\define@key[psset]{pst-map2dII}{africa}[true]{\@nameuse{Pst@WorldMapII@Africa#1}}
\psset{africa=false}
%
\newif\ifPst@WorldMapII@namer
\define@key[psset]{pst-map2dII}{namer}[true]{\@nameuse{Pst@WorldMapII@namer#1}}
\psset{namer=false}
%
\newif\ifPst@WorldMapII@samer
\define@key[psset]{pst-map2dII}{samer}[true]{\@nameuse{Pst@WorldMapII@samer#1}}
\psset{samer=false}
%
\newif\ifPst@WorldMapII@all% hv 2004-05-05
\define@key[psset]{pst-map2dII}{all}[true]{%
  \psset{europe=true,asia=true,africa=true,namer=true,samer=true}
}
%
\define@key[psset]{pst-map2dII}{level}{\edef\psk@WorldMapII@level{#1}}% hv 2004-05-05
\psset{level=5}% only every 5th data record
%
\def\geo@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
  /increment \psk@WorldMapII@increment\space def
}
 %
\newcount\TypeProjection
\def\WorldMapII{\pst@object{WorldMapII}}
\def\WorldMapII@i{{%
  \use@par%
  \begin@ClosedObj
  \addto@pscode{
    \geo@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
  }\ignorespaces}
%

\def\pnodeMap(#1,#2)#3{%   hv 2004-05-09
  \pst@killglue
  \pnode(!
    \geo@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]{pst-map2dII}{mapCountry}{\edef\psk@WorldMap@mapCountry{#1}}
\psset{mapCountry=all}
\define@key[psset]{pst-map2dII}{nodeWidth}{\edef\psk@WorldMap@nodeWidth{#1}}
\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

