diff --git a/sen2chain/time_series.py b/sen2chain/time_series.py index d002bed5d66a4900f2a561b184855605b171e4ad..63358d6ec449eea3e11edf1e305e743b68368ec4 100644 --- a/sen2chain/time_series.py +++ b/sen2chain/time_series.py @@ -24,6 +24,8 @@ from typing import Sequence, List, Dict, Union import matplotlib.pyplot as plt import numpy as np import math +from datetime import timedelta +import time from .config import Config from .tiles import Tile, ProductsList @@ -154,17 +156,20 @@ class TimeSeries: return stats def _get_stats(self) -> None: + start = time.time() """Compute stats in polygons.""" with fiona.open(str(self._vectors_file), "r") as vectors: features = {feat["id"]: feat for feat in vectors} - for indice in self._indices_list: - logger.info("computing {}".format(indice)) + for index2, indice in enumerate(self._indices_list): + logger.info("computing {}/{}: {}".format(index2 + 1, len(self._indices_list), indice)) rows_list = [] - for tile, fid_list in self._tiles_geoms.items(): + #~ for tile, fid_list in self._tiles_geoms.items(): + for index3, tile in enumerate(self._tiles_geoms): + fid_list = self._tiles_geoms[tile] tile_obj = Tile(tile) - logger.info("Tile: {}".format(tile)) + logger.info("Tile {}/{}: {}".format(index3 + 1, len(self._tiles_geoms), tile)) if TimeSeries._is_indice_in_tile(indice, tile_obj): tile_indice_path = tile_obj.paths["indices"][indice.lower()] @@ -172,12 +177,15 @@ class TimeSeries: self._date_min, self._date_max, self._cover_min, self._cover_max) - for prod in products: + for index1, prod in enumerate(products): prod_path = tile_indice_path / prod.identifier[:(-12 - len(indice))] / prod.identifier - - for fid in fid_list: + logger.info("Product {}/{}: {}".format(index1 + 1, len(products), prod.identifier)) + logger.info("{} features".format(len(fid_list))) + + for index, fid in enumerate(fid_list): df_dict = OrderedDict() df_dict["fid"] = fid + # feat_properties = features[fid]["properties"] # if feat_properties: # df_dict.update(feat_properties) @@ -194,6 +202,8 @@ class TimeSeries: rows_list.append(df_dict) if rows_list: self._df_dicts[indice] = TimeSeries._list_to_df(rows_list) + end = time.time() + logger.info("Execution time: {}".format(timedelta(seconds = end - start))) @staticmethod def _list_to_df(rows_list: List[Dict]) -> pd.DataFrame: @@ -310,10 +320,8 @@ class TimeSeries: out_path_folder.mkdir(parents=True, exist_ok=True) for df_name, df in self.data.items(): - if self._field_names: - fid_list = dict(zip(df.fid, df.name)) - else: - fid_list = dict(zip(df.fid, df.fid)) + fid_list = dict(zip(df.fid, df[self._key])) + if not self._field_names: fid_list = fid_list.fromkeys(fid_list, '') cmap_dict = {'NDVI' : 'RdYlGn',