I'm creating a script to do a time-series analysis over a large date range, preview/(Map.addLayer
) the results on one specific day, and have that Map result be exportable.
The timeseries section is working well, and I have mosaics filtering for specific days to be mapped and then exported, but I would like to be able to add the date in some form on the description:
of the Export.image.toDrive
section. That appears to be extremely difficult as once you .mosaic
an ee.ImageCollection
, it removes all properties
except for system:index
, which is wiped of the original data and makes it useless.
I've seen this great example, however I don't need or want it to be iterated over multiple images in an ImageCollection
over a large date range, just the filtered Mosaic on one particular day.
I've tried a few methods (.copyProperties
, .get
) found from other Stack Exchange/Overflow questions to no avail, but the closest I've gotten is through .set
and .getInfo()
in This Example Code:
// ### IMPORTED GEOMETRY ###
var Geom =
/* color: #0b4a8b */
/* shown: false */
/* displayProperties: [
{
"type": "rectangle"
}
] */
ee.Geometry.Polygon(
[[[-8.511494599189746, 52.915278842998354],
[-8.511494599189746, 52.895607287195],
[-8.478964768257129, 52.895607287195],
[-8.478964768257129, 52.915278842998354]]], null, false);
// ### FILTER PARAMETERS ###
//These apply the parameters to both L1C and L2A imagery and stop repetitive data entry
// CLOUD % format '00' , numbers only without quotes
var MIN_CLOUD_PERCENT = 20;
// START DATE & END DATE format: 'YYYY-MM-DD', include the quotes
var START_DATE = '2022-01-01';
var END_DATE = '2022-04-01';
// PREVIEW DATES are used to align all the visible map layers to the same date
var FRST_PRVW_DATE = '2022-03-30';
var LAST_PRVW_DATE = '2022-04-01';
// BOUNDS can either be a drawn geometry shape within GEE, or an imported SHP file
// See: https://developers.google.com/earth-engine/guides/table_upload#upload-a-shapefile
var BOUNDS = Geom;
// ZOOM is based on GEE's 1-24 level system. Larger number = Larger Zoom
var ZOOM = 14;
// PARAMETERS END - You don't need to change anything below this line to make the script function
// ### MISC ###
//Prints out the Parameters set
print('Filtering available Sentinel 2 imagery between ' + START_DATE + ' & ' + END_DATE + ' with ' + MIN_CLOUD_PERCENT + '% cloud over the area of interest.');
// Centre based on the Geometry (Region of Interest, Zoom Level)
Map.centerObject(BOUNDS, ZOOM, print('Map centered on Region of Interest'));
// Sets the default Map to Terrain mode (Roadmap overlain with hillsahde)
Map.setOptions("TERRAIN");
// ### LAYER VISUALISATION ###
// Truecolour (R-G-B) Visualisation
var rgbVis = {
min: 0,
max: 0.35,
bands: ['B4', 'B3', 'B2'],
};
// ### CLOUD MASKING ###
// Sentinel 2 Cloud Masking Function using the 60m Cloud Mask Band
/* Function to mask clouds using the Sentinel-2 QA band
* @param {ee.Image} image Sentinel-2 image
* @return {ee.Image} cloud masked Sentinel-2 image
*/
function maskS2clouds(image) {
var qa = image.select('QA60');
// Bits 10 and 11 are clouds and cirrus, respectively.
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
// Both flags should be set to zero, indicating clear conditions.
var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));
return image.updateMask(mask).divide(10000).copyProperties(image, ["system:time_start"]);
}
print('Sentinel 2 Cloud Mask Function Complete');
// ### IMAGE COLLECTIONS ###
//Load and Map L1C imagery with the filter parameters applied
/*
* Load Sentinel-2 'Harmonized' Top Of Atomsphere (L1C) data
* Dataset details: https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_HARMONIZED
* HARMONIZED makes sure scenes after 25 January 2022 have the same DN ranges as older L1C scenes.
* Harmonised L1C Data is available from Sentinel 2 Launch (2015-06-23) onwards.
*/
var S2_L1C = ee.ImageCollection('COPERNICUS/S2_HARMONIZED')
// Filter by Date Period (YYYY-MM-DD)
.filterDate(START_DATE, END_DATE)
/*
* Pre-filter to get less cloudy granules
* 'Default' is aiming for 10% cloud
* Dependent on availability of cloud-free imagery in the time period set
* Longer periods will take longer to load
*/
.filter(ee.Filter.lte('CLOUDY_PIXEL_PERCENTAGE', MIN_CLOUD_PERCENT))
// Select only image tiles that fall within the Geometry (Region of Interest) to reduce processing time
.filterBounds(BOUNDS)
// Applies the S2 Cloud Masking Function to each image in the IC
.map(maskS2clouds)
// Clips each image in the IC by the Bounds to reduce processing time further
.map(function(image) {
return image.clip(BOUNDS);
});
print('Time, Date, Bounding, and Cloud Tile Filtering parameters set for Imagery');
// ### MAPPING AND MOSAICING ###
// Add the pre-clipped IC to the map
Map.addLayer(S2_L1C.filterDate(FRST_PRVW_DATE, LAST_PRVW_DATE),rgbVis,'L1C_Filtered_IC');
var FilteredMosaic = S2_L1C.filterDate(FRST_PRVW_DATE, LAST_PRVW_DATE).mosaic().set("system:time_start", S2_L1C.filterDate(FRST_PRVW_DATE, LAST_PRVW_DATE).getInfo());
Map.addLayer(FilteredMosaic, rgbVis, 'L1C_Mosaic');
// ### EXPORTING ###
// Can't export the entire IC because it's an IC, it has to be an Image (hence the Mosaic)
Export.image.toDrive({
image: FilteredMosaic.visualize(rgbVis), // Sets the image to keep the current Visualisation parameters
region: Geom,
description: 'L1C_Demo_' + FilteredMosaic.date().format('yy-MM-dd').getInfo(), // Sets the name of the image(s)
folder: 'GEETestDemo', // The destination folder for the imagery in your Account's Google Drive
scale: 'nominal', // Returns requested image AT TRUE SCALE
crs: 'EPSG:3857', // CRS - This is the standard GEE Web Mercator projection, WGS84.
maxPixels: 1e13, // Max Pixel amount - always required as the default limit is very small
fileFormat: 'GeoTIFF'
});
I still get a horrendously long error, but it does give my Mosaic a system:time_start
property, and within there is the original data inside, albeit all of it when I only want one Property:
Line 109: Image.date: Image has a 'system:time_start' property which is not a number:
{features=[{bands=[{crs_transform=[60, 0, 499980, 0, -60, 5900040], crs=EPSG:32629, origin=[547, 617], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B1, dimensions=[38, 38]}, {crs_transform=[10, 0, 499980, 0, -10, 5900040], crs=EPSG:32629, origin=[3286, 3706], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B2, dimensions=[222, 222]}, {crs_transform=[10, 0, 499980, 0, -10, 5900040], crs=EPSG:32629, origin=[3286, 3706], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B3, dimensions=[222, 222]}, {crs_transform=[10, 0, 499980, 0, -10, 5900040], crs=EPSG:32629, origin=[3286, 3706], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B4, dimensions=[222, 222]}, {crs_transform=[20, 0, 499980, 0, -20, 5900040], crs=EPSG:32629, origin=[1643, 1853], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B5, dimensions=[111, 111]}, {crs_transform=[20, 0, 499980, 0, -20, 5900040], crs=EPSG:32629, origin=[1643, 1853], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B6, dimensions=[111, 111]}, {crs_transform=[20, 0, 499980, 0, -20, 5900040], crs=EPSG:32629, origin=[1643, 1853], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B7, dimensions=[111, 111]}, {crs_transform=[10, 0, 499980, 0, -10, 5900040], crs=EPSG:32629, origin=[3286, 3706], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B8, dimensions=[222, 222]}, {crs_transform=[20, 0, 499980, 0, -20, 5900040], crs=EPSG:32629, origin=[1643, 1853], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B8A, dimensions=[111, 111]}, {crs_transform=[60, 0, 499980, 0, -60, 5900040], crs=EPSG:32629, origin=[547, 617], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B9, dimensions=[38, 38]}, {crs_transform=[60, 0, 499980, 0, -60, 5900040], crs=EPSG:32629, origin=[547, 617], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B10, dimensions=[38, 38]}, {crs_transform=[20, 0, 499980, 0, -20, 5900040], crs=EPSG:32629, origin=[1643, 1853], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B11, dimensions=[111, 111]}, {crs_transform=[20, 0, 499980, 0, -20, 5900040], crs=EPSG:32629, origin=[1643, 1853], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=B12, dimensions=[111, 111]}, {crs_transform=[10, 0, 499980, 0, -10, 5900040], crs=EPSG:32629, origin=[3286, 3706], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=QA10, dimensions=[222, 222]}, {crs_transform=[20, 0, 499980, 0, -20, 5900040], crs=EPSG:32629, origin=[1643, 1853], data_type={min=0, max=429496.75, precision=float, type=PixelType}, id=QA20, dimensions=[111, 111]}, {crs_transform=[60, 0, 499980, 0, -60, 5900040], crs=EPSG:32629, origin=[547, 617], data_type={min=0, max=6.553500175476074, precision=float, type=PixelType}, id=QA60, dimensions=[38, 38]}], type=Image, properties={system:time_start=1648727202698, system:footprint={coordinates=[[[-8.511494599189746, 52.895607287195], [-8.495229683723437, 52.895607287195], [-8.478964768257129, 52.895607287195], [-8.478964768257127, 52.915278842998354], [-8.495229683723439, 52.915278842998354], [-8.511494599189747, 52.915278842998354], [-8.511494599189746, 52.895607287195]]], type=Polygon}, system:index=20220331T114349_20220331T114345_T29UNU}}], id=COPERNICUS/S2_HARMONIZED, bands=[], type=ImageCollection, version=1652454890835642, properties={date_range=[1435017600000, 1647993600000], period=0, system:visualization_0_min=0.0, type_name=ImageCollection, keywords=[copernicus, esa, eu, msi, radiance, sentinel], system:visualization_0_bands=B4,B3,B2, thumb=https://mw1.google.com/ges/dd/images/sentinel2_thumb.png, description=<p>Sentinel-2 is a wide-swath, high-resolution, multi-spectral
imaging mission supporting Copernicus Land Monitoring studies,
including the monitoring of vegetation, soil and water cover,
as well as observation of inland waterways and coastal areas.</p><p>The Sentinel-2 data contain 13 UINT16 spectral bands representing
TOA reflectance scaled by 10000. See the <a href="https://sentinel.esa.int/documents/247904/685211/Sentinel-2_User_Handbook">Sentinel-2 User Handbook</a>
for details. In addition, three QA bands are present where one
(QA60) is a bitmask band with cloud mask information. For more
details, <a href="https://sentinel.esa.int/web/sentinel/technical-guides/sentinel-2-msi/level-1c/cloud-masks">see the full explanation of how cloud masks are computed.</a></p><p>Each Sentinel-2 product (zip archive) may contain multiple
granules. Each granule becomes a separate Earth Engine asset.
EE asset ids for Sentinel-2 assets have the following format:
COPERNICUS/S2/20151128T002653_20151128T102149_T56MNN. Here the
first numeric part represents the sensing date and time, the
second numeric part represents the product generation date and
time, and the final 6-character string is a unique granule identifier
indicating its UTM grid reference (see <a href="https://en.wikipedia.org/wiki/Military_Grid_Reference_System">MGRS</a>).</p><p>The Level-2 data produced by ESA can be found in the collection
<a href="COPERNICUS_S2_SR">COPERNICUS/S2_SR</a>.</p><p>Clouds can be mostly removed by using
<a href="COPERNICUS_S2_CLOUD_PROBABILITY">COPERNICUS/S2_CLOUD_PROBABILITY</a>.
See
<a href="https://developers.google.com/earth-engine/tutorials/community/sentinel-2-s2cloudless">this tutorial</a>
explaining how to apply the cloud mask.</p><p>For more details on Sentinel-2 radiometric resolution, <a href="https://earth.esa.int/web/sentinel/user-guides/sentinel-2-msi/resolutions/radiometric">see this page</a>.</p><p><b>Provider: <a href="https://earth.esa.int/web/sentinel/user-guides/sentinel-2-msi/product-types/level-1c">European Union/ESA/Copernicus</a></b><br><p><b>Revisit Interval</b><br>
5 days
</p><p><b>Bands</b><table class="eecat"><tr><th scope="col">Name</th><th scope="col">Description</th></tr><tr><td>B1</td><td><p>Aerosols</p></td></tr><tr><td>B2</td><td><p>Blue</p></td></tr><tr><td>B3</td><td><p>Green</p></td></tr><tr><td>B4</td><td><p>Red</p></td></tr><tr><td>B5</td><td><p>Red Edge 1</p></td></tr><tr><td>B6</td><td><p>Red Edge 2</p></td></tr><tr><td>B7</td><td><p>Red Edge 3</p></td></tr><tr><td>B8</td><td><p>NIR</p></td></tr><tr><td>B8A</td><td><p>Red Edge 4</p></td></tr><tr><td>B9</td><td><p>Water vapor</p></td></tr><tr><td>B10</td><td><p>Cirrus</p></td></tr><tr><td>B11</td><td><p>SWIR 1</p></td></tr><tr><td>B12</td><td><p>SWIR 2</p></td></tr><tr><td>QA10</td><td><p>Always empty</p></td></tr><tr><td>QA20</td><td><p>Always empty</p></td></tr><tr><td>QA60</td><td><p>Cloud mask</p></td></tr><tr><td colspan=100>
Bitmask for QA60
<ul><li>
Bit 10: Opaque clouds
<ul><li>0: No opaque clouds</li><li>1: Opaque clouds present</li></ul></li><li>
Bit 11: Cirrus clouds
<ul><li>0: No cirrus clouds</li><li>1: Cirrus clouds present</li></ul></li></ul></td></tr></table><p><b>Image Properties</b><table class="eecat"><tr><th scope="col">Name</th><th scope="col">Type</th><th scope="col">Description</th></tr><tr><td>CLOUDY_PIXEL_PERCENTAGE</td><td>DOUBLE</td><td><p>Granule-specific cloudy pixel percentage taken from the original metadata</p></td></tr><tr><td>CLOUD_COVERAGE_ASSESSMENT</td><td>DOUBLE</td><td><p>Cloudy pixel percentage for the whole archive that
contains this granule. Taken from the original metadata</p></td></tr><tr><td>DATASTRIP_ID</td><td>STRING</td><td><p>Unique identifier of the datastrip Product Data Item (PDI)</p></td></tr><tr><td>DATATAKE_IDENTIFIER</td><td>STRING</td><td><p>Uniquely identifies a given Datatake. The ID contains
the Sentinel-2 satellite, start date and time, absolute orbit
number, and processing baseline.</p></td></tr><tr><td>DATATAKE_TYPE</td><td>STRING</td><td><p>MSI operation mode</p></td></tr><tr><td>DEGRADED_MSI_DATA_PERCENTAGE</td><td>DOUBLE</td><td><p>Percentage of degraded MSI and ancillary data</p></td></tr><tr><td>FORMAT_CORRECTNESS</td><td>STRING</td><td><p>Synthesis of the On-Line Quality Control (OLQC) checks
performed at granule (Product_Syntax) and datastrip (Product
Syntax and DS_Consistency) levels</p></td></tr><tr><td>GENERAL_QUALITY</td><td>STRING</td><td><p>Synthesis of the OLQC checks performed at the datastrip level (Relative_Orbit_Number)</p></td></tr><tr><td>GENERATION_TIME</td><td>DOUBLE</td><td><p>Product generation time</p></td></tr><tr><td>GEOMETRIC_QUALITY</td><td>STRING</td><td><p>Synthesis of the OLQC checks performed at the datastrip level (Attitude_Quality_Indicator)</p></td></tr><tr><td>GRANULE_ID</td><td>STRING</td><td><p>Unique identifier of the granule PDI (PDI_ID)</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B1</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B1 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B2</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B2 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B3</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B3 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B4</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B4 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B5</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B5 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B6</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B6 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B7</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B7 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B8</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B8 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B8A</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B8a and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B9</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B9 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B10</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B10 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B11</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B11 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_AZIMUTH_ANGLE_B12</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence azimuth angle average for band B12 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B1</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B1 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B2</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B2 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B3</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B3 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B4</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B4 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B5</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B5 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B6</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B6 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B7</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B7 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B8</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B8 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B8A</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B8a and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B9</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B9 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B10</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B10 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B11</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B11 and for all detectors</p></td></tr><tr><td>MEAN_INCIDENCE_ZENITH_ANGLE_B12</td><td>DOUBLE</td><td><p>Mean value containing viewing incidence zenith angle average for band B12 and for all detectors</p></td></tr><tr><td>MEAN_SOLAR_AZIMUTH_ANGLE</td><td>DOUBLE</td><td><p>Mean value containing sun azimuth angle average for all bands and detectors</p></td></tr><tr><td>MEAN_SOLAR_ZENITH_ANGLE</td><td>DOUBLE</td><td><p>Mean value containing sun zenith angle average for all bands and detectors</p></td></tr><tr><td>MGRS_TILE</td><td>STRING</td><td><p>US-Military Grid Reference System (MGRS) tile</p></td></tr><tr><td>PROCESSING_BASELINE</td><td>STRING</td><td><p>Configuration baseline used at the time of the product
generation in terms of processor software version and major Ground
Image Processing Parameters (GIPP) version</p></td></tr><tr><td>PRODUCT_ID</td><td>STRING</td><td><p>The full id of the original Sentinel-2 product</p></td></tr><tr><td>RADIOMETRIC_QUALITY</td><td>STRING</td><td><p>Based on the OLQC reports contained in the Datastrips/QI_DATA with RADIOMETRIC_QUALITY checklist name</p></td></tr><tr><td>REFLECTANCE_CONVERSION_CORRECTION</td><td>DOUBLE</td><td><p>Earth-Sun distance correction factor</p></td></tr><tr><td>SENSING_ORBIT_DIRECTION</td><td>STRING</td><td><p>Imaging orbit direction</p></td></tr><tr><td>SENSING_ORBIT_NUMBER</td><td>DOUBLE</td><td><p>Imaging orbit number</p></td></tr><tr><td>SENSOR_QUALITY</td><td>STRING</td><td><p>Synthesis of the OLQC checks performed at granule
(Missing_Lines, Corrupted_ISP, and Sensing_Time) and datastrip
(Degraded_SAD and Datation_Model) levels</p></td></tr><tr><td>SOLAR_IRRADIANCE_B1</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B1</p></td></tr><tr><td>SOLAR_IRRADIANCE_B2</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B2</p></td></tr><tr><td>SOLAR_IRRADIANCE_B3</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B3</p></td></tr><tr><td>SOLAR_IRRADIANCE_B4</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B4</p></td></tr><tr><td>SOLAR_IRRADIANCE_B5</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B5</p></td></tr><tr><td>SOLAR_IRRADIANCE_B6</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B6</p></td></tr><tr><td>SOLAR_IRRADIANCE_B7</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B7</p></td></tr><tr><td>SOLAR_IRRADIANCE_B8</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B8</p></td></tr><tr><td>SOLAR_IRRADIANCE_B8A</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B8a</p></td></tr><tr><td>SOLAR_IRRADIANCE_B9</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B9</p></td></tr><tr><td>SOLAR_IRRADIANCE_B10</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B10</p></td></tr><tr><td>SOLAR_IRRADIANCE_B11</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B11</p></td></tr><tr><td>SOLAR_IRRADIANCE_B12</td><td>DOUBLE</td><td><p>Mean solar exoatmospheric irradiance for band B12</p></td></tr><tr><td>SPACECRAFT_NAME</td><td>STRING</td><td><p>Sentinel-2 spacecraft name: Sentinel-2A, Sentinel-2B</p></td></tr></table><p><b>Terms of Use</b><br><p>The use of Sentinel data is governed by the <a href="https://scihub.copernicus.eu/twiki/pub/SciHubWebPortal/TermsConditions/Sentinel_Data_Terms_and_Conditions.pdf">Copernicus
Sentinel Data Terms and Conditions.</a></p><style>
table.eecat {
border: 1px solid black;
border-collapse: collapse;
font-size: 13px;
}
table.eecat td, tr, th {
text-align: left; vertical-align: top;
border: 1px solid gray; padding: 3px;
}
td.nobreak { white-space: nowrap; }
</style>, source_tags=[eu, esa, copernicus, sentinel], visualization_0_max=3000.0, provider_url=https://earth.esa.int/web/sentinel/user-guides/sentinel-2-msi/product-types/level-1c, title=Sentinel-2 MSI: MultiSpectral Instrument, Level-1C, sample=https://mw1.google.com/ges/dd/images/sentinel2_sample.png, tags=[copernicus, esa, eu, msi, radiance, sentinel], system:visualization_0_max=3000.0, product_tags=[msi, radiance], provider=European Union/ESA/Copernicus, visualization_0_min=0.0, system:visualization_0_name=RGB, visualization_0_name=RGB, visualization_0_bands=B4,B3,B2}}
So my question: Is there a way to slice this down to the intended system:time_start
data, or even just the original system:index
? I was looking into possibly using the callback property of getInfo()
, but I'm still a novice so I'm not sure if this is the correct approach. I just want the date information from the filtered Image Collection on the Mosaic, and most importantly on the exported images so that they can be distinguished between multiple dates.
I could always fallback to just using the FRST_PRVW_DATE
variable I already have as a simpler prefix/description, but that will always make the date incorrect (-1 day before the actual). Perhaps an alternative way would be to just have "FRST_PRVW_DATE + 1 Day
" in the Export description.
Best Answer
I ended up figuring out my own question, so I'll just leave the solution here: Example Solution
In short;
.map
function to pull thesystem:index
out of each image in the Image Collection, put them into a Dictionary, and add that to the Properties of each Image in the Image Collection. (This is important, as trying to extract the originalsystem:index
orsystem:start_time
results in null). This has the added bonus of being able to extract different and/or multiple properties, should anyone wish..aggregate_array
the created dictionary into a List. I can't explain why you need to do this, only that if you don't and try the next step on the Dictionary function itself, it will bring up an 'Invalid Type' error..get(0)
the created List to show only thesystem:index
property of the first Element/Image from the List..Mosaic
, also.set
the List_1st variable to the Mosaic. This puts thesystem:index
property of the first Image/Element agg.array List into the Mosaic..get('system:index')
on the Mosaic, and another togetInfo()
andslice()
to the string of interest (YYYYMMDDTHHMM). You could include another slice() section to this to include the Tile number (the last characters), or format it.description
section of the Export, insert the index variable and you'll have a simple method to insert the date from the first of an Image Collection to your Mosaic, and have it on the Export name.