Alinhando muitos rasters usando PyQGIS ou Python?


8

Eu quero alinhar muitos rasters em algum tamanho de pixel, extensão e sistema de projeção usando Python ou PyQGIS.

Primeiro, pense é usar o GDAL:

  1. gdalinfo (para encontrar informações da varredura de referência)

  2. gdalwarp (para converter o sistema de projeção e o tamanho do pixel)

  3. gdal_translate (para converter extensão)

Eles funcionam, mas não é fácil usar essas ferramentas juntas no Python e precisam de muito tempo para concluir este trabalho. Além disso, isso pode ser feito facilmente usando o QGIS e a ferramenta Align Rasters .

insira a descrição da imagem aqui

Existe uma ferramenta fazendo esse trabalho usando PyQGIS ou Python? (Eu quero trabalhar mais programação automaticamente)

ATUALIZAR

Acho esse código a partir desta pergunta :

from osgeo import gdal, gdalconst

inputfile = #Path to input file
input = gdal.Open(inputfile, gdalconst.GA_ReadOnly)
inputProj = input.GetProjection()
inputTrans = input.GetGeoTransform()

referencefile = #Path to reference file
reference = gdal.Open(referencefile, gdalconst.GAReadOnly)
referenceProj = reference.GetProjection()
referenceTrans = reference.GetGeoTransform()
bandreference = reference.GetRasterBand(1)    
x = reference.RasterXSize 
y = reference.RasterYSize

outputfile = #Path to output file
driver= gdal.GetDriverByName('GTiff')
output = driver.Create(outputfile, x, y, 1, bandreference.DataType)
output.SetGeoTransform(referenceTrans)
output.SetProjection(referenceProj)

gdal.ReprojectImage(input, output, inputProj, referenceProj, gdalconst.GRA_Bilinear)

del output

Esse código funciona bem, exceto raster clip. Alguma idéia de como atualizar esse código para cortar a varredura de entrada até a extensão da varredura de referência no código?


2
Eu discordo que "não é fácil usar ferramentas [gdal] juntas no Python". É bem simples De qualquer forma, você pode olhar para este post para ter idéias sobre como cortar seus rasters com uma varredura. (Eu mesmo seguiria a rota gdal.) Gis.stackexchange.com/questions/125202/…
Jon

@ Jon que não funciona para mim
Mar

Bem, se você quer ajuda, provavelmente deve postar o que tentou e o que não deu certo.
Jon

Respostas:


1

Abordagem e tempo da GDAL

Concordo com @user: 78446 - gdal é a melhor maneira para a frente e você deve ser capaz de usar as ferramentas já que você menciona isto é gdalwarp, gdaltranslate etc. Isso vai ser um longo processo que para cada raster, as necessidades de cada célula a ser realinhados e essencialmente re-interpolado para levar em conta o realinhamento da célula - ainda mais com base no tamanho da varredura.

Aliás, em qualquer análise a seguir, certifique-se de levar em consideração também essas alterações no valor do pixel de varredura - especialmente se os realinhamentos da varredura estiverem em distâncias muito grandes.


GDAL e Python

Olhando ao redor do fórum, você encontrará muitos exemplos demonstrando como encadear gdal e python, por exemplo, aqui .

Além disso, confira a ajuda aqui para trabalhar com gdal e Python juntos.


0

Parece que você pode usar gdal.Warp em vez de ReprojectImage, como em

OutTile = gdal.Warp(OutTileName, Raster,
  format=RasterFormat, outputBounds=[minX, minY, maxX, maxY], 
  xRes=PixelRes, yRes=PixelRes, dstSRS=Projection, 
  resampleAlg=gdal.GRA_NearestNeighbour, options=['COMPRESS=DEFLATE']
)

(O código é obtido em https://gis.stackexchange.com/a/237372/15183 ).


0

Funciona bem para mim. Corrigido apenas GA_ReadOnlyem uma linha

reference = gdal.Open(referencefile, gdalconst.GAReadOnly)

para

reference = gdal.Open(referencefile, gdalconst.GA_ReadOnly)

O reprojeto de script e o clipe da varredura de entrada (toda a Europa) até a resolução e extensão da varredura de referência (parte central), resultam:

insira a descrição da imagem aqui

gdalwarptambém pode ser usado para alinhar rasters ( Alterar o tamanho do pixel no arquivo 'asc' usando o Qgis? )

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.