diff --git a/.gitignore b/.gitignore index c6c5a741fc7899972605e0fff68b0ad42f8d5673..63d627dd6d736309587738385f7ca037d16ad0ea 100755 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,9 @@ data/l8_20130707\.tif\.aux\.xml data/l8_20130831\.tif\.aux\.xml qgis-auth\.db + +ymraster/\.spyderproject + +\.spyderworkspace + +\.spyderproject diff --git a/ymraster/ymraster.py b/ymraster/ymraster.py index f8f6889343e72ded09b88b25044fa66063fa7981..0114d7f72678771ea2644d91aceee35d3dcf897e 100755 --- a/ymraster/ymraster.py +++ b/ymraster/ymraster.py @@ -163,6 +163,8 @@ def write_file(out_filename, array=None, overwrite=True, projection to write in the output file metadata. transform : 6-tuple of floats Geo-transformation to use for the output file. + band_info : list of string: + Info of each band to write in the output file metadata """ # Size & data type of output image xsize, ysize = (kw['width'], kw['height']) \ @@ -194,7 +196,8 @@ def write_file(out_filename, array=None, overwrite=True, # Set metadata if kw.get('date_time'): out_ds.SetMetadata( - {'TIFFTAG_DATETIME': kw['date_time'].strftime('%Y:%m:%d %H:%M:%S')}) + {'TIFFTAG_DATETIME': + kw['date_time'].strftime('%Y:%m:%d %H:%M:%S')}) if kw.get('srs'): out_ds.SetProjection(kw['srs'].ExportToWkt()) if kw.get('transform'): @@ -209,6 +212,10 @@ def write_file(out_filename, array=None, overwrite=True, band.WriteArray(array, xoff=xoffset, yoff=yoffset) if kw.get('nodata_value'): band.SetNoDataValue(kw.get('nodata_value')) + if kw.get('band_info'): + metadata = band.GetMetadata() + metadata['band_info'] = kw.get('band_info')[0] + band.SetMetadata(metadata) band.FlushCache() else: for i in range(number_bands): @@ -216,6 +223,10 @@ def write_file(out_filename, array=None, overwrite=True, band.WriteArray(array[:, :, i], xoff=xoffset, yoff=yoffset) if kw.get('nodata_value'): band.SetNoDataValue(kw.get('nodata_value')) + if kw.get('band_info'): + metadata = band.GetMetadata() + metadata['band_info'] = kw.get('band_info')[i] + band.SetMetadata(metadata) band.FlushCache() band = None out_ds = None @@ -660,6 +671,76 @@ class Raster(Sized): # Close file ds = None + def write_metadata(self, metadata): + """ + Write metada in the file + + Parameters + ---------- + metadata : dictionnary + Key are Tag of the metadata, values is the corresponding + description + + Limitations + ----------- + Works for Tif files only. + + """ + ds = gdal.Open(self._filename, gdal.GA_Update) + + metadata_orign = ds.GetMetadata() + metadata_orign.update(metadata) + ds.SetMetadata(metadata_orign) + ds = None + self.refresh() + + + def write_band_metadata(self, idx, metadata): + """ + Write band metada in the file + + Parameters + ---------- + idx : int + Band number. Indexation starts at 1. + metadata : dictionnary + Key are Tag of the metadata, values is the corresponding + description + + Limitations + ----------- + Works for Tif files only. + + """ + ds = gdal.Open(self._filename, gdal.GA_Update) + band = ds.GetRasterBand(idx) + metadata_orign = band.GetMetadata() + metadata_orign.update(metadata) + band.SetMetadata(metadata) + ds = None + self.refresh() + + def get_band_metadata(self, idx): + """ + Get band metada in the file + + Parameters + ---------- + idx : int + Band number. Indexation starts at 1. + + Returns + ------- + metadata : dictionnary + Key are Tag of the metadata, values is the corresponding + description + """ + ds = gdal.Open(self._filename, gdal.GA_Update) + band = ds.GetRasterBand(idx) + metadata = band.GetMetadata() + ds = None + return metadata + @otb_function def change_dtype(self, out_dtype, out_filename): """ @@ -1597,7 +1678,7 @@ class Raster(Sized): masked_bands = [Raster(os.path.join(gettempdir(), 'mono_masked_{}.tif'.format(i))) for i in range(self._count)] - concatenate_rasters(*masked_bands, out_filename=out_filename) + concatenate_rasters(masked_bands, out_filename=out_filename) out_raster = Raster(out_filename) out_raster.nodata_value = set_value print set_value