google earth engine随缘学习(六)通过格网导出图像

GEE在栅格图像导出方面,限制了导出像素的最大数量。因此如果研究区域很大或者对分辨率要求比较高,就不能一次导出整个栅格图像,而需要拆成多部分单个导出,但是在gee上拆分矢量数据非常的不方便。

可以通过生成格网的方式,来批量、整齐的导出图像数据

比如下图:

在这里插入图片描述

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直接导出影像。
顺便介绍一个绘制矢量数据边界的函数paint,可根据属性字段设置颜色和线段宽度
Map.addLayer(ee.Image().toByte().paint(grid, 1, 1), {}, 'outline')

更多矢量数据可视化——https://developers.google.com/earth-engine/feature_collections_visualizing

猜你喜欢

转载自blog.csdn.net/qq_21567935/article/details/85141665