ทำให้ rasters หลายชุดเหมือนกัน


10

ฉันได้นำเข้า rasters บางอย่างที่ควรจะเชื่อมต่ออย่างต่อเนื่อง แต่พวกเขาสร้างตารางที่มีขอบกั้นระหว่างพวกเขา ฉันอาจสันนิษฐานว่านี่เป็นเรื่องของการสอบเทียบระหว่างแรสเตอร์แต่ละอัน แต่ฉันไม่แน่ใจว่าจะรันมันอย่างไรในรูปแบบดาต้า

มีใครเคยมีประสบการณ์เช่นนี้มาก่อนและอาจจะรู้วิธีแก้ปัญหาที่เป็นไปได้เพื่อให้ภาพรวมของ rasters ทั้งหมดจะราบรื่นขึ้น

ทั้งหมดนี้ควรจะเชื่อมโยงกันในเชิงภูมิศาสตร์ ดังนั้นปัญหาของ 'ขอบเขต' ของสแควร์

ฉันใช้ QGIS บน windows

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


11
  1. คุณสามารถลองรวมแรสเตอร์เข้าด้วยกัน:

    • จากแถบเครื่องมือ:

      Raster> เบ็ดเตล็ด> ผสาน

    • จากกล่องเครื่องมือการประมวลผล:

      GDAL / OGR> เบ็ดเตล็ด> รวม

    • จากคอนโซล GDAL:

      gdal_merge.py -o merged.tif input1.tif input2.tif
      

  1. หรือสร้างแรสเตอร์เสมือนจริง:

    • Raster> เบ็ดเตล็ด> สร้าง Virtual Raster

1
+1 สำหรับสร้าง Virtual Raster สิ่งนี้จะสร้างไฟล์ขนาดเล็กมากที่จะทำหน้าที่เหมือนภาพที่รวมกัน
Alexandre Neto

@AlexandreNeto - ขอบคุณฉันได้สังเกตเห็นว่าแตกต่างในขนาดไฟล์เมื่อเทียบกับ rasters แยกต่างหากสามารถค่อนข้างส่าย =)
โจเซฟ

เมื่อเลือกผสานหรือสร้างแรสเตอร์เสมือนฉันได้รับข้อผิดพลาดที่ประกาศว่ากระบวนการไม่สามารถเริ่มต้นได้ porgram ไม่มีอยู่หรือฉันไม่มีสิทธิ์ที่ถูกต้อง ดังนั้นฉันจึงประสบความสำเร็จในการรวมหรือสร้างโดยการโหลดแรสเตอร์ทั้งหมดลงในเมนูเลเยอร์และเลือกจากที่นั่น บรรทัดคำสั่ง Gdal_merge.bat อาจยาวเกินไป atleast inputx.tif สามารถหยุดการทำงานที่ 1000 x (rasters ที่แตกต่างกัน)
MichaelR

@Michael - ข้อผิดพลาดแปลก ๆ แต่ดีใจที่คุณพบวิธีอื่นเพื่อให้ได้ผลลัพธ์ของคุณ :)
Joseph

1
@Michael ที่บรรทัดคำสั่งคุณสามารถป้อนgdalbuildvrtด้วยชื่อไฟล์ของไฟล์ที่มีรายการของไฟล์แล้วให้ไฟล์ภาพจำนวนมากเป็นอาร์กิวเมนต์: gdalbuildvrt -input_file_list my_liste.txt doq_index.vrt
Detlev

3

เหตุผลสำหรับลักษณะที่ปรากฏของกระเบื้องโมเสคนี้คือภาพแต่ละภาพถูกวาดด้วยสเกลสีเทาซึ่งขยายจากนาทีของภาพเป็นสูงสุดของภาพและไม่ครอบคลุมทั่วโลกต่อนาที เมื่อคุณรวมภาพทั้งหมดเป็นภาพเดียวก็มีเพียงหนึ่งนาที / สูงสุด เช่นเดียวกันกับ VRT เนื่องจาก VRT ปฏิบัติต่อภาพทั้งหมดเป็นภาพเดียว (เมื่อคุณดูในไฟล์ VRT คุณจะเห็นสถิติทั่วไป)

เมื่อทั้งสองผสานและ VRT ไม่ใช่ตัวเลือกสคริปต์ต่อไปนี้อาจช่วยได้

ในลูปแรกฉันวนซ้ำทุกเลเยอร์เลือกแรสเตอร์และรับช่วงเวลาต่ำสุด / สูงสุด นี่คือวิธีที่ 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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.