gdal

Instalando o gdal no Linux

sudo apt install gdal-bin

Exemplos de uso do gdal

Convertendo um arquivo NetCDF para o formato binário

  • Criar o arquivo descritor (ctl) com o cdo:

cdo gradsdes input.nc

Será criado o arquivo input.ctl. O input.nc é o seu arquivo NetCDF.

  • Gerando o binário a partir do NetCDF. Não esquecer de editar o .ctl para abrir corretamente o seu binário.

gdal_translate -of ENVI input.nc output.bin

Convertendo um arquivo NetCDF para o formato tif

gdal_translate -of GTiff -a_srs EPSG:4326 input.nc output.tif

Convertendo um arquivo no formato tif para NetCDF

gdal_translate -of netcdf -co "FORMAT=NC" input.tif output.nc

Convertendo um arquivo no formato NetCDF para o formato tif e compacta o arquivo (no sentido de reduzir o tamanho ocupado em disco pelo tif)

gdal_translate -of GTiff -a_srs EPSG:4326 -co TILED=YES -co COPY_SRC_OVERVIEWS=YES -co COMPRESS=LZW input.nc output.tif

Convertendo um arquivo shapefile para NetCDF

gdal_rasterize -burn 1 -of netCDF -a_nodata -999 -a_srs epsg:4326 -tr 0.01 0.01 input.shp output.nc

Onde: -of = formato de interesse, -a_nodata = valor UNDEF de interesse, -a_srs epsg = tipo de projeção e -tr = resolução de interesse, nesse caso, 1km.

Juntando arquivos tif

O objetivo consiste em unir (gdal_merge.py) dois arquivos, o VENTO.U10M.GFS.ANL.2020070118.tif e o VENTO.V10M.GFS.ANL.2020070118.tif.

A ordem de disposição dos arquivos é importante. Ao gerar o VENTO_UV.tif, a variável Band 1 corresponde a componente u e Band 2 a componente v.

gdal_merge.py -separate -o VENTO_UV.tif VENTO.U10M.GFS.ANL.2020070118.tif VENTO.V10M.GFS.ANL.2020070118.tif

Onde: VENTO_UV.tif é o arquivo com as duas variáveis. Esse nome é definido pelo usuário.

Basta digitar o comando abaixo para ver o conteúdo do arquivo VENTO_UV.tif.

gdalinfo VENTO_UV.tif

Reclassificar as classes do MapBiomas

O objetivo consiste em reclassificar as 38 classes da coleção 8 do MapBiomas para 6 classes, isto é:

  • Classe 1: Floresta

  • Classe 2: Formação Natural não Florestal

  • Classe 3: Agropecuária

  • Classe 4: Área não Vegetada

  • Classe 5: Corpo D’água

  • Classe 6: Não observado

Os links abaixo mostram todas as classes da coleção 8 do MapBiomas:

Para recortar o mapa de uso e cobertura da terra do MapBiomas, basta seguir a dica do link abaixo. Lembrando que a resolução original é de 30 metros.

Recortar um arquivo GeoTIFF utilizando shapefile

Para fazer a reclassificação, utiliza-se o gdal_calc.py.

Script em Shell para realizar a reclassificação:

Para executar o script, basta abrir o seu terminal e digitar o comando abaixo:

bash classifica_mapbiomas_6classes.sh
#!/bin/bash

# Arquivo que está no seu computador.
Arquivo_Input=sao_paulo_2022.tif
# Arquivo a ser gerado no seu computador.
Arquivo_Output=sao_paulo_2022_6classes.tif

gdal_calc.py -A ${Arquivo_Input} --outfile ${Arquivo_Output} --NoDataValue=0 --calc="\
  1*(A==1)+1*(A==3)+1*(A==4)+1*(A==5)+1*(A==6)+1*(A==49)+\
  2*(A==10)+2*(A==11)+2*(A==12)+2*(A==32)+2*(A==29)+2*(A==50)+2*(A==13)+\
  3*(A==14)+3*(A==15)+3*(A==18)+3*(A==19)+3*(A==39)+3*(A==20)+3*(A==40)+\
  3*(A==62)+3*(A==41)+3*(A==36)+3*(A==46)+3*(A==47)+3*(A==35)+3*(A==48)+\
  3*(A==9)+3*(A==21)+\
  4*(A==22)+4*(A==23)+4*(A==24)+4*(A==30)+4*(A==25)+\
  5*(A==26)+5*(A==33)+5*(A==31)+\
  6*(A==27)"

Explicação do comando:

  • -A: é o arquivo de entrada.

  • –outfile: é o arquivo a ser gerado.

  • –NoDataValue: define um valor para dado ausente (undef). Neste caso, o valor zero será undef.

  • –calc: responsável pela reclassificação.

    • os números de 1* a 6* são as novas classes que serão geradas.

    • 1*(A==1)+1*(A==3)+1*(A==4)+1*(A==5)+1*(A==6)+1*(A==49) significa que do arquivo A (sao_paulo_2022.tif), os pixeis com as classes 1, 3, 4, 5, 6, e 49 serão substituídos pelo valor 1.

    • 2*(A==10)+2*(A==11)+2*(A==12)+2*(A==32)+2*(A==29)+2*(A==50)+2*(A==13). Neste caso, as classes 10, 11, 12, 32, 29, 50, 13 terão valor 2.

    • Para as demais classes o raciocínio é o mesmo.

As figuras abaixo mostram o antes e o depois da reclassificação.

  • Antes com as 38 classes: ../../_images/antes.JPG

  • Depois com as 6 classes: ../../_images/depois.JPG

Recortar um arquivo GeoTIFF utilizando shapefile

A figura abaixo representa o mapa de uso e cobertura da terra.

../../_images/fig01_sp.JPG

Será utilizado o shapefile do Estado de São Paulo, como mostrado abaixo para recortar o mapa acima exatamente no domínio deste estado..

../../_images/fig02_sp.JPG

O resultado será:

../../_images/fig03_sp.JPG

O trecho abaixo mostra como realizar este procedimento.

# Para instalar o gdal:
# conda install -c conda-forge gdal

from osgeo import gdal

# 'sao_paulo.tif': É o arquivo a ser gerado no computador. 
# 'GeoTIFF/brasil_coverage_2022.tif': É o arquivo a ser recortado. 
# 'SP_UF_2021/SP_UF_2021.shp': Máscara utilizada para recortar o dado.
# 'SP_UF_2021': Arquivo shapefile sem extensão.
# cropToCutline=True: Recorta exatamente no contorno do shapefile.

# Documentação do gdal (Warp):
# https://gdal.org/api/python/osgeo.gdal.html#osgeo.gdal.Warp

gdal.Warp(
    destNameOrDestDS='sao_paulo.tif', 
    srcDSOrSrcDSTab='GeoTIFF/brasil_coverage_2022.tif', 
    cutlineDSName='SP_UF_2021/SP_UF_2021.shp', 
    cutlineLayer='SP_UF_2021', 
    cropToCutline=True,
)

Download de dados do modelo GFS

O objetivo consiste em selecionar um horário de simulação do modelo americano Global Forecast System (GFS) sem realizar o download dele na máquina, selecionar algumas variáveis de interesse e salvar apenas as variáveis selecionadas localmente no formato NetCDF.

Selecionar variáveis de interesse:

Basta visualizar um dos arquivos com a extensão .idx. Exemplo: gfs.t00z.pgrb2.0p50.f012.idx.

Uma vez selecionada as variáveis, nota-se que tem um número para cada linha do arquivo .idx, este é o número que será utilizado para selecionar as variáveis.

Exemplo: Serão selecionadas as variáveis abaixo: TMP, UGRD, VGRD e APCP que possuem a seguinte númeração: 581, 588, 589 e 596, respectivamente. Lembrando que essa informação veio do arquivo .idx

581:127174079:d=2024032800:TMP:2 m above ground:12 hour fcst:
588:128579005:d=2024032800:UGRD:10 m above ground:12 hour fcst:
589:128863326:d=2024032800:VGRD:10 m above ground:12 hour fcst:
596:431949438:d=2024032800:APCP:surface:0-3 hour acc fcst:

A linha de comando abaixo selecionará essas variáveis de interesse e o resultado será armazenado no arquivo gfs.t00z.pgrb2.0p25.f002.nc.

gdal_translate /vsicurl/https://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.20240328/00/atmos/gfs.t00z.pgrb2.0p50.f012 -b 581 -b 588 -b 589 -b 596 -projwin -58 2 -46 -9 -of netcdf -co "FORMAT=NC" gfs.t00z.pgrb2.0p25.f002.nc

Explicando o comando:

  • Faz o download do horário de simulação (f012) de interesse:

    • /vsicurl/https://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.20240328/00/atmos/gfs.t00z.pgrb2.0p50.f012

  • Seleciona as bandas (variáveis) de interesse a partir do arquivo .idx:

    • -b 581 -b 588 -b 589 -b 596

  • Recorta o dado na área de interesse. Convenção: longitude oeste (-58), latitude norte (2), longitude leste (-46) e latitude sul (-9):

    • -projwin -58 2 -46 -9

  • Salva o arquivo no formato NetCDF:

    • -of netcdf -co “FORMAT=NC”

  • Nome do arquivo a ser gerado no computador. É o nome definido pelo usuário:

    • gfs.t00z.pgrb2.0p25.f002.nc

Para salvar no formato GeoTIFF, basta remover o trecho -of netcdf -co "FORMAT=NC do comando acima:

gdal_translate /vsicurl/https://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.20240328/00/atmos/gfs.t00z.pgrb2.0p50.f012 -b 581 -b 588 -b 589 -b 596 -projwin -58 2 -46 -9 gfs.t00z.pgrb2.0p25.f002.tif

Para salvar todo o domínio espacial, sem recortar o dado, basta remover o parâmetro -projwin -58 2 -46 -9.

gdal_translate /vsicurl/https://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.20240328/00/atmos/gfs.t00z.pgrb2.0p50.f012 -b 581 -b 588 -b 589 -b 596 -of netcdf -co "FORMAT=NC" gfs.t00z.pgrb2.0p25.f002.nc

Para visualizar o conteúdo do arquivo (ver o nome das bandas ou variáveis), basta fazer:

gdalinfo gfs.t00z.pgrb2.0p25.f002.nc

ou

gdalinfo gfs.t00z.pgrb2.0p25.f002.tif

Calcular a velocidade do vento.

Antes precisamos saber o nome das bandas ou componentes do vento (u [zonal] e v [meridional]). Para isso, será utilizado o comando gdalinfo.

Exemplo:

gdalinfo gfs.t00z.pgrb2.0p25.f002.tif

Parte do resultado do comando acima é mostrado abaixo. O arquivo gfs.t00z.pgrb2.0p25.f002.tif possui 4 bandas ou variáveis (TMP, UGRD, VGRD e APCP).

Band 2 Block=720x1 Type=Float64, ColorInterp=Undefined
  Description = UGRD:10 m above ground:12 hour fcst
  Metadata:
    GRIB_COMMENT=u-component of wind [m/s]
    GRIB_DISCIPLINE=0(Meteorological)
    GRIB_ELEMENT=UGRD
    GRIB_FORECAST_SECONDS=43200

Band 3 Block=720x1 Type=Float64, ColorInterp=Undefined
  Description = VGRD:10 m above ground:12 hour fcst
  Metadata:
    GRIB_COMMENT=v-component of wind [m/s]
    GRIB_DISCIPLINE=0(Meteorological)
    GRIB_ELEMENT=VGRD
    GRIB_FORECAST_SECONDS=43200

A componente u representa a variável UGRD que é a banda 2 (Band 2). A componente v, é representada pela variável VGRD que é a banda 3 (Band 3). Esses valores 2 e 3 serão utilizados para calcular a velocidade do vento nos parâmetros --U_band=2 e --V_band=3.

O comando para calcular a velocidade é:

gdal_calc.py -U gfs.t00z.pgrb2.0p25.f002.tif --U_band=2 -V gfs.t00z.pgrb2.0p25.f002.tif --V_band=3 --calc="sqrt(U*U+V*V)" --NoDataValue=-999 --format=netcdf --overwrite --outfile velocidade.nc

Explicando o comando acima:

  • -U gfs.t00z.pgrb2.0p25.f002.tif

    • -U é um nome qualquer que aponta para o arquivo gfs.t00z.pgrb2.0p25.f002.tif, neste caso, a componente u do vento.

  • –U_band=2

    • Correspondente a variável u do vento. O valor 2 quer dizer que a variável u é representada pelo nome Band 2 que está no arquivo (verificado com o gdalinfo).

  • -V gfs.t00z.pgrb2.0p25.f002.tif

    • -V é um nome qualquer que aponta para o arquivo gfs.t00z.pgrb2.0p25.f002.tif, neste caso, a componente v do vento.

  • –V_band=3

    • Correspondente a variável v do vento. O valor 3 quer dizer que a variável v é representada pelo nome Band 3 que está no arquivo (verificado com o gdalinfo).

  • –calc=sqrt(U*U+V*V)”

    • É o calculo da velocidade do vento em m/s.

  • –NoDataValue=-999

    • Define o valor ausente ou undef.

  • –format=netcdf

    • Salva o arquivo no format NetCDF.

  • –overwrite

    • No caso de executar o mesmo comando, sobreescreve o arquivo.

  • –outfile velocidade.nc

    • É o nome do arquivo que contém a velocidade do vento (m/s).