def calculate_top_of_atmosphere_spot5(self): ''' Calculates the top of atmosphere for the image that is object represents. ''' LOGGER.info('folder correctly identified') LOGGER.info("Starting DN to TOA") LOGGER.info("Start folder: %s" % self.path) LOGGER.info('calculating TOA') self.number_of_bands = self.get_raster().get_attribute(raster.DATA_SHAPE)[2] metadata_band_order = self.get_sensor().get_attribute(spot5.BAND_DESCRIPTION) image_band_order = self.get_raster().get_attribute(raster.METADATA_FILE)['TIFFTAG_IMAGEDESCRIPTION'].split(" ")[:self.number_of_bands] LOGGER.debug('band metadata order: %s' % self.get_sensor().get_attribute(spot5.BAND_DESCRIPTION)) LOGGER.debug('band image order: %s' % image_band_order) self.geotransform_from_gcps = self.get_raster().gcps_to_geotransform() LOGGER.info('reordering data_array') data_array = self.get_raster().read_data_file_as_array()[map(lambda x: image_band_order.index(x), metadata_band_order), :, :] self.projection = osr.SpatialReference() self.projection.ImportFromEPSG(int(self.get_sensor().get_attribute(spot5.HORIZONTAL_CS_CODE).replace("epsg:", ""))) LOGGER.debug('projection: %s' % self.projection.ExportToWkt()) sun_elevation = float(self.get_sensor().get_attribute(spot5.SUN_ELEVATION)) LOGGER.debug('sun_elevation: %s' % sun_elevation) gain = map(float, self.get_sensor().get_attribute(spot5.PHYSICAL_GAIN)) offset = [0] * len(gain) hrg = self.get_sensor().get_attribute(spot5.HRG) LOGGER.debug('HRG type: %s' % hrg) imaging_date = datetime.date(self.sensor.get_attribute(spot5.ACQUISITION_DATE)) self.toa = calculate_rad_toa_spot5(data_array, gain, offset, imaging_date, sun_elevation, hrg, self.number_of_bands) LOGGER.info('finished TOA') LOGGER.info('exporting to tif') outname = re.sub(r'.TIF', '', self.file_dictionary[self.get_image_file()]) + '_TOA.tif' LOGGER.info('Result of folder %s is %s' % (self.path, outname)) data_file = self.get_raster().create_from_reference(outname, self.toa.shape[2], self.toa.shape[1], self.toa.shape[0], self.geotransform_from_gcps, self.projection.ExportToWkt()) self.get_raster().write_raster(data_file, self.toa) data_file = None LOGGER.info('finished export') LOGGER.info('finished DN to TOA')
def calculate_top_of_atmosphere_spot6(self): ''' Calculates the top of atmosphere for the image that is object represents. ''' LOGGER.info('folder correctly identified') LOGGER.info("Starting DN to TOA") LOGGER.info("Start folder: %s" % self.path) LOGGER.info('calculating TOA') self.number_of_bands = self.get_raster().get_attribute(raster.DATA_SHAPE)[2] metadata_band_order = self.get_sensor().get_attribute(spot6.BAND_DISPLAY_ORDER) image_band_order = self.get_sensor().get_attribute(spot6.BAND_INDEX) LOGGER.debug('band metadata order: %s' % self.get_sensor().get_attribute(spot6.BAND_DISPLAY_ORDER)) LOGGER.debug('band image order: %s' % self.get_sensor().get_attribute(spot6.BAND_INDEX)) band_order_reference = [u'B0', u'B1', u'B2', u'B3'] if image_band_order == metadata_band_order and metadata_band_order != band_order_reference: band_solar_irradiance = self.get_sensor().get_attribute(spot6.BAND_SOLAR_IRRADIANCE_VALUE) band_solar_irradiance = list(numpy.array(band_solar_irradiance)[map(lambda x: metadata_band_order.index(x), band_order_reference)]) LOGGER.info('band_solar_irradiance: %s' % band_solar_irradiance) gain = map(float, self.get_sensor().get_attribute(spot6.PHYSICAL_GAIN)) offset = map(float, self.get_sensor().get_attribute(spot6.PHYSICAL_BIAS)) gain = list(numpy.array(gain)[map(lambda x: metadata_band_order.index(x), band_order_reference)]) offset = list(numpy.array(offset)[map(lambda x: metadata_band_order.index(x), band_order_reference)]) LOGGER.info('gain: %s' % gain) LOGGER.info('offset: %s' % offset) LOGGER.info('reading data_array') data_array = self.get_raster().read_data_file_as_array() sun_elevation = numpy.deg2rad(float(numpy.median(self.get_sensor().get_attribute(spot6.SUN_ELEVATION)))) LOGGER.debug('sun_elevation: %s' % sun_elevation) imaging_date = datetime.date(self.sensor.get_attribute(spot6.ACQUISITION_DATE)) self.toa = calculate_rad_toa_spot6(data_array, gain, offset, imaging_date, sun_elevation, band_solar_irradiance, self.number_of_bands) LOGGER.info('finished TOA') LOGGER.info('exporting to tif') outname = re.sub(r'.JP2', '', self.file_dictionary[self.get_image_file()]) + '_TOA.TIF' LOGGER.info('Results of folder %s is %s' % (self.path, outname)) data_file = self.get_raster().create_from_reference(outname, self.toa.shape[2], self.toa.shape[1], self.toa.shape[0], self.get_raster().get_attribute(raster.GEOTRANSFORM), self.get_raster().get_attribute(raster.PROJECTION)) self.get_raster().write_raster(data_file, self.toa) data_file = None LOGGER.info('finished export') LOGGER.info('finished DN to TOA')
def calculate_top_of_atmosphere_spot6(self): ''' Calculates the top of atmosphere for the image that is object represents. ''' LOGGER.info('folder correctly identified') LOGGER.info("Starting DN to TOA") LOGGER.info("Start folder: %s" % self.path) LOGGER.info('calculating TOA') self.number_of_bands = self.get_raster().get_attribute( raster.DATA_SHAPE)[2] metadata_band_order = self.get_sensor().get_attribute( spot6.BAND_DISPLAY_ORDER) image_band_order = self.get_sensor().get_attribute(spot6.BAND_INDEX) LOGGER.debug('band metadata order: %s' % self.get_sensor().get_attribute(spot6.BAND_DISPLAY_ORDER)) LOGGER.debug('band image order: %s' % self.get_sensor().get_attribute(spot6.BAND_INDEX)) band_order_reference = [u'B0', u'B1', u'B2', u'B3'] if image_band_order == metadata_band_order and metadata_band_order != band_order_reference: band_solar_irradiance = self.get_sensor().get_attribute( spot6.BAND_SOLAR_IRRADIANCE_VALUE) band_solar_irradiance = list( numpy.array(band_solar_irradiance)[map( lambda x: metadata_band_order.index(x), band_order_reference)]) LOGGER.info('band_solar_irradiance: %s' % band_solar_irradiance) gain = map(float, self.get_sensor().get_attribute(spot6.PHYSICAL_GAIN)) offset = map(float, self.get_sensor().get_attribute(spot6.PHYSICAL_BIAS)) gain = list( numpy.array(gain)[map(lambda x: metadata_band_order.index(x), band_order_reference)]) offset = list( numpy.array(offset)[map(lambda x: metadata_band_order.index(x), band_order_reference)]) LOGGER.info('gain: %s' % gain) LOGGER.info('offset: %s' % offset) LOGGER.info('reading data_array') data_array = self.get_raster().read_data_file_as_array() sun_elevation = numpy.deg2rad( float( numpy.median(self.get_sensor().get_attribute( spot6.SUN_ELEVATION)))) LOGGER.debug('sun_elevation: %s' % sun_elevation) imaging_date = datetime.date( self.sensor.get_attribute(spot6.ACQUISITION_DATE)) self.toa = calculate_rad_toa_spot6(data_array, gain, offset, imaging_date, sun_elevation, band_solar_irradiance, self.number_of_bands) LOGGER.info('finished TOA') LOGGER.info('exporting to tif') outname = re.sub( r'.JP2', '', self.file_dictionary[self.get_image_file()]) + '_TOA.TIF' LOGGER.info('Results of folder %s is %s' % (self.path, outname)) data_file = self.get_raster().create_from_reference( outname, self.toa.shape[2], self.toa.shape[1], self.toa.shape[0], self.get_raster().get_attribute(raster.GEOTRANSFORM), self.get_raster().get_attribute(raster.PROJECTION)) self.get_raster().write_raster(data_file, self.toa) data_file = None LOGGER.info('finished export') LOGGER.info('finished DN to TOA')