Lý do cho sự xuất hiện của mosaiked này là vì mỗi hình ảnh đơn lẻ được vẽ với tỷ lệ xám trải dài từ hình ảnh tối thiểu đến hình ảnh tối đa và KHÔNG trên toàn bộ mức tối thiểu / tối đa toàn cầu. Khi bạn hợp nhất tất cả các hình ảnh thành một, tốt, chỉ có một phút / tối đa. Điều này cũng đúng với VRT, vì VRT coi tất cả các hình ảnh là một (khi bạn xem tệp VRT, bạn sẽ thấy các số liệu thống kê chung).
Khi cả hai, hợp nhất và VRT, không phải là một tùy chọn, tập lệnh sau có thể giúp ích.
Trong vòng lặp đầu tiên, tôi lặp lại tất cả các lớp, chọn các trình quét và lấy ước tính khoảng thời gian tối thiểu / tối đa của chúng. Đây là cách như chính QGIS hoạt động. Từ các giá trị tối thiểu / tối đa này, tôi tính toán tối thiểu / tối đa toàn cầu
Trong vòng lặp thứ hai, các trình kết xuất cho tất cả các lớp raster được cấu hình sao cho thang màu xám được kéo dài trong khoảng thời gian tối thiểu / tối đa toàn cầu.
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()