Menyelaraskan banyak raster menggunakan PyQGIS atau Python?


8

Saya ingin menyelaraskan banyak raster dalam beberapa ukuran piksel, luas dan sistem proyeksi menggunakan Python atau PyQGIS.

Pikiran pertama adalah menggunakan GDAL:

  1. gdalinfo (untuk mencari informasi dari raster referensi)

  2. gdalwarp (untuk mengonversi sistem proyeksi dan ukuran piksel)

  3. gdal_translate (untuk mengonversi luas)

Mereka bekerja, tetapi tidak mudah untuk menggunakan alat-alat itu bersama-sama dengan Python dan mereka membutuhkan banyak waktu untuk menyelesaikan pekerjaan ini. Selain itu, dapat dilakukan dengan mudah menggunakan QGIS dan Align Rasters Tool.

masukkan deskripsi gambar di sini

Apakah ada alat yang melakukan pekerjaan ini menggunakan PyQGIS atau Python? (Saya ingin bekerja lebih banyak pemrograman secara otomatis)

MEMPERBARUI

Saya menemukan kode ini dari pertanyaan ini :

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

Kode itu berfungsi dengan baik kecuali klip raster. Adakah yang tahu cara memperbarui kode ini ke raster input klip hingga rujukan referensi dalam kode?


2
Saya tidak setuju bahwa "tidak mudah menggunakan alat [gdal] bersama-sama dengan Python." Cukup sederhana. Bagaimanapun, Anda dapat melihat posting ini untuk ide-ide tentang cara memotong raster Anda dengan raster. (Saya akan pergi ke rute gdal, sendiri.) Gis.stackexchange.com/questions/125202/…
Jon

@ Jon yang tidak bekerja untuk saya
Mar

Nah, jika Anda ingin bantuan, Anda mungkin harus memposting apa yang Anda coba dan yang tidak berhasil.
Jon

Jawaban:


1

Pendekatan dan waktu GDAL

Saya setuju dengan @user: 78446 - gdal adalah cara terbaik ke depan dan Anda harus dapat menggunakan alat yang sudah Anda sebutkan yaitu gdalwarp, gdaltranslate dll. Ini akan menjadi proses yang cukup panjang karena untuk setiap raster, setiap sel harus disesuaikan. dan pada dasarnya diinterpolasi kembali untuk memperhitungkan penyelarasan sel - bahkan lebih lama berdasarkan ukuran raster.

Kebetulan dalam analisis berikut, pastikan untuk memperhitungkan perubahan nilai piksel raster ini juga - terutama jika penyelarasan raster berada pada jarak yang sangat besar.


GDAL dan Python

Dengan melihat-lihat forum, Anda akan menemukan banyak contoh yang menunjukkan cara merangkai gdal dan python bersama, misalnya di sini .

Juga, lihat bantuan di sini untuk bekerja dengan gdal dan Python bersama.


0

Tampaknya Anda dapat menggunakan gdal.Warp alih-alih ReprojectImage, seperti pada

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

(Kode diambil dari https://gis.stackexchange.com/a/237372/15183 ).


0

Bekerja dengan baik untuk saya. Hanya diperbaiki GA_ReadOnlydalam satu baris

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

untuk

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

Script memproyeksi ulang dan klip raster input (seluruh Eropa) ke resolusi dan tingkat raster referensi (bagian tengah), hasilnya:

masukkan deskripsi gambar di sini

gdalwarpdapat juga digunakan untuk menyelaraskan raster ( Mengubah ukuran piksel dalam file 'asc' menggunakan Qgis? )

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.