Como e quando usar as ferramentas “Warp (reproject)”, “Clip raster by extent” e “Clip raster by mask layer” do QGIS 3

Além disso, a solução para: após cortar meu raster com base em outro raster, eles continuam com tamanhos diferentes

Colegas pesquisadores e entusiastas de SIG de código-livre,

Bem-vindos ao meu blog!

Gostaria de começar com um aviso - posso ser uma pesquisadora desta área, mas isso não significa que tudo o que faço ou escrevo aqui funcionará para você, em suas próprias configurações de desktop e versões de pacotes. Me eximo de responsabilidade se você perder dados ou bagunçar sua instalação. Eu também não autorizo nenhuma cópia do meu conteúdo.

Hoje, vamos discutir diferentes maneiras de cortar (recortar) um raster no QGIS 3.X e o que elas fazem. Em especial, estou comparando as ferramentas do QGIS provenientes do GDAL “Clip raster by mask layer” (Recortar raster por camada máscara), “Clip raster by extent” (Recortar raster pela extensão) e “Warp (reproject)”, para que servem, e o que exatamente fazem com os dados raster originais.

Configurando o raster a ser cortado e a máscara vetorial

Neste exemplo, estou usando o QGIS 3.18 “Zürich” e rasters e vetores personalizados.

Inicialmente, gerei um raster 3x4 .tif aleatório com valores discretos de 2 a 7.

randomized raster randomized raster legend

Com estas definições:

Dimensions X: 3 Y: 4 Bands: 1

Pixel Size 12500,-12500

Se eu cortar este raster com uma máscara vetorial como esta (Polígono, .shp)

randomized raster and mask

Alguma coisa será cortada?

A resposta é sim. Mas o quê, depende da ferramenta que você usa.

Usando “Clip raster by mask layer” do GDAL

Clip raster by mask layer

Na configuração da ferramenta, defina apenas o raster de entrada e a camada de máscara

Clip raster by mask layer setup

Você obtém este raster:

clipped raster

Dimensions X: 1 Y: 2 Bands: 1

Pixel Size 12500,-12500

Sim, só esses dois pixels. Por quê? Vamos verificar o raster e a máscara originais novamente:

randomized raster and clipped raster

Todos os pixels externos foram cortados pela camada de máscara, então o algoritmo manteve apenas os dois internos.

Usando Clip Raster by Extent do GDAL

clip raster by extent

Na configuração da ferramenta, escolha a camada raster de entrada e a camada que dita o tamanho do corte.

clip raster by extent setup

Rode o algoritmo.

O raster resultante é:

clip raster by extent result clip raster by extent result legend

Dimensions X: 3 Y: 4 Bands: 1

Pixel Size 12500,-12500

A ferramenta retirou a coluna mais à direita do raster e adicionou um preenchimento de zeros à sua esquerda, como podemos ver quando plotamos o raster gerado junto com o raster original:

clip raster by extent result legend

Usando um vetor diferente como máscara (na imagem, sobre o raster original)…

clip raster by extent with other mask

Resulta em apenas os pixels que estão totalmente fora da extensão da máscara cortados para fora do raster.

clip raster by extent with other mask, result

Dimensions X: 2 Y: 2 Bands: 1

Pixel Size 12500,-12500

Usando “Warp (reproject)” do GDAL

warp reproject

Adicione o vetor usado para cortar o raster.

warp reproject warp reproject

Quando você clica na camada vetorial pra ser usada como máscara de corte, sua extensão é preenchida no campo que diz “Not set”. Escolha o sistema de coordenadas da camada escolhida para cortar (neste caso, “retangulo” está em WGS84).

warp reproject

Rode o algoritmo.

Este é o resultado:

warp reproject

Dimensions X: 3 Y: 4 Bands: 1

Pixel Size 12185.00049795155974,-11712.21441720891744

O tamanho do pixel mudou, mas as dimensões do raster continuam as mesmas. Isso significa que a extensão do novo raster é diferente da do original. Para mostrar isso mais claramente, apliquei uma simbologia diferente

warp reproject

Ativando as duas camadas ao mesmo tempo, “Rand Raster” (o original) e “Warp Reproject” (o novo), podemos ver que o raster foi, com certeza, recortado:

warp reproject

Então, as diferenças entre as ferramentas são

Clip raster by mask layer deixa todos os pixels que estão parcialmente fora da máscara fora do raster resultante. Mantém a resolução do raster e não realiza nenhuma interpolação. Use este quando seu objetivo é preservar os valores originais e a resolução do raster. Também, use esta ferramenta quando precisar usar uma máscara de corte que não seja retangular (visto que as alternativas servem só para máscaras retangulares).

Clip raster by extent deixa todos os pixels que estão completamente fora dos limites da máscara fora do raster resultante. Também mantém a resolução do raster e não realiza nenhuma interpolação. Use este quando seu objetivo é preservar os valores originais e a resolução do raster. Neste algoritmo, você pode usar, não só máscaras vetoriais, como também a extensão territorial de uma camada raster, para o corte.

Warp (reproject) recorta o raster exatamente sobre a máscara (retangular) que foi fornecida. Para isso, é necessária uma interpolação (embora o padrão seja “Vizinho Mais Próximo” – Nearest Neighbor, que copia o valor do pixel do raster original que está mais próximo de cada pixel do raster criado). Ao usar Warp (reproject), o tamanho e a resolução dos pixels podem mudar. Use esta ferramenta quando precisar ajustar o tamanho de um raster para corresponder ao tamanho de um vetor ou de outro raster.

Warp (reproject) e Clip raster by mask layer são baseados na mesma ferramenta do GDAL?

Sim.

O GDAL Warp é uma ferramenta muito flexível, que possui muitas opções. Essas duas ferramentas do QGIS 3.18 são adaptações do Warp com opções diferentes. Você pode verificar todas as opções em https://gdal.org/programs/gdalwarp.html

É possível ver isso na tela de configuração antes de executar o algoritmo, abaixo de “GDAL/OGR console call”.

Para Clip raster by mask layer:

gdalwarp -of GTiff -cutline D:\...\retangulo.shp -cl retangulo -crop_to_cutline D:/… /rand_raster.tif C:/…/OUTPUT.tif

As opções usadas são “-cutline” e “-crop_to_cutline”.

“-cutline” seleciona o vetor usado para cortar o raster. “-cl” é o nome do layer do vetor carregado. “-crop_to_cutline” muda o tamanho do raster de acordo com o corte feito. Se “-crop_to_cutline” não fosse utilizado, o raster resultante manteria o antigo tamanho, mas locais fora da máscara vetorial receberiam o valor “No Data”.

Para o Warp (reproject):

gdalwarp -r near -te -52.62951648 -29.26231411 -52.248264859 -28.84361955 -te_srs EPSG:4326 -of GTiff D:/… /rand_raster.tif C:/…/OUTPUT.tif

As opções usadas são “-r”, “-te”, e “-te_srs”.

“-r near” escolhe o tipo de interpolação, Nearest Neighbor. “-te -52.62951648 -29.26231411 -52.248264859 -28.84361955” são os limites da máscara vetorial da qual foi retirada a extensão (“retângulo”). “-te_srs EPSG:4326” é o Sistema de coordenadas no qual a extensão foi fornecida.

Qual ferramenta do GDAL está associada com a ferramenta do QGIS “Clip raster by extent”?

GDAL translate. Isso também pode ser visto no GDAL/OGR console call:

gdal_translate -projwin 342205.0947980235 6794960.329155264 365666.03336452536 6771499.432501004 -of GTiff D:/…/rand_raster.tif C:/…/OUTPUT.tif

A opção “-projwin” seleciona uma janela (extensão) da qual o raster será recortado.

E se eu quiser recortar um raster com uma máscara, mas ainda assim, não quiser que o tamanho do pixel (resolução) mude?

Se você preencher o campo “Output file resolution in target georeferenced units” no Warp (reproject) você se assegura de que o tamanho do pixel será aquele que você escolheu. Preencha esse campo com o valor do tamanho do pixel do raster original. Porém, em um caso como o do nosso exemplo, o que o algoritmo vai fazer é simplesmente “mover” o seu raster para o começo da máscara utilizada como corte, já que ele está sendo forçado a manter o mesmo tamanho de pixel.

moved raster moved raster legend

Dimensions X: 3 Y: 4 Bands: 1

Pixel Size 12500,-12500

É possível recortar um raster com base em outro raster no QGIS?

Sim. Para fazer isso, você deve, na ferramenta Warp (reproject), escolher um raster como extensão de corte (“Georeferenced extents of output file to be created”). Isso criará um raster que tem exatamente o mesmo tamanho que o layer selecionado. Para ter certeza que os grids têm o mesmo tamanho (pixels, dimensões, extensão), além de escolher o outro raster como extensão de corte, você deve preencher o campo do tamanho de pixel com o tamanho do pixel do raster que você quer que o seu raster fique compatível. E, para melhores resultados, escolha um método de interpolação adequado.

É possível recortar um raster com base em outro raster no QGIS, sem que isso envolva nenhum tipo de interpolação?

Sim. Para fazer isso, use a ferramenta “Clip raster by extent”, mas esteja ciente que a extensão do raster resultante pode sair diferente da do raster usado como máscara de corte! A extensão só vai ser exatamente igual se os grids dos dois rasters forem iguais em tamanho de pixel, resolução, projeção e localização.

Eu recortei um raster com base em outro raster e os tamanhos deles ficaram diferentes. O que pode ter acontecido? Como resolver?

O que pode ter acontecido é que você pode ter usado “Clip raster by extent” quando deveria ter usado “Warp (reproject)”. Tente novamente, usando a ferramenta “Warp (reproject)”.

Luísa Vieira Lucchese
Luísa Vieira Lucchese
Pós-doutoranda

Pós-doutoranda na Universidade de Pittsburgh

Relacionados