Szczerze mówiąc, łatwiej jest to zrobić, używając gdalbuildvrt w a subprocess
lub os.system
.
Jeśli chcesz to zrobić za pomocą Pythona, możesz to zrobić. Używając standardowych metod tworzenia zestawów danych w GDAL Python, możemy łatwo stworzyć podstawowy zestaw danych VRT .
from osgeo import gdal
drv = gdal.GetDriverByName("VRT")
vrt = drv.Create("test.vrt", x_size, y_size, 0)
Zauważ, że tworzymy zestaw danych początkowo bez pasm. Z dokumentacji VRT wynika, że zestawy danych VRT są jednym z niewielu typów zestawów danych, które mogą przyjmować AddBand
argumenty.
vrt.AddBand(gdal.GDT_Float32)
band = vrt.GetRasterBand(1)
Teraz dla każdego pasma musimy ręcznie ustawić elementy metadanych:
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
pobiera dwa argumenty, pierwszy ciąg elementu metadanych, drugi sam element. Oznacza to, że nie można podgrupować elementu metadanych, dlatego w przypadku źródeł danych należy ustawić całą zawartość jako ciąg.
Zauważ, że możemy użyć tej metody do tworzenia złożonych źródeł ( ComplexSource
), które zawierają tabele przeglądowe wartości, źródła filtrów jądra ( KernelFilteredSource
) o dowolnych rozmiarach i kształtach oraz maski pasków ( MaskBand
).
overviews
element, ale gdalbuildvrt go nie używa. Dziękujemy za podanie kodu pośredniczącego, w jaki sposób można go dodać w Pythonie.Od wersji GDAL 2.1 narzędzia CLI są dostępne jako funkcje biblioteczne, a tak naprawdę narzędzia CLI wywołują teraz wewnętrznie.
Na przykład:
Jest odpowiednikiem:
Te dostępne opcje CLI bezpośrednio mapować do parametrów BuildVRTOptions , plus tam kilka dodatków, takich jak callbacków postępu dostępny.
źródło
RegenerateOverviews()
iWarp()
w dokumentacji API . Argumenty zasadniczo pasują do poleceń CLI.BuildOverviews()
(czego właściwie szukałem, kiedy znalazłemRegenerateOverviews
) - może spróbować?Odpowiedź @rcoup działała tylko dla mnie, jeśli zmodyfikuję ją w następujący sposób:
W przeciwnym razie plik nie zostanie zapisany na dysku.
źródło
closing
Pythona, musisz sprowadzićvrt
go z zakresu, przypisując go doNone
.