谷歌地球引擎GEE:基于像素加以筛选、掩膜、提取分析
本文主要对GEE中的栅格图层像元条件筛选与掩膜操作加以介绍。
var landsat_2020=landsat_8.filterDate('2020-5-1','2020-5-31').mean();
Map.addLayer(dem,{},"DEM");
Map.addLayer(dem,{min:[-811.28],max:[1238.4]},"DEM");
随后执行代码,即可看到每次运行后DEM图层的可视化参数配置都是一致的。
接下来,就进行图层像元筛选的操作。在GEE中,我们可以直接通过.gt()
(大于)、.lt()
(小于)、.gte()
(大于等于)等函数,对像元数值加以关系判别并选取。例如,通过dem.gt(1800)
,我们就可以筛选出像素数值大于1800
的DEM像元。
var top_pixel=dem.gt(1800);
Map.addLayer(top_pixel,{},"Top");
执行代码,可以看到海拔较高(即大于1800
m)地区像元显示为白色,其它地区显示为黑色。
var top_mask=top_pixel.mask(top_pixel)
Map.addLayer(top_mask,{palette:["63ff14"]},"Top_mask");
执行代码,可以看到海拔较高区域像元被筛选出并以彩色显示,而其它地区像元则不再显示。
接下来,我们利用normalizedDifference()
函数计算一下NDVI,并对NDVI图层加以更进一步的像素筛选操作。关于GEE中NDVI的计算我们在后期的教学博客中会详细讲解,这里暂时不具体介绍。
var NDVI=landsat_2020.normalizedDifference(["B5","B4"]);
Map.addLayer(NDVI,{},"NDVI");
依据与前述内容一致的方法,首先手动调整NDVI图层的可视化参数。
找到合适的参数配置后,将其嵌入代码中。
var NDVI=landsat_2020.normalizedDifference(["B5","B4"]);
Map.addLayer(NDVI,{min:[-0.2098],max:[0.5692],palette:["ff3d6a","645aff","b1ff80","fff687"]},"NDVI");
再依据同样的像素筛选与掩膜代码,对NDVI图层加以处理:
var high_NDVI=NDVI.gt(0.45);
var high_NDVI_mask=high_NDVI.mask(high_NDVI);
Map.addLayer(NDVI,{min:[-0.2098],max:[0.5692],palette:["ff3d6a","645aff","b1ff80","fff687"]},"NDVI");
Map.addLayer(high_NDVI_mask,{palette:["000000"]},"High_NDVI");
其中,"000000"
表示黑色。执行代码可以看到,大于0.45
的NDVI被显示为黑色,其余地区则依旧显示为彩色。
接下来,我们尝试对同一个图层进行两个限定条件的筛选。两个限定条件其实也很简单,直接在第一个筛选条件后用.and()
函数跟随第二个限定条件即可。
var middle_NDVI=NDVI.gt(-0.5).and(NDVI.lt(0.5));
var middle_NDVI_mask=middle_NDVI.mask(middle_NDVI);
Map.addLayer(NDVI,{min:[-0.2098],max:[0.5692],palette:["ff3d6a","645aff","b1ff80","fff687"]},"NDVI");
Map.addLayer(middle_NDVI_mask,{palette:["000000"]},"Middle_NDVI");
执行代码,即可将大于-0.5
而小于0.5
的NDVI区域加以筛选。
同样的,我们还可以同时对多个不同的图层加以像素筛选。依旧是利用.and()
函数,在对第一个图层的限定条件后跟随对第二个图层的限定条件即可。
var middle_NDVI=NDVI.gt(-0.5).and(NDVI.lt(0.5));
var middle_NDVI_mask=middle_NDVI.mask(middle_NDVI);
Map.addLayer(NDVI,{min:[-0.2098],max:[0.5692],palette:["ff3d6a","645aff","b1ff80","fff687"]},"NDVI");
//Map.addLayer(middle_NDVI_mask,{palette:["000000"]},"Middle_NDVI");
var across_image=NDVI.gt(0.45).and(dem.lt(1500));
var across_image_mask=across_image.mask(across_image);
Map.addLayer(across_image_mask,{palette:["000000"]},"Across_image");
执行代码,黑色区域即为NDVI大于0.45
且海拔低于1500
m的区域,完成筛选。
至此,大功告成。
转载自:https://juejin.cn/post/7271103274065182777