Sejujurnya lebih mudah untuk melakukan ini dengan menggunakan gdalbuildvrt dalam subprocess
atau os.system
.
Jika Anda ingin melakukan ini melalui Python, itu bisa dilakukan. Menggunakan metode pembuatan dataset standar dalam GDAL Python kita dapat dengan mudah membuat basis data VRT .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Perhatikan bahwa kami membuat dataset tanpa band pada awalnya. Dari dokumentasi di VRTs yang VRT dataset adalah salah satu dari beberapa jenis dataset yang dapat menerima AddBand
argumen.
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
Sekarang untuk setiap band kita harus mengatur item metadata secara manual:
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
mengambil dua argumen, pertama string item metadata, yang kedua item itu sendiri. Ini berarti bahwa Anda tidak dapat mengelompokkan item metadata, jadi untuk sumber data Anda harus mengatur seluruh konten sebagai string.
Perhatikan bahwa kita dapat menggunakan metode ini untuk membuat sumber kompleks ( ComplexSource
) yang berisi tabel nilai pencarian, sumber filter Kernel ( KernelFilteredSource
) dengan ukuran dan bentuk sewenang-wenang, dan Band Mask ( MaskBand
).
overviews
elemen, tetapi gdalbuildvrt tidak menggunakannya. Terima kasih telah memberikan rintisan bagaimana ini dapat ditambahkan dengan python.Sejak GDAL 2.1, alat CLI tersedia sebagai fungsi pustaka, dan sebenarnya itulah yang disebut alat CLI secara internal.
Sebagai contoh:
Setara dengan:
The pilihan CLI yang tersedia langsung memetakan ke parameter BuildVRTOptions , ditambah ada beberapa tambahan seperti kemajuan callback tersedia.
sumber
RegenerateOverviews()
danWarp()
dalam referensi API . Argumen umumnya cocok dengan perintah CLI.BuildOverviews()
(yang sebenarnya apa yang saya cari ketika saya menemukanRegenerateOverviews
) - mungkin mencobanya?Jawaban @rcoup hanya berfungsi untuk saya, jika mengubahnya sebagai berikut:
Kalau tidak, file tidak ditulis ke disk.
sumber
closing
untuk python, Anda harus membawavrt
keluar dari ruang lingkup Anda, dengan menetapkannyaNone
.