GeoTIFFs yang dibuat di GDAL tidak memiliki rentang min / maks saat dimuat dalam Arc / QGIS

11

Saya membuat beberapa raster floating point di GDAL dengan driver GeoTIFF. Ketika saya memuat gambar yang dihasilkan ke QGIS atau Arc simbologi default menempatkan min di -3,40282e38 dan maks menjadi 3,40282e38, sehingga raster terlihat benar-benar abu-abu. Apakah ada cara saya dapat menulis kisaran aktual ke dalam GeoTIFF secara langsung sehingga ketika dimuat ke dalam program SIG secara otomatis skala histogram dengan baik? Saya sudah mencoba membuat histogram default seperti ini:

rasterMin, rasterMax = raster.GetRasterBand(1).ComputeRasterMinMax()
raster.GetRasterBand(1).SetDefaultHistogram(rasterMin, rasterMax, 255)

Tapi saya mendapatkan kesalahan yang terlihat seperti masalah yang mengikat:

  File "/usr/lib/python2.6/dist-packages/osgeo/gdal.py", line 846, in SetDefaultHistogram
    return _gdal.Band_SetDefaultHistogram(self, *args)
TypeError: not a sequence

Ada saran tentang apa yang bisa saya lakukan, atau jika saya melakukan kesalahan?

Kaya
sumber

Jawaban:

8

Jika Anda menghasilkan data, maka Anda dapat melacak min dan maks dengan cepat. Jika Anda tidak memiliki kendali langsung terhadap data sumber, katakanlah jika Anda mengomposit data yang ada, maka menggunakan ComputeRasterMinMax(0)tidak apa-apa.

Either way, setelah Anda mendapatkan nilai min dan max Anda, Anda harus memanggil SetStatistics()band, dan memastikan Anda mengatur dataset NoneAnda ketika Anda selesai untuk memastikan semuanya ditulis ke disk.

Juga, sesuatu di bagian belakang pikiran saya mengatakan kepada saya menggunakan dataset.GetRasterBand(1).<some band function>tidak akan berfungsi dengan baik karena cara GDAL Python menangani referensi band. Saya tidak dapat mengingat detailnya, tetapi ada sesuatu di milis GDALDev beberapa waktu lalu. Jadi yang terbaik adalah membuat variabel band secara eksplisit:, band = dataset.GetRasterBand(1)lalu panggil band.SetStatistics(min, max, mean, stddev).

MerseyViking
sumber
Terima kasih, ini berhasil, dan terima kasih untuk konteksnya. Ngomong-ngomong, saya bisa membuat sarang referensi band tanpa variabel sementara tanpa masalah.
Kaya
Perhatikan bahwa band.ComputeStatistics(0)juga menyimpan statistik. Ini adalah 1-baris yang mudah.
Mike T
1

Saya tidak mengetahui cara untuk melakukannya menggunakan GDAL, tetapi Anda dapat menggunakan python untuk memanggil alat 'hitung statistik' di Arc.

Cyrus
sumber
2
Hai Cyrus, selamat datang di GIS.se :) Sementara mengoreksi jawaban Anda tidak mungkin untuk menarik suara karena dua alasan. Alat statistik penghitungan arcpy menempatkan statistik dalam file .aux eksternal dan poster meminta "ke geotiff secara langsung". Kedua, meskipun Arcgis disebutkan dalam judul, isi pertanyaan dan tag-nya menunjukkan bahwa poster tersebut benar-benar lebih tertarik pada solusi gdal / qgis. Bagaimanapun, terima kasih telah berkontribusi dan terus melakukannya. Ini sedikit kurva pembelajaran untuk memulai, tetapi saya pikir Anda akan menemukan dari waktu ke waktu bahwa upaya membayar sendiri.
matt wilkie