इस मोज़ाइक उपस्थिति का कारण यह है कि प्रत्येक एकल छवि ग्रे स्केल के साथ खींची जाती है जो छवि मिनट से छवि अधिकतम तक फैली हुई है, और वैश्विक मिनट / अधिकतम पर नहीं। जब आप सभी छवियों को एक में मिलाते हैं, तो ठीक है, केवल एक मिनट / अधिकतम है। वीआरटी के लिए भी यही सच है, क्योंकि वीआरटी सभी छवियों को एक के रूप में मानता है (जब आप वीआरटी फ़ाइल पर एक नज़र डालते हैं तो आप सामान्य आँकड़े देखेंगे)।
जब दोनों, मर्ज और वीआरटी, एक विकल्प नहीं है तो निम्नलिखित स्क्रिप्ट मदद कर सकता है।
पहले लूप में, मैं सभी परतों पर पुनरावृति करता हूं, आपदाओं को उठाता हूं और उनके न्यूनतम / अधिकतम अंतराल का अनुमान लगाता हूं। यह तरीका है जैसे कि QGIS खुद काम करता है। इन न्यूनतम / अधिकतम मूल्यों से मैं वैश्विक मिनट / अधिकतम की गणना करता हूं
दूसरे लूप में सभी रेखापुंज परतों के लिए रेंडरर्स को कॉन्फ़िगर किया गया है जैसे कि ग्रे स्केल को इंटरवल ग्लोबल मिनट / अधिकतम तक फैलाया जाता है।
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()