是否可以使用 gdalbuildvrt 和 python 在 geotiff 的 .vrt 文件中存储元数据?

问题描述

我编写了一个 python 脚本,它从 .aux.xml 文件中读取元数据标记值,并使用 gdalinfo 将它们添加到相应的 tiff 文件中。然后使用 gdalinfo 我可以在元数据中找到它们。

现在我需要将此 tif 文件转换为 .vrt 格式。使用 gdalbuidlvrt 我意识到我缺少这些自定义字段

有没有办法在转换为 .vrt 文件时保留它们?

在下面,您可以找到我的代码的简化版本


import os
import gdal
from lxml import etree


dataset = gdal.Open('source_file.tif',gdal.GA_Update)



filename='C:\\Users\\' \
         '\\source_file.tif.aux.xml'
doc = etree.parse(filename)

CLASS_0_NO_DATA_xml = doc.xpath('.//MDI[@key="CLASS_0_NO_DATA[%]"]//text()')
CLASS_1_RAIN_xml = doc.xpath('.//MDI[@key="CLASS_1_RAIN[%]"]//text()')


band2_categories_xml = doc.xpath('.//PAMRasterBand[@band="2"]/CategoryNames/Category//text()')
band2_nodata_xml = band2_categories_xml[0]
band2_quality_index_xml = band2_categories_xml[1]

##### Note GetRasterBand() takes band number starting from 1 not 0
band = dataset.GetRasterBand(1)
CLASS_0_NO_DATA = 'CLASS_0_NO_DATA'
CLASS_0_NO_DATA_value = CLASS_0_NO_DATA_xml[0] # str(dataset.GetMetadataItem('CLASS_0_NO_DATA[%]'))

CLASS_1_RAIN = 'CLASS_1_RAIN'
CLASS_1_RAIN_value = str(CLASS_1_SNow_xml[0]) #str(dataset.GetMetadataItem('CLASS_1_RAIN[%]'))


band.SetMetadata( {CLASS_0_NO_DATA: CLASS_0_NO_DATA_value,CLASS_1_RAIN: CLASS_1_RAIN_value
                   } )



###### All values must be strings
dataset.SetMetadata( {'Band_1': 'MAP','Band_2': 'QUALITY_FLAG'} )


Metadata = os.popen('gdalinfo Output_file.tif').read()
print(Metadata) 

这段代码输出

Driver: GTiff/GeoTIFF
Files: source_file.tif
Size is 4901,2867
Coordinate System is:
LOCAL_CS["ETRS89 / ETRS-LAEA",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.2572221010002,AUTHORITY["epsg","7019"]],"6258"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],"4258"]],"3035"],UNIT["metre",1]]
Origin = (3847097.795985520351678,2872447.744972674641758)
Pixel Size = (231.656358262999987,-231.656358262999987)
Metadata:
  AREA_OR_POINT=Area
  Band_1=MAP  
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( 3847097.796,2872447.745)
Lower Left  ( 3847097.796,2208288.966)
Upper Right ( 4982445.608,2872447.745)
Lower Right ( 4982445.608,2208288.966)
Center      ( 4414771.702,2540368.355)
Band 1 Block=4901x1 Type=Byte,ColorInterp=Palette
  Metadata:
    CLASS_0_NO_DATA=12.388736109961544
    CLASS_1_RAIN=3.151026530394237

如您所见,我添加了两个类:CLASS_0_NO_DATA 和 CLASS_1_RAIN 及其百分比

当我使用

gdabuildvrt -resolution highest -srcnodata 0 -vrtnodata 0 Output_file.vrt Output_file.tif

我明白

 Driver: VRT/Virtual Raster
Files: Output_file.vrt
       Output_file.tif
Size is 4901,-231.656358262999987)
Corner Coordinates:
Upper Left  ( 3847097.796,2540368.355)
Band 1 Block=128x128 Type=Byte,ColorInterp=Palette
  NoData Value=0

关于这两个类的信息丢失的地方。

有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)