From 7b1ca39388816fc6fe59ebcf3579f739c8cdf8af Mon Sep 17 00:00:00 2001 From: Daniel Scheffler Date: Wed, 8 Aug 2018 19:44:33 +0200 Subject: [PATCH] Bugfix for not updating GeoArray.metadata.bands within GeoArray.get_subset(). --- geoarray/baseclasses.py | 6 +----- geoarray/metadata.py | 19 ++++++++++++++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/geoarray/baseclasses.py b/geoarray/baseclasses.py index 01030fd..b212f16 100644 --- a/geoarray/baseclasses.py +++ b/geoarray/baseclasses.py @@ -1487,11 +1487,7 @@ class GeoArray(object): # apply zslice to bandnames and metadata if zslicing: bNs_out = list(np.array(list(self.bandnames))[zslice]) - - _meta_out = deepcopy(self.meta) - if self._metadata: - for k, v in _meta_out.band_meta.items(): - _meta_out.band_meta[k] = list(np.array(v)[zslice]) + _meta_out = self.metadata.get_band_subset(bandslice=zslice) else: bNs_out = list(self.bandnames) _meta_out = self.meta diff --git a/geoarray/metadata.py b/geoarray/metadata.py index 9a44e03..a79a71f 100644 --- a/geoarray/metadata.py +++ b/geoarray/metadata.py @@ -2,8 +2,10 @@ import os from pprint import pformat +from copy import deepcopy from geopandas import GeoDataFrame, GeoSeries +import numpy as np try: from osgeo import gdal except ImportError: @@ -31,7 +33,7 @@ class GDAL_Metadata(object): self.bands = nbands self.filePath = filePath - self.format = '' + self.fileFormat = '' if filePath: self.read_from_file(filePath) @@ -140,13 +142,13 @@ class GDAL_Metadata(object): raise Exception('Error reading file: ' + gdal.GetLastErrorMsg()) self.bands = ds.RasterCount - self.format = ds.GetDriver().GetDescription() + self.fileFormat = ds.GetDriver().GetDescription() ############### # ENVI format # ############### - if self.format == 'ENVI': + if self.fileFormat == 'ENVI': metadict = ds.GetMetadata('ENVI') for k, v in metadict.items(): @@ -201,3 +203,14 @@ class GDAL_Metadata(object): def to_ENVI_metadict(self): return dict(zip(self.all_meta.keys(), [self._convert_param_to_ENVI_str(i) for i in self.all_meta.values()])) + + def get_band_subset(self, bandslice=None): + bandslice = bandslice or slice(None) + meta_sub = deepcopy(self) + + for k, v in meta_sub.band_meta.items(): + meta_sub.band_meta[k] = list(np.array(v)[bandslice]) + + meta_sub.bands = len(list(range(*bandslice.indices(bandslice.stop)))) + + return meta_sub -- GitLab