Ejemplo n.º 1
0
 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')
Ejemplo n.º 2
0
 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') 
Ejemplo n.º 3
0
 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')