diff --git a/eepackages/applications/bathymetry.py b/eepackages/applications/bathymetry.py index 4317b72..795e0d8 100644 --- a/eepackages/applications/bathymetry.py +++ b/eepackages/applications/bathymetry.py @@ -30,6 +30,7 @@ def compute_inverse_depth( pansharpen: bool = False, skip_neighborhood_search: bool = False, bounds_buffer: int = 10000, + s2merge: Optional[str] = None, ) -> ee.Image: images: ee.ImageCollection = self.get_images( bounds=bounds, @@ -38,7 +39,8 @@ def compute_inverse_depth( filter_masked=filter_masked, scale=scale, missions=missions, - cloud_frequency_threshold_delta=cloud_frequency_threshold_data + cloud_frequency_threshold_delta=cloud_frequency_threshold_data, + s2merge=s2merge ) # save loaded images in class as raw_images self._raw_images = images @@ -377,7 +379,8 @@ def get_images( missions: List[str], filter_masked_fraction: Optional[float] = None, cloud_frequency_threshold_delta: float = 0.15, - filter: Optional[ee.Filter] = None + filter: Optional[ee.Filter] = None, + s2merge: Optional[str] = None, ) -> ee.ImageCollection: date_filter: ee.Filter = ee.Filter.date(start, stop) if filter: @@ -391,7 +394,8 @@ def get_images( "filterMasked": filter_masked, "filterMaskedFraction": filter_masked_fraction, "scale": ee.Number(scale).multiply(10), # why *10? - "resample": True + "resample": True, + "s2TimeMerger": s2merge, } images: ee.ImageCollection = assets.getImages(bounds, options_get_images) diff --git a/eepackages/assets.py b/eepackages/assets.py index 2b2e92f..d694a9e 100644 --- a/eepackages/assets.py +++ b/eepackages/assets.py @@ -46,7 +46,12 @@ def getImages(g, options): if options and 's2MergeByTime' in options: s2MergeByTime = options['s2MergeByTime'] - + + s2TimeMerger = False + + if options and 's2TimeMerger' in options: + s2TimeMerger = options['s2TimeMerger'] + cloudMask = False if options and 'cloudMask' in options: @@ -200,7 +205,7 @@ def clipNegativeFootprint(i): # merge by time (remove duplicates) if s2MergeByTime: - s2 = mosaicByTime(s2) + s2 = mosaicByTime(s2, s2TimeMerger) def f2(i): return (i @@ -309,8 +314,17 @@ def f(i): # * # * This function mosaics images by time. # */ -def mosaicByTime(images): - TIME_FIELD = 'system:time_start' +def mosaicByTime(images, *args): + if 'dd' in args: # for rounding up until days + def f(i): + dateField = ee.Date(i.get('system:time_start')).format('YYYYMMdd') #hhmmss.SSS rounded to a minute + return i.set({'dateField':dateField}) + + images = images.map(f) + + TIME_FIELD = 'dateField' + else: + TIME_FIELD = 'system:time_start' distinct = images.distinct([TIME_FIELD]) @@ -323,7 +337,7 @@ def merge_matches(i): matchedImages = ee.ImageCollection.fromImages(i.get('matches')) mosaic = matchedImages.sort('system:index').mosaic().set({ 'system:footprint': matchedImages.geometry() }) - return mosaic.copyProperties(i).set(TIME_FIELD, i.get(TIME_FIELD)) + return mosaic.copyProperties(i).set('system:time_start', i.get('system:time_start')) # hard-coded time_start instead of TIME_FIELD to be consistent results = results.map(merge_matches)