Der Grund für dieses mosaikierte Erscheinungsbild ist, dass jedes einzelne Bild mit einer Graustufe gezeichnet wird, die von Bild min bis Bild max und NICHT über das globale min / max gestreckt ist. Wenn Sie alle Bilder zu einem zusammenführen, gibt es nur eine min / max. Gleiches gilt für VRT, da VRT alle Bilder als eins behandelt (wenn Sie in die VRT-Datei schauen, sehen Sie die allgemeinen Statistiken).
Wenn sowohl Merge als auch VRT keine Option sind, kann das folgende Skript hilfreich sein.
In der ersten Schleife durchlaufe ich alle Ebenen, wähle die Raster aus und erhalte eine Schätzung ihres Min / Max-Intervalls. So funktioniert QGIS selbst. Aus diesen Min / Max-Werten berechne ich die globalen Min / Max
In der zweiten Schleife werden die Renderer für alle Rasterebenen so konfiguriert, dass die Graustufen über das Intervall global min / max gestreckt werden.
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()