更快的分块接口请查看博客《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');