Ps.out Making maps: Difference between revisions

From GRASS-Wiki
Jump to navigation Jump to search
Line 126: Line 126:


== Decorations ==
== Decorations ==
The '''legend''' is another usefull component but in this map is not necessary. After, when I change to a colored version the the legend is place.
the only decoration in this howto will be the '''north arrow''' and some free '''text'''.


== The footer of the file ==
== The footer of the file ==

Revision as of 21:22, 19 October 2010

How make a map?

The header of file

#!/bin/bash

Command line

First I define a variable to store the name of the output because when I want change it I modify only this value. Also, begin the ps.out command and the EOF block.

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 area on the page

I prefer use the default values of the map area but to show anything I set the color of the border map.

maparea
   color white
end

I request a fixed scale for the map.

scale 1:100000

Elements on the map

The border of the map is a usual elements to geographically locate the map. There is not a default border then if you want it you need define this stament.

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 and border the minimun scale is 1:110249.

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

First output

At this moment this is the output:


Composing the map

The raster file is a frequent element and, for the moment, it is necessary to mask vector maps. Here I use a shaded raster to make the aspect of 3D in this simple how to.

raster bz_30m_shade
end

The output in console show me that the equivalent quality is 93 ppi. Changing the resolution with g.region res=10 you can add pixels to slowup the printing quality (if you raster have the request resolution!).

Now, I add the vector file. Here it is a vector with contour lines.

vlines test_contour@bierzo
   masked yes
   line
       width .1mm
       color OR8
   end
   label Líneas de nivel
   rgbcol - level
   setcolor 600,1000:OR8|.3mm main contour lines
end

In this code OR8 is a color defined in a palette block (do not shown in the code) but the most important is the extended form of the command setcolor to change the width of the specific contour lines with a level value of 600 or 1000.

Second output

Now the output is:

Decorations

The legend is another usefull component but in this map is not necessary. After, when I change to a colored version the the legend is place.

the only decoration in this howto will be the north arrow and some free text.

The footer of the file

Now, I finish the EOF stament.

EOF

I prefer work with PDF than PS because I see the transparent colours and it compress the file resulting in a considerably smalles file size.

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