GEE的每一个API都值得我们去研究,就以GEE中最为普通的方法拼接来讲就有很多的内容可以研究,这一篇文章就是探讨一下GEE中拼接方法。关于GEE中的影像集合拼接为单张影像有很多中方法,最为普通的莫过于mosiac()方法,利用这个方法我们可以将影像集合拼接为单张影像。还有偶尔会用到的是qualityMosiac(),这个方法在我们要筛选某些数据的时候比较有用。先看一下这个两个的API:
文章图片
文章图片
从字面解释的意识可以知道:
- mosaic获取的是最后一个有值的像素,然后生成一张影像;
- qualityMosaic提取的是按照qunalityBand排序后最大值的数据,类似对集合使用max函数;
如果还是不太理解上面的解释,我们直接使用代码来解释相关内容。下面的例子都使用了公共的数据:
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR"),roi = /* color: #d63000 */ee.Geometry.Point([-104.78007812499999, 37.982913413138604]);
1、普通的Mosaic
具体代码:
//普通的mosaic,获取的是最后一个有值的像素//默认的addLayer(imageCollection)使用的是普通的mosaicfunction normalMosaicDemo() {Map.centerObject(roi, 8);
var scol = l8.filterBounds(roi).filterDate("2018-1-1", "2018-3-1").select("B1").map(function(image) {return image.updateMask(image.lt(2000));
});
print(scol);
Map.addLayer(scol, {}, "1");
var img1 = scol.mosaic();
Map.addLayer(img1, {}, "2");
}normalMosaicDemo();
分析代码:
这里需要注意的是,直接使用addLayer()添加imageCollection与imageCollection调用mosaic方法是结果是一致的。同时通过点击查看点的数据,可以看到mosaic计算所得是最后一个有效的像素值。
运行结果:
文章图片
2、质量排序的qualityMosaic
(1)例子一,直接使用qualityMosaic方法
具体代码:
//qualityMosaic()提取的是排序后最大值的数据function qualityMosaicDemo1() {Map.centerObject(roi, 8);
var scol = l8.filterBounds(roi).filterDate("2018-1-1", "2018-3-1").select("B1");
print(scol);
Map.addLayer(scol, {}, "1");
var img1 = scol.qualityMosaic("B1");
Map.addLayer(img1, {}, "2");
}qualityMosaicDemo1();
代码分析:
从结果可以看到qualityMosaic提取的是像素点的最大值。
运行结果:
文章图片
(2)例子二,单波段影像对比max和qualityMosaic结果
具体代码:
//单波段与max对比function qualityMosaicDemo2() {Map.centerObject(roi, 8);
var scol = l8.filterBounds(roi).filterDate("2018-1-1", "2018-3-1").select("B1");
print(scol);
Map.addLayer(scol, {}, "1");
var img1 = scol.qualityMosaic("B1");
Map.addLayer(img1, {}, "2");
var img2 = scol.max();
Map.addLayer(img2, {}, "3");
var img3 = scol.reduce(ee.Reducer.max());
Map.addLayer(img3, {}, "4");
var img4 = scol.reduce(ee.Reducer.max(1));
Map.addLayer(img4, {}, "5");
}qualityMosaicDemo2();
代码分析:
从结果可以看到使用max和qualityMosaic在拼接单波段影像中两者是没有区别的。
运行结果:
文章图片
(3)例子三,多波段影像对比max和qualityMosaic的结果
【GEE|GEE学习笔记 五十九(GEE中mosiac、qualityMosiac、max区别)】具体代码:
//多波段与max对比function qualityMosaicDemo3() {Map.centerObject(roi, 8);
var scol = l8.filterBounds(roi).filterDate("2018-1-1", "2018-3-1").map(function(image) {var doy = ee.Date(image.get("system:time_start")).format("DDD");
doy = ee.Number.parse(doy).int();
image = image.addBands(ee.Image.constant(doy).toInt().rename("doy"));
return image;
}).select(["B1", "doy"]);
print(scol);
Map.addLayer(scol, {}, "1");
var img1 = scol.qualityMosaic("B1");
Map.addLayer(img1, {}, "2");
var img2 = scol.max();
Map.addLayer(img2, {}, "3");
var img3 = scol.reduce(ee.Reducer.max());
Map.addLayer(img3, {}, "4");
var img4 = scol.reduce(ee.Reducer.max(2));
Map.addLayer(img4, {}, "5");
}qualityMosaicDemo3();
代码分析:
这个结果可能有些人看得就有些懵了,使用qualityMosaic只会对imageCollection中的qualityBand排序不会影响其他波段,这种效果类似ee.Reducer.max(2)这种方法,关于max中参数有无的区别后续在讨论。而直接使用max()或者ee.Reducer.max()则是对所有波段排序后取值。这点区别需要注意一下。
运行结果:
文章图片
文章图片
大家如果有问题需要交流或者有项目需要合作,可以微信联系我,加微信好友请留言加上“GEE”。
知乎专栏:https://zhuanlan.zhihu.com/c_123993183
微信号:shi_weihappy
推荐阅读
- 网络前沿知识|GEE学习笔记 七十六(【GEE之Python版教程十】字典)
- 网络前沿知识|GEE学习笔记 七十八(干涸的洪泽湖)
- python|GEE学习笔记 七十五(【GEE之Python版教程九】数值)
- python|GEE学习笔记 七十(【GEE之Python版教程四】Python基础编程二)
- GEE|GEE学习笔记 六十二(保密是头等大事)
- GEE|GEE学习笔记 五十八(设置数值数据保留N位)
- GEE|GEE学习笔记 五十一(Fusion Table将在2019年12月3日关闭)
- GEE|GEE学习笔记 五十六(GEE中如何把文件导出到Google Drive的子目录)
- GEE|GEE学习笔记 五十三(GEE导出的影像波段名称哪去了())