Google Earth Engine – How to Concatenate Export File Name

google-earth-enginegoogle-earth-engine-javascript-api

I am exporting an image from google earth engine and I want the export file name to be a string I created and concatenate the image metaData (date) with it.

var date = image.get('system:index');
var file_name = ee.String('Area').cat(date);

Export.image.toDrive({
        image: B11,
        description: file_name,
        region: study_area,
        scale: 30,
        maxPixels: 1e8
    });

But in the export tab the file name changes to something like this

ee.String({ "type": "Invocation", "arguments": { "string1": "1495_B4", "string2": { "type": "Invocation", "arguments": { "input": { "type": "Invocation", "arguments": { "object": { "type": "Invocation", "arguments": { "collection": { "type": "Invocation", "arguments": { "collection": { "type": "Invocation", "arguments": { "collection": { "type": "Invocation", "arguments": { "collection": { "type": "Invocation", "arguments": { "collection": { "type": "Invocation", "arguments": { "id": "COPERNICUS/S2_SR_HARMONIZED" }, "functionName": "ImageCollection.load" }, "filter": { "type": "Invocation", "arguments": { "leftField": ".all", "rightValue": { "type": "Invocation", "arguments": { "geometry": { "type": "Invocation", "arguments": { "collection": { "type": "Invocation", "arguments": { "tableId": "users/muddasir_assets_workshop/1461" }, "functionName": "Collection.loadTable" } }, "functionName": "Collection.geometry" } }, "functionName": "Feature" } }, "functionName": "Filter.intersects" } }, "functionName": "Collection.filter" }, "filter": { "type": "Invocation", "arguments": { "rightField": "system:time_start", "leftValue": { "type": "Invocation", "arguments": { "start": "2022-07-14", "end": "2022-08-11" }, "functionName": "DateRange" } }, "functionName": "Filter.dateRangeContains" } }, "functionName": "Collection.filter" }, "filter": { "type": "Invocation", "arguments": { "leftField": "CLOUDY_PIXEL_PERCENTAGE", "rightValue": 10 }, "functionName": "Filter.lessThan" } }, "functionName": "Collection.filter" }, "baseAlgorithm": { "type": "Function", "argumentNames": [ "_MAPPING_VAR_0_0" ], "body": { "type": "Invocation", "arguments": { "input": { "type": "ArgumentRef", "value": "_MAPPING_VAR_0_0" }, "bandSelectors": [ "B3", "B4", "B5", "B8", "B11" ] }, "functionName": "Image.select" } } }, "functionName": "Collection.map" } }, "functionName": "Collection.first" }, "property": "system:index" }, "functionName": "Element.get" } }, "functionName": "String" } }, "functionName": "String.cat"})

Best Answer

This is a classic issue of working with client and server side objects. The problem here is that Export.image.toDrive expects a client side string in the description of the image; however, you are providing a server side string (ee.String). An easy way to convert it to a client side string is using getInfo(). This should do the trick.

Export.image.toDrive({
        image: B11,
        description: file_name.getInfo(),
        region: study_area,
        scale: 30,
        maxPixels: 1e8
    });