এই মোসাইকৃত চেহারার কারণ হ'ল প্রতিটি একক চিত্র ধূসর স্কেল দিয়ে চিত্রের নূন্যতম থেকে চিত্র সর্বাধিক পর্যন্ত ছড়িয়ে থাকে এবং বিশ্বব্যাপী ন্যূনতম / সর্বাধিক নয় NOT আপনি যখন সমস্ত চিত্র এক সাথে একীভূত করেন, ভাল, কেবলমাত্র এক মিনিট / সর্বোচ্চ। ভিআরটি-র ক্ষেত্রেও একই সত্য, যেহেতু ভিআরটি সমস্ত চিত্রকে এক হিসাবে বিবেচনা করে (যখন আপনি ভিআরটি ফাইলটি দেখেন তখন আপনি সাধারণ পরিসংখ্যান দেখতে পাবেন)।
যখন উভয়, মার্জ এবং ভিআরটি, কোনও বিকল্প নয় যখন নিম্নলিখিত স্ক্রিপ্টটি সহায়তা করতে পারে।
প্রথম লুপটিতে আমি সমস্ত স্তরগুলিতে পুনরাবৃত্তি করি, রাস্টারগুলি বাছাই করে এবং তাদের ন্যূনতম / সর্বাধিক বিরতি সম্পর্কে অনুমান করি। এই পদ্ধতিটি কিউজিআইএস নিজেই কাজ করে। এই সর্বনিম্ন / সর্বোচ্চ মানগুলি থেকে আমি বিশ্বব্যাপী ন্যূনতম / সর্বাধিক গণনা করি
দ্বিতীয় লুপে সমস্ত রাস্টার স্তরগুলির জন্য উপস্থাপকগুলি এমনভাবে কনফিগার করা হয়েছে যে ধূসর স্কেলটি ব্যবধানটি বিশ্বব্যাপী ন্যূনতম মিনিট / সর্বোচ্চ পর্যন্ত প্রসারিত ched
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()