Google Earth Engine – updatemask Removing Metadata Issue

cloud covergoogle-earth-enginepythonsentinel-2

I'm using the Jupyter Notebooks Python GEE API.

I'm using the basic sentinel 2 cloud cover algorithm, maskS2cloud, from the catalogue example. But it removes the metadata from my image collection that I need later. Is there a way around this?

import ee
ee.Initialize()

def maskS2clouds(image):
    qa = image.select('QA60')

#    Bits 10 and 11 are clouds and cirrus, respectively.
    cloudBitMask = 1 << 10
    cirrusBitMask = 1 << 11

#   Both flags should be set to zero, indicating clear conditions.
    mask = qa.bitwiseAnd(cloudBitMask).eq(0).And(qa.bitwiseAnd(cirrusBitMask).eq(0))

    return image.updateMask(mask).divide(10000)


ic= ee.ImageCollection("COPERNICUS/S2")\
    .filterDate('2016-10-01', '2017-02-28')

ic_masked = ic.map(lambda x: maskS2clouds(x))


# prints all the expected metadata
print(ic.first().propertyNames().getInfo())

# only has ['system:index', 'system:bands', 'system:band_names']
print(ic_masked().propertyNames().getInfo())

Best Answer

Many image manipulation operations in Earth Engine remove all properties. The principle is that it is impractical for Earth Engine to determine whether the operation makes the metadata incorrect (such as if it is a scale/offset parameter) or to decide what to do when two images with different metadata are being combined with some binary operator.

In order to restore the properties when you know it makes sense, you can use copyProperties:

return image.updateMask(mask).divide(10000).copyProperties(image)