Ps.out Making maps

From GRASS-Wiki
Jump to navigation Jump to search

How make a map?

The header of file

#!/bin/bash

Command line options

OUTPUT="OUT"
ps.out -g out=$OUTPUT.ps << EOF

The layout

The paper

paper A4
   left 1in
   landscape y
   font
     name Univers
     size 9
   end
   draw
       color black ~ linewidth .8mm
       moveto 23cm 1.5cm ~ fcolor 220:220:220 ~ rect 29cm 19cm
       moveto 23cm 1.5cm ~ fcolor 100:100:100 ~ rect 29cm 4cm
       font Univers-Bold 14 extend 2 ~ color white
       moveto 26cm 2.25cm ~ text :Making|.maps with|ps.out
   end
end

Placing the map

maparea
   border .8mm
   color white
end
scale 1:100000

Elements on the map

The border of the map is a usual elements to geographically locate the map. There is a default border but I'm like the iho format.

grid
   format iho
   major 10000
       width .1mm
       color indigo$.25
   end
   minor 5000
       color none
   end
end

The scalebar is also an usual elements.

scalebar S
   units km km
   length 5
   major 5 1
   minor 0 5
   frame
       where 26cm 17cm
       ref center center
       border 0
       fcolor none
   end
   height 3mm
end

The numeric scale is also usefull. As you can see, I request a scale 1:100000 but with the actual margins the minimun scale is 1:110249.

note :scale escala
   frame
       where 26cm 17cm
       ref center upper
       border 0
       margin 10
       fcolor none
   end
end

Code for the map

Decorations

the footer of the file

EOF
ps2pdf14 $OUTPUT.ps

Maps with same layout

To make several maps with the same layout, we use three files: map_pre, map_post, and a master file. Also we need the map_# with the particular content of the map.

The master file, to repeat the creation of all maps with the same layout, is as:

 #!/bin/bash

 MAP=map_ps
 function makemap()
 {
    echo "#!/bin/bash" > $MAP
    cat map_pre  >> $MAP
    cat $1 >> $MAP
    cat map_post >> $MAP
    chmod +x $MAP
    ./$MAP $1
    rm $MAP
 }

 makemap map_1
 makemap map_2

The file map_pre include all code to execute ps.out and design the basic elements of the map: title, graticule, scalebar, north-arrow, etc. A example content is:

 OUTPUT=$1
 ps.out -g out=$OUTPUT.ps << EOF

 paper A4
    left 2cm
    top 2cm
    landscape y
    draw
      color 70:70:70
      linewidth .4mm
      rect 22cm 2cm 28cm 19cm 240:240:240
        color black
        font OffensiveBold 10 .8
        text 25cm 6cm "MAIN TITLE"
    end
 end

 scale 1:500000

 grid
    format iho
    trim -1
    major 50000
        width .18mm
        color none
    end
    minor 25000
        width .18mm
        color none
        style 2
    end
    subminor 5
    font
        name Univers
        size 10
        color black
    end
    fcolor black
 end

 vlines bz_lim
   type boundary
   label Límite del Bierzo
   lpos -1
   line
     width .3mm
     color black
   end
 end

The file map_post include the final ending code, and perhaps the common legend style. For example,

 vlegend Legend
    frame
        where 25cm 12cm
        ref center center
        offset 0 0
        border .3mm
        fcolor white
        margin 12
    end
    title
        name Univers-Bold
        size 10
        extend 1.25
    end
    font
        name Univers
        size 9
    end
 end

 EOF

 echo "GO Go go: $OUTPUT.pdf"
 ps2pdf14 $OUTPUT.ps

The file map_# include the specific code to draw the particular maps. For example,

 vareas risk_range
   label Probabilidad de infección
   legend 0
   line
     width .01mm
     color none
     style 1
    end
    fcolor GRASSRGB$.7 cat
    masked y
    setrule 1 Muy baja
    setrule 2 Baja
    setrule 3 Media
    setrule 4 Alta
    setrule 5 Muy alta
 end

 vpoint cs_parcela
    label Intensidad de ataque
    where ch_pr > 0
    symbol basic/circle
    line
        width .1mm
        color black
    end
    fcolor white$.3
    size ch_prx 8
    scale 5 2
    masked y
 end