Расчет площади пикселей в Google Earth Engine для сбора изображений с последующим экспортом значений в CSV - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь вычислить площадь пикселей воды в двух сценариях ios: 1) изображения, где облака не замаскированы, 2) изображения, где облака замаскированы. Раньше мне удавалось сделать это для Landsat 5 и 8, построив его в виде диаграммы, где я мог напрямую экспортировать значения для обоих сценариев ios в виде CSV. Однако я не могу этого сделать в Landsat 4, потому что он явно превышает максимальное количество пикселей.

Как я могу go это сделать? Заранее спасибо.

// last modified on 9/7/2020
// script to extract total area of water pixels from given area (fp), using landsat 4
// two outputs: one where clouds are masked, one where clouds are not masked


// loading image collection 
var landsat8= ee.ImageCollection("LANDSAT/LT04/C01/T1_SR").filterBounds(fp).filterDate('1982-01-01', '1993-12-31')
  // .filter(ee.Filter.eq('WRS_PATH', 126))
  // .filter(ee.Filter.eq('WRS_ROW', 52));
var visParams = {
  bands: ['B3', 'B2', 'B1'],
  min: 0,
  max: 3000,
  gamma: 1.4,
};
Map.addLayer(landsat8, visParams,'original images');

// // defining roi
// var roi = ee.Geometry.Polygon([
//   [[16.5,-1.7], [16.2,-2.1], [16.3, -2.15], [16.7, -1.8], [16.5, -1.75]]
// ]);

// Function to extract water, then calculate area of water pixel 
var waterfunction = function(image){
  //add the NDWI band to the image
  var ndwi = image.normalizedDifference(['B2', 'B4']).rename('NDWI');
  //get pixels above the threshold
  var water01 = ndwi.gt(-0.2);
  //extract only water pixels 
  image = image.addBands(ndwi).updateMask(water01);

// now to calculate water area 
// first change all water pixel values to 1
// then multiply by ee.Image.pixelArea; since that image gives us the area of each pixel
// then rename the band 
  var waterArea = water01
                         .divide(water01)
                         .multiply(ee.Image.pixelArea())
                         .rename('waterArea')
                        .divide(1e6);

// adding area of water as a band
  image = image.addBands(waterArea);

// calculate area 
  var stats = waterArea.reduceRegion({
    reducer: ee.Reducer.sum(), 
    geometry: fp, 
    scale: 30,
  })
  ;

  return image.set(stats);
};

// function to mask clouds out
function maskL8sr(image) {
  // Bits 3 and 5 are cloud shadow and cloud, respectively.
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  // Get the pixel QA band.
  var qa = image.select('pixel_qa');
  // Both flags should be set to zero, indicating clear conditions.
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask);
}

// mapping water function over my collection 
var collection = landsat8.map(waterfunction);
print(collection,'collection');
var visParams2 = {min: -0.2, 
  max: 1, 
    bands: 'NDWI', 
    palette: ['00FFFF', '0000FF']};

// var NDWICollection = collection.select('NDWI')
// Map.addLayer(NDWICollection.first(), visParams2,'water');
// //creating a chart 
// var title = {
//   title: 'Total area of water pixels (No clouds masked out)',
//   hAxis: {title: 'Time'},
//   vAxis: {title: 'Area (sq km)'},
// };

// var cloudChart = ui.Chart.image.series({
//   imageCollection: collection.select('waterArea'), 
//   region: fp, 
//   reducer: ee.Reducer.sum(), 
//   scale: 30,
// })
// .setOptions(title);
// print(cloudChart);

//masking clouds, then mapping water function over the collection
var cloudlessCollection = landsat8.map(maskL8sr).map(waterfunction);
var title2 = {
  title: 'Total area of water pixels (Clouds masked out)',
  hAxis: {title: 'Time'},
  vAxis: {title: 'Area (sq km)'},
};
var cloudlessChart = ui.Chart.image.series({
  imageCollection: cloudlessCollection.select('waterArea'), 
  region: fp, 
  reducer: ee.Reducer.sum(), 
  scale: 30,
})
.setOptions(title2);
print(cloudlessChart);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...