สุจริตมันง่ายต่อการทำเช่นนี้โดยใช้gdalbuildvrtในหรือsubprocess
os.system
หากคุณต้องการทำสิ่งนี้ผ่าน Python ก็สามารถทำได้ ใช้วิธีการสร้างชุดข้อมูลมาตรฐานภายใน GDAL หลามเราสามารถสร้างชุดข้อมูลฐานVRT
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
โปรดทราบว่าเรากำลังสร้างชุดข้อมูลโดยไม่มีแบนด์ในตอนแรก จากเอกสารในVRTsว่าชุดข้อมูล VRT เป็นหนึ่งในประเภทชุดข้อมูลที่ไม่กี่แห่งที่สามารถยอมรับAddBand
ข้อโต้แย้ง
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
ตอนนี้สำหรับแต่ละแบนด์เราต้องตั้งค่ารายการเมทาดาทาด้วยตนเอง:
simple_source = '<SourceFilename relativeToVRT="1">%s</SourceFilename>' % source_path + \
'<SourceBand>%i</SourceBand>' % source_band + \
'<SourceProperties RasterXSize="%i" RasterYSize="%i" DataType="Real" BlockXSize="%i" BlockYSize="%i"/>' % (x_size, y_size, x_block, y_block) + \
'<SrcRect xOff="%i" yOff="%i" xSize="%i" ySize="%i"/>' % (x_offset, y_offset, x_source_size, y_source_size) + \
'<DstRect xOff="%i" yOff="%i" xSize="%i" ySize="%i"/>' % (dest_x_offset, dest_y_offset, x_dest_size, y_dest_size)
band.SetMetadataItem("SimpleSource", simple_source)
band.SetMetadataItem("NoDataValue", -9999)
SetMetadatItem
ใช้เวลาสองข้อโต้แย้งสตริงแรกของรายการเมตาดาต้ารายการที่สองเอง ซึ่งหมายความว่าคุณไม่สามารถเซ็ตย่อยรายการเมทาดาทาได้ดังนั้นสำหรับแหล่งข้อมูลคุณต้องตั้งค่าเนื้อหาทั้งหมดเป็นสตริง
โปรดทราบว่าเราสามารถใช้วิธีนี้เพื่อสร้างแหล่งที่ซับซ้อน ( ComplexSource
) ที่มีการค้นหาตารางค่าแหล่งตัวกรองเคอร์เนล ( KernelFilteredSource
) ขนาดและรูปร่างโดยพลการและวงหน้ากาก ( MaskBand
)