1 votos

Escribir un bucle en Google Earth Engine y guardar todos los archivos como únicos

https://developers.google.com/earth-engine/datasets/catalog/NASA_NEX-DCP30_ENSEMBLE_STATS

Del enlace anterior necesito descargar datos diarios de dos variables (pr, tasmax) para dos periodos de tiempo: 1980-2005 y 2040-2060 para dos sitios: sitio a (lon = 83.1499, lat = 23.14985) y sitio b (79.477034, 11.015846)

Utilizando el enlace de abajo he conseguido hacerlo para un solo sitio X variable X combinación de fecha como se muestra

Descargar Earth Exchange Global Daily Downscaled Projections for single lat lon

var startDate = ee.Date('1980-01-01');
var endDate = ee.Date('2006-01-01');

// get the dataset between date range and extract band on interest
var dataset = ee.ImageCollection('NASA/NEX-GDDP')
              .filter(ee.Filter.date(startDate,endDate));
var maximumAirTemperature = dataset.select('tasmax');

// get projection information
var proj = maximumAirTemperature.first().projection();

var point = ee.Geometry.Point([83.1499, 23.14985]);

// calculate number of days to map and extract data for
var n = endDate.difference(startDate,'day').subtract(1);

// map over each date and extract all climate model values
var timeseries = ee.FeatureCollection(
ee.List.sequence(0,n).map(function(i){
var t1 = startDate.advance(i,'day');
var t2 = t1.advance(1,'day');
var feature = ee.Feature(point);
var dailyColl = maximumAirTemperature.filterDate(t1, t2);
var dailyImg = dailyColl.toBands();
// rename bands to handle different names by date
var bands = dailyImg.bandNames();
var renamed = bands.map(function(b){
var split = ee.String(b).split('_');
return ee.String(split.get(0)).cat('_').cat(ee.String(split.get(1)));
 });
// extract the data for the day and add time information
var dict = dailyImg.rename(renamed).reduceRegion({
reducer: ee.Reducer.mean(),
  geometry: point,
  scale: proj.nominalScale()
}).combine(
  ee.Dictionary({'system:time_start':t1.millis(),'isodate':t1.format('YYYY-MM-dd')})
);
return ee.Feature(point,dict);
})
);

Map.addLayer(point);
Map.centerObject(point,6);

// export feature collection to CSV
Export.table.toDrive({
  collection: timeseries,
  description: 'a_hist_tmax',
  fileFormat: 'CSV',
 });

¿Cómo puedo crear un bucle para procesar todas las combinaciones (cada combinación de sitio X variable X conjunto de fechas) y guardarlas como archivos únicos en mi unidad?

2voto

Daniel Puntos 9

Algo como esto debería funcionar:

var sites = [
  [83.1499, 23.14985],
  [79.477034, 11.015846],
]

var yearRanges = [
  [1980, 2006],
  [2040, 2060]
]

sites.forEach(function (site) {
  yearRanges.forEach(function (yearRange) {
    exportTimeseries(site, yearRange)
  })
})

function exportTimeseries(site, yearRange) {
  // Most of your code goes here

  var name = yearRange.join('-') + '_' + site.join('-')
  Map.addLayer(point, null, name);

  // export feature collection to CSV
  Export.table.toDrive({
    collection: timeseries,
    description: 'a_hist_tmax_' + name,
    fileFormat: 'CSV',
  });
}

https://code.earthengine.google.com/c7978c0ac6cb6c1d9d9fd009679e1b8d

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X