Google Earth Engine(地物分类统计)
本期我们就讲一下利用GEE对遥感影像进行分类后,如何对地物类型进行统计。
本次我们还是采用MODIS官方的地物分类产品(MCD12Q1.006),空间分辨率为500m,时间分辨率为一年。这个MODIS产品中含有多个地物分类的产品。
我们选用其中一种产品,波段为LC_Type1,GEE对它的描述为:Annual International Geosphere-Biosphere Programme (IGBP) classification。
首先我们看一下这种分类产品
LC_Type1可视化
这种地物分类总共把地物分成17类,分别用从1到17的数字表示,例如波段中17就表示水体。
代码:
代码语言:javascript复制var beijing = ee.FeatureCollection("users/boyxiaozheng/feature/beijing");
//选取2017年的地物分类产品
var img = ee.ImageCollection('MODIS/006/MCD12Q1')
.filterDate('2017-01-01','2017-12-31')
.first();
//选择LC_Type1产品
var igbpLandCover = img.select('LC_Type1');
var igbpLandCoverVis = {
min: 1.0,
max: 17.0,
palette: [
'05450a', '086a10', '54a708', '78d203', '009900', 'c6b044', 'dcd159',
'dade48', 'fbff13', 'b6ff05', '27ff87', 'c24f44', 'a5a5a5', 'ff6d4c',
'69fff8', 'f9ffa4', '1c0dff'
],
};
Map.centerObject(beijing, 6);
Map.addLayer(igbpLandCover, igbpLandCoverVis, 'IGBP Land Cover');
地物面积统计
我们已经看到这种地物分类的样子,下面我们就对地物进行统计。我们下面以北京地区为例,统计北京地区水体的面积。
大致的思路就是把非水体进行mask,然后对返回的图像(只含水体)利用reduce进行统计。我们对水体的像元个数进行统计,然后已知每个像元的面积,就可以算出水体的面积。
代码:
代码语言:javascript复制var beijing = ee.FeatureCollection("users/boyxiaozheng/feature/beijing");
//建立一个函数,函数可以把image中不等于my_value的数值都mask掉
var mask=function(image,my_type){
var mask=image.eq(my_type);
var masked_image=image.updateMask(mask);
return masked_image;
}
//选择2017年地物分类产品
var dataset = ee.ImageCollection('MODIS/006/MCD12Q1')
.filterDate('2017-01-01','2017-12-31');
var igbpLandCover = dataset.first().select('LC_Type1');
//调用上面写的函数,把不等于17(表示水体)的数值都mask掉
var image_17=mask(igbpLandCover,17)
//统计水体的像元个数
var countDictionary = image_17.reduceRegion({
reducer: ee.Reducer.count(),
geometry: beijing.geometry(),
scale: 30,
maxPixels: 1e9
});
//把统计结果打印出来
print(countDictionary);
var visparam = {
min: 17.0,
max: 17.0,
palette: ['1c0dff']
};
Map.centerObject(beijing,10);
//显示北京矢量
Map.addLayer(beijing);
//显示北京的水体
Map.addLayer(image_17.clip(beijing), visparam);
本次我们讲了利用GEE对地物类型进行统计。大家有什么想实现的功能呢?可以随时留言交流。