terra
terra copied to clipboard
support for adding a dictionary of layer-specific metadata tags?
I'm following up on this StackOverflow answer (https://stackoverflow.com/questions/71367060/write-rasterstack-and-preserve-metadata-in-r) and the request to make a feature request here if this is functionality that we might find useful.
It's my understanding that python's rasterio
can write arbitrary metadata to the layers of multiband raster as a dictionary when writing a GTIFF to disk. E.g., to include a "start_date" tag for each layer of a 6-band raster that each represents a new year, we might write:
# need input_raster_array and input_raster_profile
with rasterio.open(
output_filename, "w", **(input_raster_profile)
) as dst:
dst.write(input_raster_array)
for index in range(0, 6):
year = 2017 + index
dst.update_tags(index + 1, **{'start_date': f"{year}-01-01"})
I know that we can now write band names on disk (which is great!) and I think the extra tagging functionality would also add to metadata management.
I've figured out a workaround to use the {reticulate} interface to Python's {rasterio} package. The following will add a tag called start_date
to the first band of the raster in the local file "my_file.tif":
# reticulate::py_install("rasterio")
rasterio = reticulate::import("rasterio")
src = rasterio$open("my_file.tif", mode = "r+")
src$update_tags(1, start_date="2019-01-01")
# Tags will be written when the file is closed for writing
src$close()
# Make sure it works
print(src$tags(1))
# Use {terra} to confirm it works
terra::meta("my_file.tif", layers = TRUE)
file level tags can now be set with metags<-
but I need to expand that to layer level tags.
Awesome, thanks @rhijmans!