Subsections

Scripts y GMT

Script para un mapa en GMT

Espero que hasta el momento hallan notado algunas cosas :

Por eso existen scripts para generar los mapas. Bajen el script siguiente ejemplo_mapa1.sh
Este script define los parámetros usados para generar el mapa, y después corre la serie de comandos en GMT para ejecutar el dibujo. El script esta abajo, si lo abres con un editor de texto como gedit se separa en parámetros, valores, comentarios y comandos.

Note los siguientes parámetros :

También hay parámetros para la costa, su resolución, las fronteras graficadas, y los rios. Note que mi parámetro para los rios (#rivers="-I1/1.00p/0/0/255") tiene un # antes, significando que es un comentario nada más. Con eso, no voy a graficar los rios, pero si quiero graficarlos, simplemente tengo que sacar el "#" para que la línea sea un comando y no un comentario.

#!/bin/bash

region="ejemplo_mapa1"
limites="-74.5/-71/-38.5/-36" #Limites de la region a graficar

#Origen (posicion del grafico en la hoja):
xshift="2.0"
yshift="6.0"

proyeccion="M14.0" #Tipo de proyeccion
paleta="/usr/local/GMT4.5.8/share/cpt/GMT_relief.cpt" #Paleta de colores a usar
topografia="/home/carlos/bin/w100s10.Bathymetry.srtm.grd" #Archivo de topografia
ticks="a2f0.5g1SEWN" # Describiendo el marco del mapa
illaz="225" # Direccion del azimut de iluminacion
portrait="-P" # Si quiero landscape en vez de portrait, dejo esta opcion en blanco
verbose="-V" # Dejo esta opcion en blanco si no quiero mostrar el "blah blah" de
# los comandos en la terminal

#Lineas de costa e informacion de los limites fronterizos.
#(Para mas detalles, escribe en la terminal: man pscoast)
linea_costa="1.00p/0/0/0"
resolucion="f" # Resolucion de las lineas de costa. Puedes elegir:
# (f)ull, (h)igh, (i)ntermediate, (l)ow, y (c)rude
bordes="-N1/1.00p/0/0/0" #Limites politicos de los paises

#Tambien se puede añadir:
#rios="-I1/1.00p/0/0/255"

#agua="-S0/0/255" #Esto va a graficar de un solo color todo lo que son masas de agua
#tierra="-G0/255/0" #Esto va a graficar de un solo color todo lo que es tierra

############################################################################################

# Archivo de salida:
psfile="${region}.ps"

# Construyendo el marco del mapa:
psbasemap -B${ticks} -J${proyeccion} -R${limites} -X${xshift} -Y${yshift} ${portrait} ${verbose} \
-K > ${psfile}

#Cortando la grilla original a los limites establecidos.
#grdcut archivo_entrada.grd -Garchivo_salida.grd -Roeste/este/sur/norte [-V]
grdcut ${topografia} -G${region}.grd -R${limites} -V

#Iluminando la grilla topografica generada en el grdcut desde un azimut especifico para producir
#un archivo de intensidad (.int) de iluminacion:
grdgradient ${region}.grd -G${region}.int -A${illaz} -Nt -M

# Graficando la topografia de la region seleccionada con su iluminacion:
grdimage ${region}.grd -C${paleta} -I${region}.int -B${ticks} -J${proyeccion} -R${limites} \
${portrait} ${verbose} -O -K >> ${psfile}

#Construyendo la escala de colores a partir de la paleta seleccionada:
psscale -D16c/2.5c/5c/0.5c -C${paleta} -Ba5000f1000/a5000f1000:"(m)": -O -K >> ${psfile}

#Graficando las costas y limites del mapa:
pscoast -B${ticks} -J${proyeccion} -R${limites} ${portrait} ${verbose} -D${resolucion} \
-W${linea_costa} ${bordes} ${rios} ${agua} ${tierra} -O >> ${psfile}

Si ustedes corren este script, con los párametros de la paleta y la topografía cambiados a sus respectivas rutas en su pc, deben generarla siguiente imagen:

Image ejemplo_mapa1

Antes de salir de esta sección, revisa que entienden lo que hace el script y que pueden modificar el script para hacer lo siguiente :

1.
Cambiar el nombre de la imagen generada a bio_bio.ps
2.
Cambiar la región graficada a una que muestre el altiplano de sudamerica llamado altiplano.ps
3.
Cambiar la paleta. Prueben globe, ocean, sealand, topo. Noten que algunas de esas son mejores que otros!
4.
Cambiar los ejes: números y barras cada 1 grado, y líneas cada 0.2 grado
5.
Cambiar el azimut de la iluminación para que sea en la dirección opuesta del ejemplo mostrado aquí
6.
Cambiar la resolución de la costa a full
7.
Poner rios
8.
Sacar del gráfico la escala de la topografía con un gato (#)

Contornos en GMT

El archivo .grd para la topografía es una grilla, por lo tanto podemos graficar sus contornos usando el comando grdcontour. Por ejemplo, puedo poner:
grdcontour ${region}.grd -B${ticks} -J${projection} -C200 -A1000+k0/0/0 \
-R${bounds} ${portrait} ${verbose} -W0.1p/0/0/0 -Gd10c -O -K >> ${psfile}

dentro del script, entre grdimage y psscale. A continuación se detallan algunos parámetros del comando grdcontour y su función.

Parámetro Función
-C200 contornos cada 200 m
-A1000+k0/0/0 anotación cada 1000 m, color negro
-W0.1p/0/0/0 tamaño y color del lápiz de contornos
-Gd10c 10 cm de anotación entre contornos



El script para generar el siguiente gráfico es ejemplo_mapa2.sh, es bastante similar al primero, solamente cambia la paleta e incorpora contornos.

Image ejemplo_mapa2

Personalización del mapa con condicionales

El mapa de arriba es bastante feo. \textquestiondownSerá mejor si elimino la iluminación de la topografía ?
Se puede hacer eso borrando la opción -I en el comando grdimage, pero con eso hay que recordar como ponerlo de nuevo. Es mejor definir unas variables al inicio del script para decir exactamente que queremos, por ejemplo:
si quiero algo (1)
no quiero algo (0)
Donde "algo" puede ser topografía , iluminación , escala , etc.
topo_option=1
illumination_option=0
contour_option=1
topo_scale_option=0
Después, en la sección confección del mapa ( cuerpo del script), solamente grafica de acuerdo a las opciones declaradas al inicio de script , donde el condicional más apropiado para esta selección es if. Note además que las opciones que se declaran al inicio del script ( 1 o 0) tambien las puede declarar en forma general, usando el condicional case. Esto le permitirá declarar las opciones de gráfica como argumentos de entrada , facilitando la tarea de modificar el script poniendo 1 o 0 según lo que desee en cada ocasión.

# Aplicando los condicionales:
if [ "${opcion_topografia}" = 1 ]; then
# Cortando la grilla original a los limites establecidos.
# grdcut archivo_entrada.grd -Garchivo_salida.grd -Roeste/este/sur/norte [-V]
grdcut ${topografia} -G${region}.grd -R${limites} -V


if [ "${opcion_iluminacion}" = 1 ]; then
# Iluminando la grilla topografica generada en el grdcut desde un azimut
# especifico para producir un archivo de intensidad (.int) de iluminacion:
grdgradient ${region}.grd -G${region}.int -A${illaz} -Nt -M

# Graficando la topografia de la region seleccionada con su iluminacion:
grdimage ${region}.grd -C${paleta} -I${region}.int -B${ticks} -J${proyeccion} \
-R${limites} ${portrait} ${verbose} -O -K >> ${psfile}

else
# Graficando la topografia de la region seleccionada sin iluminacion:
grdimage ${region}.grd -C${paleta} -B${ticks} -J${proyeccion} -R${limites} \
${portrait} ${verbose} -O -K >> ${psfile}
fi


if [ "${opcion_contorno}" = 1 ]; then
# Graficando los contornos de la grilla:
grdcontour ${region}.grd -B${ticks} -J${proyeccion} -C200 -A1000+k0/0/0 \
-R${limites} ${portrait} ${verbose} -W0.1p/0/0/0 -Gd10c -O -K >> ${psfile}
fi


if [ "${opcion_escala_topo}" = 1 ]; then
# Construyendo la escala de colores a partir de la paleta seleccionada:
psscale -D16c/2.5c/5c/0.5c -C${paleta} -Ba5000f1000/a5000f1000:"(m)": -O -K \
>> ${psfile}
fi

fi
El script entero es ejemplo_mapa3.sh. Pruebe este script con varias combinaciones de 1s y 0s en las opciones iniciales para la topografía, y asegurese de entender el gráfico que resulta.
En este caso (topo_option=1, illumination_option=0, contour_option=1, topo_scale_option=0 ,¿ luce mejor ?
Image ejemplo_mapa3

Conclusión

En esta sección vemos que con un script podemos facilmente generar mapas de topografía con opciones de gráfico ( región, colores a usar, contornos, ejes, etc.) que son fácil de cambiar.
En la próxima sección trabajamos con el mismo script, y veremos los comandos para poner símbolos en los mapas.

Preguntas

1.
¿ Como confeccionaría un script que cumpla la misma función anterior usando el condicional case ?

matt 2014-03-19