google earth engine随缘学习(四)研究海岸线变化

好久没更新了,一方面是事真的多,另一方面是自己有多松懈了,今天研究的是填好造陆的变化。本人地理较差,专业问题请大佬多指正!本文主要是记录栅格缓冲区,重分类,消除孤岛等等一些GEE函数操作 。现在开始~

1.数据的选取

选取数据考虑的是水和陆地的年际变化,于是选取以下数据作为本次的实验数据:

google earth engine随缘学习(四)研究海岸线变化_第1张图片

下面是数据波段的介绍:

google earth engine随缘学习(四)研究海岸线变化_第2张图片
这里我把季节性水体和永久性水体都归为海洋(即会把部分滩涂归为海洋,或是把坑塘水田误归为海洋)

2.代码部分

function erode(img, distance) {
  var d = (img.not().unmask(1)
       .fastDistanceTransform(256).sqrt()
       .multiply(ee.Image.pixelArea().sqrt()))
  return img.updateMask(d.gt(distance))
}

function dilate(img, distance) {
  var d = (img.fastDistanceTransform(256).sqrt()
       .multiply(ee.Image.pixelArea().sqrt()))
  return d.lt(distance)
}

var land = ee.Image("USGS/SRTMGL1_003").unmask(0).gt(0)
var landMask = erode(dilate(land, 3000), 10000).mask().eq(1)  //这两个函数是用来做栅格的缓冲区
var oceanMask = erode(land.not(), 10000).mask().eq(1)


var imageCollection=lt.map(function(img){   //这里lt为引用的water classification数据集
   img=img.remap([0,1,2,3],[0,0,3,3]).unmask(0).not();     //重分类函数
   var waterMask=img;
   var minwaterSize = 1024; 
   var minlandSize = 60; 
   waterMask =waterMask.where(landMask,1);
   waterMask =waterMask.where(oceanMask,0);
   var segmentSize = waterMask.connectedPixelCount(Math.max(minwaterSize,minlandSize),false);    //清除孤岛
   var minSize = ee.Image(minwaterSize).where(waterMask,minlandSize); 
   waterMask = waterMask.where(segmentSize.lt(minSize),waterMask.not()); 
   return waterMask ;
 });
var coastline = imageCollection.first().reduceToVectors({
  reducer: ee.Reducer.countEvery(), 
  geometry: roi, 
  scale: 200,
  maxPixels: 1e10
});
var simpleBound = coastline.geometry().simplify(50);
var feature = ee.Feature(simpleBound );
var featureCollection = ee.FeatureCollection([feature]);
Export.table.toDrive({collection: featureCollection, fileFormat: 'KML'});

上述代码的大致流程就是,先通过DEM数据做反向缓冲区分析,分别计算沿海地区之外的海洋与陆地面积,用来作为以后的掩模数据,消除内陆水系的影响。对影像集的处理上,是先通过重分类大致区分海洋和陆地,再通过掩模消除内陆水系。然后规定海洋和陆地的最大孤岛面积(单位是像元),然后用connectedPixelCount函数计算每个像元连接周围的数量,最后通过where等一系列函数清除孤岛。
最后是矢量化并简化边界,导出矢量文件,在此不表。

原始图像(经过重分类,并对缺失的陆地数据通过ummask()函数补充之后的数据)

处理后的图像:

google earth engine随缘学习(四)研究海岸线变化_第3张图片

矢量化的海岸线边界(随便截取的一块区域):


这里将季节性的水体直接划分为海洋还是会带来一些误差的~

你可能感兴趣的:(小白的GEE学习)