GEE:内存超限?将研究区划分成规则的小块运算

更快的分块接口请查看博客《GEE:分块处理以降低内存压力

在这里插入图片描述
如图所示,我们将研究区Roi划分了16个小块,选择其中的第10块做研究区roi。当内存超过限制时,我们可以一块一块的运行代码,最后将结果合起来,就可以适当的解决内存超限的问题。

源代码:https://code.earthengine.google.com/55067123cfec42b639c72e12ae8a3415?noload=true


var roi = table.geometry()

//切割实验区
function gridSplitMN(roi, n, m) {
  var coordinateList = roi.bounds().coordinates().flatten();
  var xmin = coordinateList.get(0).getInfo();
  var ymin = coordinateList.get(1).getInfo();
  var xmax = coordinateList.get(4).getInfo();
  var ymax = coordinateList.get(5).getInfo();
  // Get dx & dy.
  var dx = (xmax-xmin)/n;
  var dy = (ymax-ymin)/m;
  // Generate all the rects.
  var gridList=ee.List([]);
  var fid = 0;
  for(var i=0;i<n;i++)
  {
    for(var j=0;j<m;j++)
    { 
      if(i==n-1)
      {
        if(j == m-1)
        { 
          var coords=[xmin+i*dx,ymin+j*dy,xmax,ymax];
        }
        else {
          var coords=[xmin+i*dx,ymin+j*dy,xmax,ymin+(j+1)*dy]
        }
      }
      else if (j==m-1)
      {
        var coords=[xmin+i*dx,ymin+j*dy,xmin+(i+1)*dx,ymax]
      }
      else
      {
        var coords=[xmin+i*dx,ymin+j*dy,xmin+(i+1)*dx,ymin+(j+1)*dy]
      }
      var rect = ee.Feature(ee.Algorithms.GeometryConstructors.Rectangle(ee.List(coords)));
      
      // Filter.
      if(rect.intersects(roi).getInfo()) {
        var intersect = rect.intersection(roi);
        intersect = intersect.set('grid_id', fid);
        fid++;
        gridList=gridList.add(intersect);
      }
    }
  }
  // Return.
  return ee.FeatureCollection(gridList);
}

//将研究区分为4*4=16个格子,选择第11个格子做研究区
roi = gridSplitMN(roi, 4, 4).filterMetadata('grid_id', 'equals', 11).first().geometry();

//设置显示样式:color代表边界颜色;fillcolor代表填充颜色
var styling={color:'red',fillColor:'00000000'}

//JX就是矢量边界
Map.addLayer(table.style(styling),{},"Roi_Boundary")
Map.centerObject(table, 5);
Map.addLayer(roi,{},'roi_Boundary');
### Google Earth Engine (GEE) LandTrendr 分块处理土地变化监测 LandTrendr 是一种用于检测长时间序列遥感数据中的植被覆盖和其他表面特征的变化模式的强大工具。通过分块处理,可以在大规模域内有效地执行复杂的时间序列分析。 #### 使用 GEE 实现 LandTrendr 的基本流程 在 GEE 中实现 LandTrendr 需要几个关键步骤: 1. **准备输入影像集合** 定义一个函数来筛选和预处理 Landsat 影像集合作为 LandTrendr 输入。这通常涉及去除云层影响、标准化反射率以及选择特定波段[^1]。 2. **配置 LandTrendr 参数** 设置参数以控制如何分割时间线、定义扰动阈值以及其他重要设置。这些参数直接影响到最终结果的质量和解释方式[^2]。 3. **运行 LandTrendr 分析** 调用 `ee.Algorithms.TemporalSegmentation.LandTrendr` 函数来进行实际计算。此过程会返回一系列片段化的年份及其对应的光谱特性变化情况。 4. **可视化与导出结果** 利用地图界面展示各个时间段内的主要转变事件;也可以将生的数据下载至本地进一步分析或与其他地理信息系统集使用[^3]。 下面是一个简单的 Python 代码示例展示了上述概念的应用: ```python import ee def prepare_landsat_collection(start_year, end_year): landsat = ( ee.ImageCollection('LANDSAT/LC08/C01/T1_SR') .filterDate(f'{start_year}-01-01', f'{end_year}-12-31') .map(lambda image: cloud_mask(image)) ) return landsat.median() def run_landtrendr(landsat_median): lt_results = ( ee.Algorithms.TemporalSegmentation.LandTrendr( timeSeries=landsat_median, maxSegments=6, spikeThreshold=0.9, vertexCountOvershoot=3, preventOneYearRecovery=True, recoveryThreshold=0.25, pvalThreshold=0.05, bestModelProportion=0.75, minObservationsNeeded=6 ).select(['landtrendr']) ) return lt_results study_area = ee.Geometry.Rectangle([-120, 35, -110, 40]) landsat_data = prepare_landsat_collection(2013, 2020).clip(study_area) lt_analysis = run_landtrendr(landsat_data) Map.addLayer(lt_analysis.randomVisualizer(), {}, 'LT Analysis Results') task = ee.batch.Export.image.toDrive({ 'image': lt_analysis.select('landtrendr'), 'description': 'LandTrendr_Analysis', 'scale': 30, 'region': study_area.bounds().getInfo()['coordinates'] }) task.start() ```
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_养乐多_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值