terça-feira, 22 de setembro de 2009

Mapa do Brasil com Estados em destaque

Nos estudos de meteorologia é comum a geração de mapas com campos atmosféricos, que permitem-nos analisar o tempo ou o clima para uma determinada região. Dependendo, é claro, do tipo do campo plotado.

Atualmente, tenho usado o NCAR Command Language (NCL, www.ncl.ucar.edu) para o processamento e plotagem de variáveis e parâmetros meteorológicos. O NCL é uma linguagem interpretada (e gratuita) baseada no NCAR Graphics, um pacote de bibliotecas gráficas para C e Fortran. É uma excelente opção para processar dados atmosféricos, visto a grande oferta de funções e procedimentos, além de possibilitar a criação de gráficos de alta qualidade.

Neste "post", gostaria de compartilhar um script simples, que exemplifica a plotagem de um campo atmosférico sobre a América do Sul. Além do mapa da América do Sul, mostro como plotar o mapa do Brasil e destacar alguns Estados. No exemplo, os Estados da Região Sul do Brasil são destacados.

Chega de blá-blá-blá e vamos ao script:

---------------- INÍCIO DO SCRIPT ----------------------------
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"


begin
; abrindo arquivo com dados diários da Reanálise II
dados = addfile( "mslp.2008.nc", "r" )

pnmm = short2flt( dados->mslp )
pnmm = pnmm/100. ; convertendo para hPa
time = dados->time

; escolhendo dia e mes

dia = 23
mes = 07

; obtendo a data no formato UT referenciado

dataUT = ut_inv_calendar( 2008, mes, dia, 0, 0, 0, time@units, 0 )


; area da América do Sul
minLat = -60.
maxLat = 10.

minLon = 270.
maxLon = 330.

;\\\\\\\\\\\\\\\\\ PARTE GRÁFICA DO SCRIPT \\\\\\\\\\\\\\\\\\
; recursos gráficos para o mapa
mapa = True ; habilita recursos gráficos
mapa@gsnMaximize = True ; maximiza gráfico

mapa@gsnAddCyclic = False ; para dados não globais

mapa@mpFillOn = True ; preenchimento de cores do mapa
mapa@mpMonoFillColor = True ; preenchimento com uma cor apenas
mapa@mpFillColor = -1 ; transparente, sem preenchimento de cor

mapa@mpDataSetName = "Earth..4" ; para desenhar
mapa@mpDataBaseVersion = "MediumRes" ; divisao

mapa@mpOutlineOn = True ; politica
mapa@mpOutlineSpecifiers = (/"Brazil:states"/) ; brasileira

; escolhendo estados para sombrear
mapa@mpFillAreaSpecifiers = (/"Brazil:Rio Grande do Sul", \
"Brazil:Santa Catarina", \
"Brazil:Parana" /)
mapa@mpSpecifiedFillColors = new( dimsizes(mapa@mpFillAreaSpecifiers),\
string )
mapa@mpSpecifiedFillColors(:) = "grey" ; cor da sombra no mapa

mapa@mpMaxLonF = maxLon ;
mapa@mpMinLonF = minLon ; area
mapa@mpMaxLatF = maxLat ; de
mapa@mpMinLatF = minLat ; plotagem


; controlando informação dos contornos
mapa@cnInfoLabelString = "Contorno de $CMN$ a $CMX$; intervalo = $CIU$"

; aumentando a espessura dos contornos

mapa@cnLineThicknessF = 3.


; criando ambiente gráfico e definindo a sua saída em PostScript

wks = gsn_open_wks( "ps", "pnmm" )


; nome do campo e unidade física

mapa@gsnLeftString = "PNMM para "+sprinti("%0.2i",dia)+ \

"/"+sprinti("%0.2i",mes)+"/2008"

mapa@gsnRightString = "[hPa]"


; plotando campo de PNMM com os estados da Região Sul do Brasil destacados
plotaMapa = gsn_csm_contour_map_ce( wks, pnmm( {dataUT}, \
{minLat:maxLat}, {minLon:maxLon} ), mapa )

; convertendo gráfico de PS para PNG com ferramenta externa (ImageMagick)
system("convert -geometry 1000x1000 -density 300 -trim pnmm.ps pnmm.png")
system("rm -f pnmm.ps") ; apaga arquivo PS
end

--------------------------- FIM DO SCRIPT -------------------------------

Os dados de PNMM usados foram obtidos da Renálise II do NCEP-DOE (www.cdc.noaa.gov) e são médias diárias para o ano de 2008. A execução deste script resulta no gráfico abaixo (clique na imagem para vẽ-la em tamanho maior).



Algumas observações:

(1) como o Blogger não permite linhas longas, várias linhas do script estão cortadas e continuadas na linha seguinte. Por isso, ao copiar o script e colá-lo num arquivo ASCII, observa as linhas atentamente para que o mesmo possa funcionar corretamente.

(2) é possível escolher o dia e o mês para a plotagem, mas note que a data é convertida para outro formato. Este formato é o Tempo Universal Referenciado ou UT-referenced date, que usa um referencial para a contagem do tempo. Mais informações, veja

Modified Julian Date, em http://tycho.usno.navy.mil/mjd.html
Função ut_inv_calendar do NCL, em http://www.ncl.ucar.edu/Document/Functions/Built-in/ut_inv_calendar.shtml

(3) os dados da Reanálise I e II são armazenados em arquivos netCDF em variáveis do tipo short, que permitem salvar algum espaço em disco, pois ocupa menos espaço que variáveis ponto-flutuante (float). Entretanto, para usá-los deve-se convertê-los para o tipo float (equivalente ao REAL, do Fortran). A função short2flt (disponibilizada pela biblioteca contributed.ncl, carregada no início do script) faz este trabalho, pois usa informações importantes disponibilizadas pelo arquivo netCDF para esta conversão. Maiores detalhes, veja http://www.ncl.ucar.edu/Document/Functions/Contributed/short2flt.shtml.

Note como é simples a escolha do(s) Estado(s) brasileiro(s) a ser(em) enfatizado(s), basta usar o seu nome, sem abreviações, sem complicações. Consulte os exemplos no site no NCL para vislumbrar todas as suas possibilidades.

É isso aí, espero que este exemplo possa ser útil.

Abraços,

Um comentário:

  1. ola estou tentando criar um arquivo netcdf!!
    mas está uma missao quase impossivel poderia me ajudar??
    me e-mail
    tomkotarski@hotmail.com

    ResponderExcluir