Aligner de nombreux rasters à l'aide de PyQGIS ou Python?

8

Je souhaite aligner de nombreux rasters dans une taille de pixel, une étendue et un système de projection à l'aide de Python ou PyQGIS.

Pensez d'abord à utiliser GDAL:

  1. gdalinfo (pour rechercher des informations à partir du raster de référence)

  2. gdalwarp (pour convertir le système de projection et la taille des pixels)

  3. gdal_translate (pour convertir l'étendue)

Ils fonctionnent, mais il n'est pas facile d'utiliser ces outils ensemble en Python et ils ont besoin de beaucoup de temps pour terminer ce travail. En outre, cela peut être fait facilement en utilisant QGIS et Align Rasters Tool.

entrez la description de l'image ici

Existe-t-il un outil effectuant ce travail en utilisant PyQGIS ou Python? (Je veux travailler plus de programmation automatiquement)

MISE À JOUR

Je trouve ce code à partir de cette question :

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

Ce code fonctionne très bien sauf le clip raster. Une idée de la façon de mettre à jour ce code pour découper le raster en entrée dans la mesure du raster de référence dans le code?

Mar
la source
2
Je ne suis pas d'accord sur le fait "qu'il n'est pas facile d'utiliser les outils [gdal] ensemble en Python". C'est assez simple. Quoi qu'il en soit, vous pouvez consulter ce post pour des idées sur la façon de découper vos rasters avec un raster. (Je choisirais la route gdal, moi-même.) Gis.stackexchange.com/questions/125202/…
Jon
Qui fonctionne pas @ Jon pour moi
Mar
Eh bien, si vous voulez de l'aide, vous devriez probablement poster ce que vous avez essayé et ce qui n'a pas fonctionné.
Jon

Réponses:

1

Approche et temps GDAL

Je suis d'accord avec @user: 78446 - gdal est la meilleure façon de progresser et vous devriez pouvoir utiliser les outils que vous mentionnez déjà, c'est-à-dire gdalwarp, gdaltranslate etc. Ce sera un processus assez long car pour chaque raster, chaque cellule doit être réalignée et essentiellement ré-interpolé pour tenir compte du réalignement des cellules - encore plus longtemps en fonction de la taille du raster.

Soit dit en passant, dans toutes les analyses suivantes, assurez-vous de prendre également en compte ces changements de valeur de pixel de trame, en particulier si les réalignements de trame sont sur de très grandes distances.


GDAL et Python

En parcourant le forum, vous trouverez de nombreux exemples montrant comment lier gdal et python ensemble, par exemple ici .

Consultez également l' aide ici pour travailler ensemble avec gdal et Python.

ChrisWills
la source
0

Il semble que vous pouvez utiliser gdal.Warp au lieu de ReprojectImage, comme dans

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']
)

(Le code est extrait de https://gis.stackexchange.com/a/237372/15183 ).

til_b
la source
0

Fonctionne bien pour moi. Fixé uniquement GA_ReadOnlysur une ligne

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

à

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

Reprojetez le script et découpez le raster en entrée (toute l'Europe) à la résolution et à l'étendue du raster de référence (partie centrale).

entrez la description de l'image ici

gdalwarppeut également être utilisé pour aligner les rasters ( Changer la taille des pixels dans le fichier 'asc' en utilisant Qgis? )

Oto Kaláb
la source