var generateGrid = function(xmin, ymin, xmax, ymax, dx, dy) {
var xx = ee.List.sequence(xmin, ee.Number(xmax).subtract(dx), dx)
var yy = ee.List.sequence(ymin, ee.Number(ymax).subtract(dy), dy)
var cells = xx.map(function(x) {
return yy.map(function(y) {
var x1 = ee.Number(x)
var x2 = ee.Number(x).add(ee.Number(dx))
var y1 = ee.Number(y)
var y2 = ee.Number(y).add(ee.Number(dy))
var coords = ee.List([x1, y1, x2, y2]);
var rect = ee.Algorithms.GeometryConstructors.Rectangle(coords); //生成矩形
return ee.Feature(rect)
})
}).flatten(); //变成单个数组
return ee.FeatureCollection(cells);
}
var dx = 2
var dy = 2
var xmin = -180.0001388888889
var xmax = 180.0001388888889
var ymin = -56.00013888888889
var ymax = 60.00013888888889
var grid = generateGrid(xmin, ymin, xmax, ymax, dx, dy) //设置参数,生成格网
var grid = grid.map(function(i) { //这一步可跳过,这一步是通过dem数据来只留下包含陆地的格网,来减少格网数量简化运算,也可以修改格网初始经纬度坐标来减少不必要的格网
return i.set('any_dem', srtm30.reduceRegion(ee.Reducer.anyNonZero(), i.geometry(), 10000).get('elevation')) //如果格网内不全为0(有陆地)则给格网添加属性any_dem=1,否则添加属性any_dem=0
}).filter(ee.Filter.eq('any_dem', 1)) // 只保留any_dem=1的格网(有陆地)
print(grid.size()); //查看生成所有格网数量
Map.addLayer(grid, {}, 'grid');
var gridlist = grid.getInfo()["features"]
print (featlist) //显示所有的格网(列表)
加载之后显示出格网,可以通过界面的lnspector点击格网获得格网id:
获得Feature 8743, 查找相应的index(紫色数字)
var region = ee.Feature(featlist[3370]) //3370为选定格网的index
Export.table(region) //可以导出格网或者直接用region.bounds()作为geometry直接导出影像。
Map.addLayer(ee.Image().toByte().paint(grid, 1, 1), {}, 'outline')