Alasan untuk penampilan terpadu ini adalah bahwa setiap gambar tunggal digambar dengan skala abu-abu yang membentang dari gambar min ke gambar max, dan BUKAN melintasi global min / maks. Saat Anda menggabungkan semua gambar menjadi satu, well, hanya ada satu min / maks. Hal yang sama berlaku untuk VRT, karena VRT memperlakukan semua gambar sebagai satu (ketika Anda melihat ke dalam file VRT Anda akan melihat statistik umum).
Saat keduanya, bergabung dan VRT, bukan merupakan opsi, skrip berikut dapat membantu.
Pada loop pertama saya beralih pada semua layer, memilih raster dan mendapatkan estimasi interval min / max mereka. Ini adalah cara kerja QGIS sendiri. Dari nilai min / maks ini saya menghitung global min / maks
Pada loop kedua renderers untuk semua layer raster dikonfigurasi sedemikian rupa sehingga skala abu-abu direntangkan melintasi interval global minimum / maksimum.
gmin = 9999
gmax = -9999
layers = []
# loop over all layers, take rasters and estimate min, max values
for layer in iface.mapCanvas().layers():
if isinstance(layer, QgsRasterLayer):
# change percentages and sample size to increase or decrease accuracy
min_max = layer.dataProvider().cumulativeCut(1, 0.02, 0.98, theSampleSize=250000)
gmin = min(gmin, min_max[0])
gmax = max(gmax, min_max[1])
layers.append(layer)
# for all rasters create a single band gray scale renderer with
# gray scale stretched across the interval [gmin..gmax]
for rasterlayer in layers:
renderer = QgsSingleBandGrayRenderer(rasterlayer.dataProvider(), 1)
# take the first band (0)
ce = QgsContrastEnhancement(rasterlayer.dataProvider().dataType(0))
ce.setContrastEnhancementAlgorithm(QgsContrastEnhancement.StretchToMinimumMaximum)
ce.setMinimumValue(gmin)
ce.setMaximumValue(gmax)
renderer.setContrastEnhancement(ce)
rasterlayer.setRenderer(renderer)
# refresh canvas to show changes
iface.mapCanvas().refresh()