Чесно кажучи, це простіше зробити за допомогою gdalbuildvrt в a subprocess
або os.system
.
Якщо ви хочете зробити це через Python, це можна зробити. Використовуючи стандартні методи створення наборів даних у GDAL Python, ми можемо легко створити базовий VRT бази даних .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Зауважте, що ми спочатку створюємо набір даних без смуг. З документації на VRT, що набори даних 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
).