Уменьшите коллекцию ee.image ежемесячно, используя python - PullRequest
0 голосов
/ 29 марта 2020

Я хотел бы перевести следующий javascript в Python, в котором код использует вложенную функцию .map (). Выводом является ImageCollection, который создает изображения с датой, такой как 2010/12, 2011/1 и т. Д.

var startyear = 2019;
var endyear = 2020;

var startdate = ee.Date.fromYMD(startyear,12,1);
var enddate = ee.Date.fromYMD(endyear,1,31)

var collection = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_NO2')
  .filterDate(startdate, enddate)

var MonthlyMedian = ee.ImageCollection.fromImages(
          years.map(function (y){
          return months.map(function (m) {
            var s = collection
            .filter(ee.Filter.calendarRange(y, y, 'year'))
            .filter(ee.Filter.calendarRange(m, m, 'month'))
            return s.median()
                    .set('numbImages',s.size())
                    .set('month', m)
                    .set('year',y)

    });
    }).flatten());

Я пытался использовать лямбда-функцию, но безуспешно, потому что я не знаю, как передать два параметра в лямбду. В результате я написал следующую Python версию.

    startyear = 2019;
    endyear = 2020;

    startdate = ee.Date.fromYMD(startyear,12,1);
    enddate = ee.Date.fromYMD(endyear,1,31)

    imgcollection = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_NO2').filterDate(startdate, enddate)

    months = enddate.difference(startdate, 'month').round()
    dates = ee.List.sequence(0, months.subtract(1), 1)

    def make_datelist(n):
        return startdate.advance(n, 'month')

    dates = dates.map(make_datelist)

    def getm(d):
        d = ee.Date(d)
        end = d.advance(1, 'month')
        m = d.get('month')
        y = d.get('year')
        s = imgcollection.filterDate(d, end) 
        #OR
        #s = imgcollection.filter(ee.Filter.calendarRange(y, y, 'year'))\
        #    .filter(ee.Filter.calendarRange(m, m, 'month'))
        return s.mean()\
                .set('numbImages', s.size())\
                .set('month', m)\
                .set('year', y)

     list_of_images = dates.map(getm)

     MonthlyCollection = ee.ImageCollection(list_of_images)

Я хотел бы спросить, можно ли дополнительно упростить сценарий python или заменить его лямбда-функцией.

...