Google Earth Engine - ошибка "Невозможно экспортировать полосы массива". Как экспортировать слой карты кросс-ковариации как Geotiff? - PullRequest
0 голосов
/ 06 сентября 2018

Я рассчитал и отобразил в виде слоя карты взаимную ковариацию полученных из Landsat данных об осадках NDVI и CHIRPS. Теперь я хочу экспортировать это как изображение, вырезанное в интересующей меня области, но получаю следующую ошибку:

Ошибка «Невозможно экспортировать полосы массива»

Мне не удалось найти решение. Есть ли способ экспортировать этот слой карты как геотиф? Я думаю, что, возможно, мне нужно сгладить массив, но я не уверен, как это сделать.

Вот код ниже:

l8toa = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA")

//Define a region of interest - Baringo county, kenya
var Baringo2 = /* color: #98ff00 */ee.Geometry.Polygon(
        [[[35.69382363692023, 1.4034169899773616],
          [35.69382363692023, 1.2606333558875118],
          [35.61691934004523, 1.0079975313237526],
          [35.58945351973273, 0.6509798625215468],
          [35.71030312910773, 0.35436075019447294],
          [35.72128945723273, 0.18956774160826206],
          [35.61691934004523, 0.18407460674896256],
          [35.58945351973273, 0.13463632293582842],
          [35.71030312910773, 0.04125265421470341],
          [35.68283730879523, -0.0466379620709295],
          [35.74875527754523, -0.18945988757796725],
          [35.96848184004523, 0.05223897866641199],
          [36.09482461348273, 0.002800509340276178],
          [36.27060586348273, 0.2719645271288622],
          [36.23215371504523, 0.45872822561768967],
          [36.32004434004523, 0.6509798625215468],
          [36.47934609785773, 0.8651943843139164],
          [36.32004434004523, 0.9915205478901427],
          [36.18271523848273, 1.1672705367627716],
          [36.08933144942023, 1.1892385469740003],
          [35.79270059004523, 1.6944479915417494]]]);

//print (Baringo2);

//Add Baringo 
Map.addLayer(ee.Image().paint(Baringo2, 0, 2), {}, 'Baringo_county');
Map.centerObject(Baringo2);

//B) Filtering, masking and preparing bands of interest

//preprocess the Landsat 8 imagery by filtering it to the location of interest, masking clouds, 
//and adding the variables in the model:

// This field contains UNIX time in milliseconds.
var timeField = 'system:time_start';

// Use this function to mask clouds in all Landsat imagery.
var maskClouds = function(image) {
  var quality = image.select('BQA');
  var cloud01 = quality.eq(61440);
  var cloud02 = quality.eq(53248);
  var cloud03 = quality.eq(28672);
  var mask = cloud01.or(cloud02).or(cloud03).not();
  return image.updateMask(mask);
};


// Use this function to add variables for NDVI, time and a constant
// to Landsat 8 imagery.
var addVariablesl8 = function(image) {
  // Compute time in fractional years since the epoch.
  var date = ee.Date(image.get(timeField));
  var years = date.difference(ee.Date('1970-01-01'), 'year');
  // Return the image with the added bands.
  return image
    // Add an NDVI band.
    .addBands(image.normalizedDifference(['B5', 'B4']).rename('NDVI'))
.float()
    // Add a time band.
    .addBands(ee.Image(years).rename('t').float())
    // Add a constant band.
    .addBands(ee.Image.constant(1));
};


// Remove clouds, add variables and filter to the area of interest - landsat 8.
var filteredLandsatl8 = l8toa
  .filterDate('2013-02-07', '2018-08-25')
  .filterBounds(Baringo2)
  .map(maskClouds)
  .map(addVariablesl8);



// Cross-covariance is measuring the correspondence between a variable and a covariate at a lag.

//Create a lagged ImageCollection

var lag = function(leftCollection, rightCollection, lagDays) {
  var filter = ee.Filter.and(
    ee.Filter.maxDifference({
      difference: 1000 * 60 * 60 * 24 * lagDays,
      leftField: timeField, 
      rightField: timeField
    }), 
    ee.Filter.greaterThan({
      leftField: timeField, 
      rightField: timeField
  }));

  return ee.Join.saveAll({
    matchesKey: 'images',
    measureKey: 'delta_t',
    ordering: timeField, 
    ascending: false, // Sort reverse chronologically
  }).apply({
    primary: leftCollection, 
    secondary: rightCollection, 
    condition: filter
  });
};

//This function joins a collection to itself, using a filter that gets all the images before but within a specified time difference (in days) of each image.  
//That list of previous images within the lag time is stored in a property of the image called images, sorted reverse chronologically.  

//Compute cross covariance 

//i) The covariance reducer expects a set of one-dimensional arrays as input.  
//So pixel values corresponding to time t need to be stacked with pixel values at time t ? l as multiple bands in the same image.  

var merge = function(image) {
  // Function to be passed to iterate.
  var merger = function(current, previous) {
    return ee.Image(previous).addBands(current);
  };
  return ee.ImageCollection.fromImages(
image.get('images')).iterate(merger, image);
};

//...use that function to merge the bands from the lagged collection:

//Use a function to convert the merged bands to arrays with bands pt and ph, then reduce with the covariance reducer:

var covariance = function(mergedCollection, band, lagBand) {
  return mergedCollection.select([band, lagBand]).map(function(image) {
    return image.toArray();
  }).reduce(ee.Reducer.covariance(), 8);
};

      //is NDVI related in some way to the precipitation before the NDVI was observed? 
//To estimate the strength of this relationship (in every pixel), 
//load precipitation, join, merge, and reduce as previously:


// Load Precipitation data (covariate)
var chirps = ee.ImageCollection('UCSB-CHG/CHIRPS/PENTAD');

// Join the t-l (l=1 pentad) precipitation images to the Landsat.
var lag1PrecipNDVI = lag(filteredLandsatl8, chirps, 5); 
// rainfall 5 days previous - aimed at annual grasses that respond quickly

// Add the precipitation images as bands.
var merged1PrecipNDVI = ee.ImageCollection(lag1PrecipNDVI.map(merge));

// Compute, visualise and display cross-covariance.
var cov1PrecipNDVI = covariance(merged1PrecipNDVI, 'NDVI', 'precipitation');
// create vizualization parameters
var viz = {min:-0.5, max:0.5, palette:['0000FF', '008000', 'FF0000']};

Map.addLayer(cov1PrecipNDVI.arrayGet([0, 1]).clip(Baringo2), viz, 'NDVI - PRECIP cov (lag = 5), Baringo');
//red is high cross covariance and blue is low covariance between NDVI and precipitation 5 days previously 

// Export the cov1PrecipNDVI image, specifying scale and region.
Export.image.toDrive({
  folder: 'Baringo_Remote_Sensing',
  image: cov1PrecipNDVI,
  description: 'NDVI - PRECIP cov (lag = 5)',
  scale: 30,
  region: Baringo2,
  maxPixels: 1e10
});

Может кто-нибудь помочь мне, пожалуйста?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...