def get_tile_csv_filename(self): acq_min = workflow.format_date(self.acq_min) acq_max = workflow.format_date(self.acq_max) # TODO other distinguishing characteristics (e.g. dataset types) return os.path.join( self.output_directory, "tiles_{satellites}_{x_min:03d}_{x_max:03d}_{y_min:04d}_{y_max:04d}_{acq_min}_{acq_max}.csv".format( satellites=get_satellite_string(self.satellites), x_min=self.x, x_max=self.x, y_min=self.y, y_max=self.y, acq_min=acq_min, acq_max=acq_max ))
def output(self): from datacube.api.workflow import format_date from datacube.api.utils import get_satellite_string acq_min = format_date(self.acq_min) acq_max = format_date(self.acq_max) filename = "{satellites}_OUTPUT_{x:03d}_{y:04d}_{acq_min}_{acq_max}.tif".format( satellites=get_satellite_string(self.satellites), x=self.x, y=self.y, acq_min=acq_min, acq_max=acq_max ) filename = os.path.join(self.output_directory, filename) return luigi.LocalTarget(filename)
def get_statistic_filename(self, statistic, ulx, uly, lrx, lry): from datacube.api.utils import get_satellite_string from datacube.api.workflow import format_date # if statistic in [Statistic.PERCENTILE_25, Statistic.PERCENTILE_50, Statistic.PERCENTILE_75, # Statistic.PERCENTILE_90, Statistic.PERCENTILE_95]: # statistic_name = "PERCENTILE" # else: # statistic_name = statistic.name statistic_name = statistic.name filename = "{satellites}_WETNESS_{statistic}_{x:03d}_{y:04d}_{acq_min}_{acq_max}_{ulx:04d}_{uly:04d}_{lrx:04d}_{lry:04d}.npy".format( satellites=get_satellite_string(self.satellites), statistic=statistic_name, x=self.x, y=self.y, acq_min=format_date(self.acq_min), acq_max=format_date(self.acq_max), ulx=ulx, uly=uly, lrx=lrx, lry=lry) return os.path.join(self.output_directory, filename)
def get_dataset_filename(self, dataset): from datacube.api.workflow import format_date from datacube.api.utils import get_satellite_string satellites = get_satellite_string(self.satellites) acq_min = format_date(self.acq_min) acq_max = format_date(self.acq_max) return os.path.join(self.output_directory, "{satellites}_{dataset}_{x:03d}_{y:04d}_{acq_min}_{acq_max}.tif".format( satellites=satellites, dataset=dataset, x=self.x, y=self.y, acq_min=acq_min, acq_max=acq_max))
def output(self): from datacube.api.workflow import format_date from datacube.api.utils import get_satellite_string acq_min = format_date(self.acq_min) acq_max = format_date(self.acq_max) filename = "{satellites}_OUTPUT_{x:03d}_{y:04d}_{acq_min}_{acq_max}_{ulx:04d}_{uly:04d}_{lrx:04d}_{lry:04d}.tif".format( satellites=get_satellite_string(self.satellites), x=self.x, y=self.y, acq_min=acq_min, acq_max=acq_max, ulx=self.x_offset, uly=self.y_offset, lrx=(self.x_offset + self.chunk_size_x), lry=(self.y_offset + self.chunk_size_y) ) filename = os.path.join(self.output_directory, filename) return luigi.LocalTarget(filename)
def run(self): tiles = self.get_tiles() transform = (self.x, 0.00025, 0.0, self.y+1, 0.0, -0.00025) srs = osr.SpatialReference() srs.ImportFromEPSG(4326) projection = srs.ExportToWkt() driver = gdal.GetDriverByName("GTiff") assert driver # TODO raster = driver.Create(self.output().path, 4000, 4000, len(tiles), gdal.GDT_Float32, options=["BIGTIFF=YES", "INTERLEAVE=BAND"]) assert raster # TODO raster.SetGeoTransform(transform) raster.SetProjection(projection) raster.SetMetadata(self.generate_raster_metadata()) for index, tile in enumerate(tiles, start=1): # The Tassel Cap dataset is a virtual dataset derived from the NBAR so it's path is actually the NBAR path filename = tile.datasets[DatasetType.TCI].path filename = map_filename_nbar_to_wetness(filename) filename = os.path.join(self.output_directory, filename) print "+++", filename log_mem("Before get data") data = read_dataset_data(filename, bands=[TciBands.WETNESS]) log_mem("After get data") band = raster.GetRasterBand(index) band.SetDescription(os.path.basename(filename)) band.SetNoDataValue(numpy.nan) band.WriteArray(data) band.ComputeStatistics(True) band.SetMetadata({"ACQ_DATE": format_date(tile.end_datetime), "SATELLITE": tile.datasets[DatasetType.TCI].satellite.name}) band.FlushCache() del band raster.FlushCache() del raster