¿Alinear muchos rásteres con PyQGIS o Python?


8

Quiero alinear muchos rásteres en algún tamaño de píxel, extensión y sistema de proyección usando Python o PyQGIS.

Primero piense en usar GDAL:

  1. gdalinfo (para buscar información del ráster de referencia)

  2. gdalwarp (para convertir el sistema de proyección y el tamaño de píxel)

  3. gdal_translate (para convertir la extensión)

Funcionan, pero no es fácil usar esas herramientas juntas en Python y necesitan mucho tiempo para terminar este trabajo. Además, se puede hacer fácilmente usando QGIS y Align Rasters Tool.

ingrese la descripción de la imagen aquí

¿Existe una herramienta que haga este trabajo usando PyQGIS o Python? (Quiero trabajar más programación automáticamente)

ACTUALIZAR

Encuentro este código de esta pregunta :

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

Ese código funciona bien, excepto el clip de trama. ¿Alguna idea de cómo actualizar este código para recortar el ráster de entrada en la extensión del ráster de referencia en el código?


2
No estoy de acuerdo con que "no es fácil usar herramientas [gdal] juntas en Python". Es bastante simple. De todos modos, puede consultar esta publicación para obtener ideas sobre cómo recortar sus rásteres con un ráster. (Yo iría a la ruta del gdal, yo mismo). Gis.stackexchange.com/questions/125202/…
Jon

@Jon eso no funciona para mí
Mar

Bueno, si quieres ayuda, probablemente deberías publicar lo que intentaste y lo que no funcionó.
Jon

Respuestas:


1

Enfoque GDAL y tiempo

Estoy de acuerdo con @user: 78446: gdal es la mejor manera de avanzar y debería poder usar las herramientas que ya menciona, es decir, gdalwarp, gdaltranslate, etc. Este será un proceso bastante largo ya que para cada ráster, cada celda necesita ser realineada y esencialmente re-interpolado para tener en cuenta la realineación de la celda, incluso más en función del tamaño de la trama.

Por cierto, en cualquiera de los siguientes análisis, asegúrese de tener en cuenta estos cambios en el valor del píxel de la trama también, especialmente si las realineaciones de la trama son a distancias muy grandes.


GDAL y Python

Mirando alrededor del foro encontrarás muchos ejemplos que demuestran cómo unir gdal y python juntos, por ejemplo, aquí .

Además, consulte la ayuda aquí para trabajar juntos con gdal y Python.


0

Parece que puedes usar gdal.Warp en lugar de ReprojectImage, como en

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

(El código se toma de https://gis.stackexchange.com/a/237372/15183 ).


0

Funciona bien para mi. Solo fijado GA_ReadOnlyen una línea

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

a

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

El script reproyecta y recorta el ráster de entrada (toda Europa) a la resolución y extensión del ráster de referencia (parte central), resultado:

ingrese la descripción de la imagen aquí

gdalwarptambién se puede usar para alinear rásteres (¿ Cambiar el tamaño de píxel en el archivo 'asc' usando Qgis? )

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.