Google Earth Engine(GEE)——容易犯的错误8(样本数据的导出export)

2024-02-02 08:12:45 浏览数 (1)

Export 中间结果 

假设您的目标是从相对复杂的计算图像中取样。通常Export对图像更有效toAsset(),加载导出的图像,然后采样。例如:

代码语言:javascript复制
var image = ee.Image('UMD/hansen/global_forest_change_2018_v1_6');
var geometry = ee.Geometry.Polygon(
    [[[-76.64069800085349, 5.511777325802095],
      [-76.64069800085349, -20.483938229362376],
      [-35.15632300085349, -20.483938229362376],
      [-35.15632300085349, 5.511777325802095]]], null, false);
var testRegion = ee.Geometry.Polygon(
    [[[-48.86726050085349, -3.0475996402515717],
      [-48.86726050085349, -3.9248707849303295],
      [-47.46101050085349, -3.9248707849303295],
      [-47.46101050085349, -3.0475996402515717]]], null, false);

// 2016 年森林损失,对样本进行分层。
var loss = image.select('lossyear');
var loss16 = loss.eq(16).rename('loss16');

// 除云函数
function maskL8sr(image) {
  var cloudShadowBitMask = 1 << 3;
  var cloudsBitMask = 1 << 5;
  var qa = image.select('pixel_qa');
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
      .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask).divide(10000)
      .select("B[0-9]*")
      .copyProperties(image, ["system:time_start"]);
}

var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
    .map(maskL8sr);

// 创建两个年度无云复合影像。
var composite1 = collection.filterDate('2015-01-01', '2015-12-31').median();
var composite2 = collection.filterDate('2017-01-01', '2017-12-31').median();

// 我们想要这个堆栈的分层样本
var stack = composite1.addBands(composite2)
    .float(); // 导出尽可能小的尺寸。

// 导出图像。由于导出已完成,因此对该块进行了注释。
/*
var link = '0b8023b0af6c1b0ac7b5be649b54db06'
var desc = 'Logistic_regression_stack_'   link;
Export.image.toAsset({
  image: stack,
  description: desc,
  assetId: desc,
  region: geometry,
  scale: 30,
  maxPixels: 1e10
})
*/

// 加载导出的图像。
var exportedStack = ee.Image(
  'projects/google/Logistic_regression_stack_0b8023b0af6c1b0ac7b5be649b54db06');

// 先取一个很小的样本,进行调试。
var testSample = exportedStack.addBands(loss16).stratifiedSample({
  numPoints: 1,
  classBand: 'loss16',
  region: testRegion,
  scale: 30,
  geometries: true
});
print(testSample); // Check this in the console.

// 取一个大样本。
var sample = exportedStack.addBands(loss16).stratifiedSample({
  numPoints: 10000,
  classBand: 'loss16',
  region: geometry,
  scale: 30,
});

// 导出大样本...

在此示例中,请注意图像导出为浮点数。除非绝对必要,否则不要以双精度导出。执行此导出时,请注意代码编辑器链接(在导出前立即获得)嵌入在文件名中以实现可复制性。

导出完成后,重新加载资产并继续从中采样。请注意,首先在非常小的测试区域上运行非常小的样本,以进行调试。当证明成功时,获取更大的样本并将其导出。如此大的样本通常需要出口。不要期望这些样本在print()没有先导出它们的情况下可以交互地(例如通过)或可用(例如作为分类器的输入)。

0 人点赞