Si quiero poner un símbolo a un mapa, uso psxy. Por ejemplo, para poner un símbolo que identifique la ciudad de Concepción en un mapa, puedo poner esta línea de código al final del script ejemplo_mapa3.sh.
echo -73.03 -36.83 | psxy -J${projection} -R${bounds} ${verbose} \Esto toma un punto de longitud y latitud (en nuestro caso la UdeC) y lo grafica como un cuadrado de 1.0 centímetro de tamaño -Ss1.0c, de un color naranjo -G255/175/0, con bordes de 0.2 centímetros de ancho , y de color púrpura -W0.2c/255/0/0.
-Ss1.0c -W0.2c/255/0/200 -G255/175/0 -O >> ${psfile}
echo "-72.8 -36.83 12 0 4 LM Concepci\363n" | pstext -J${projection} -R${bounds} \
${verbose} -G0 -N -W255 -O >> ${psfile}
Esto requiere un poco de explicación :
Nota:
Usamos psxy de nuevo para poner líneas entre dos o más puntos. -W selecciona el ancho de la línea y su color, aquí 2.0 puntos, -A significa que la línea es recta, y no un arco de un gran círculo entre los puntos. El ejemplo abajo va a dibujar una línea negra debajo del texto en la sección 9.2.
psxy -J${projection} -R${bounds} ${verbose} -W2.0p/0/0/0 -A -O << END >> ${psfile}
-72.8 -36.9
-72.3 -36.9
END
También podemos tener un archivo con los puntos donde queremos nuestra línea y graficar eso con psxy.
Por ejemplo, el archivo biobio_region.xy contiene la información sobre las fronteras de la región del Bío Bío.
Podemos graficarlo con:
psxy biobio_region.xy -J${projection} -R${bounds} ${verbose} \
-m -W1.0p/0/0/0t5_2:2 -A -O >> ${psfile}
Note que el archivo biobio_region.xy expresa dos líneas, una para la frontera al norte, después una pausa de 1 línea, después la frontera del sur. Por eso uso la opción -m para un "multiple segment file", o un archivo de multiples segmentos. Note también que esta línea tiene textura t5_2:2. Eso significa que tenemos una línea con 5 puntos de segmento y 2 puntos de espacio, con un desplazamiento de 2 puntos de su inicio. Esto no es muy simple de explicar, mejor prueben diferentes combinaciones, como t5_2:0, t2_5:2, e incluso t2_2_8_2:1.
Para poner un vector al gráfico, usamos:
echo "-73.9 -36.5 80 2" | psxy -J${projection} -R${bounds} \
${verbose} -SV0.075c/0.3c/0.15c -G0 -O >> ${psfile}
Los números son la longitud y latitud del vector, el azimut del vector, y su largo en centímetros. Aquí estoy usando psxy
con la opción -SV para un vector. Los números asociados con el -SV son el ancho del vector 0.075 centímetros, el ancho
de la flecha 0.3 centímetros, y el largo de la flecha 0.15 centímetros. Prueben eso con diferentes valores. La opción -G da
el color del vector, en nuestro caso, negro.
Esta flecha representa la velocidad de la placa Nazca, podemos agregar texto a su lado para especificar eso:
echo "-73.9 -36.6 12 0 6 LM Nazca Plate" | pstext -J${projection} -R${bounds} \
$verbose} -G0 -N -W255 -O -K >> ${psfile}
echo "-73.9 -36.69 12 0 6 LM ~80 mm/yr" | pstext -J${projection} -R${bounds} \
${verbose} -G0 -N -W255 -O >> ${psfile}
El script que hace esto es ejemplo_mapa4.sh. Note que este script también tiene una opción para el color de los lagos.
Es posible limpiar el script con condicionales, como lo que se hizo con la topografía.
El script debe producir un gráfico como este :
El script completo :
#!/bin/bash
# Estableciendo las opciones, donde:
# (1) Quiero que aparezca
# (0) No quiero que aparezca
opcion_topografia=1
opcion_iluminacion=1
opcion_contorno=0
opcion_escala_topo=1
################################################################################################
region="ejemplo_mapa4"
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_globe.cpt" #Paleta de colores a usar
topografia="/home/carlos/bin/w100s10.Bathymetry.srtm.grd" #Archivo de topografia
ticks="a2f0.5g1SEWN"
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"
#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
lagos="-C50/100/200 -A0/2/4"
##################################################################################################
# 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}
# 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
# Graficando las costas y limites del mapa (para graficar las lineas de costa marinas):
pscoast -B${ticks} -J${proyeccion} -R${limites} ${portrait} ${verbose} -D${resolucion} \
-W${linea_costa} ${bordes} ${rios} -O -K >> ${psfile}
# Graficando las costas y limites del mapa (para incluir los lagos):
pscoast -B${ticks} -J${proyeccion} -R${limites} ${portrait} ${verbose} -D${resolucion} \
-W${linea_costa} ${bordes} ${lagos} -O -K >> ${psfile}
else
# Graficando las costas y limites del mapa (incluyendo un color diferente
# para indicar la tierra y el agua):
pscoast -B${ticks} -J${proyeccion} -R${limites} ${portrait} ${verbose} -D${resolucion} \
-W${linea_costa} ${bordes} ${rios} ${agua} ${tierra} -O -K >> ${psfile}
#Graficando las costas y limites del mapa (para incluir los lagos):
pscoast -B${ticks} -J${proyeccion} -R${limites} ${portrait} ${verbose} ${lagos} -D${resolucion} \
-W${linea_costa} ${bordes} ${rios} -O -K >> ${psfile}
fi
#############################################################################################
# Ahora vamos a poner unos simbolos
# Poner un cuadrado para la ciudad de Concepcion:
echo "-73.03 -36.83" | psxy -J${proyeccion} -R${limites} ${verbose} -Ss1.0c -W0.2c/255/0/200 \
-G255/175/0 -O -K >> ${psfile}
# Poner texto que dice Concepcion:
echo "-72.8 -36.83 12 0 4 LM Concepci\363n" | pstext -J${proyeccion} -R${limites} ${verbose} \
-G0 -N -W255 -O -K >> ${psfile}
# Poner una linea bajo del texto:
psxy -J${proyeccion} -R${limites} ${verbose} -W2.00p/0/0/0 -A -O -K << END >> ${psfile}
-72.8 -36.9
-72.3 -36.9
END
# Poner la frontera de la region biobio:
psxy biobio_region.xy -J${proyeccion} -R${limites} ${verbose} -m -W1.0p/0/0/0t5_2:1 -A -O -K \
>> ${psfile}
# Poner un vector para la velocidad de la placa Nazca:
echo "-73.9 -36.5 80 2" | psxy -J${proyeccion} -R${limites} ${verbose} -SV0.075c/0.3c/0.15c -G0 \
-O -K >> ${psfile}
# Y texto:
echo "-73.9 -36.6 12 0 6 LM Nazca Plate" | pstext -J${proyeccion} -R${limites} $verbose} -G0 -N \
-W255 -O -K >> ${psfile}
echo "-73.9 -36.69 12 0 6 LM ~80 mm/yr" | pstext -J${proyeccion} -R${limites} ${verbose} -G0 -N \
-W255 -O >> ${psfile}
matt 2014-03-19