PIE-engine 教程 ——NDVI和FVC计算时序分析以2013年-2020年福州市为例

简介: PIE-engine 教程 ——NDVI和FVC计算时序分析以2013年-2020年福州市为例

   本教程我们将分析植被覆盖度动态分布,再计算FVC的时候,我们首先要计算NDVI,然后通归一化处理,这个过程主要是计算最大值最小值的获取,植被覆盖度根据像元二分模型计算FVC=(NDVI-NDVImin)/(NDVImax-NDVImin)

植被覆盖率指某一地域植物垂直投影面积与该地域面积之比,用百分数表示。森林覆盖率,亦称森林覆被率指一个国家或地区森林面积占土地面积的百分比,是反映一个国家或地区森林面积占有情况或森林资源丰富程度及实现绿化程度的指标,又是确定森林经营和开发利用方针的重要依据之一。

这里用的两个reduce数据,

max()

返回一个输出其输入的最大值的Reducer。如果numInputs大于1,则还输出附加输入的相应值。

方法参数:

- numInputs(Int,默认1)

输入的数量。

返回值:Reducer

min()

返回一个输出其输入的最小值的Reducer。如果numInputs大于1,则还输出附加输入的相应值。

方法参数:

- numInputs(Int,默认1)

输入的数量。

返回值:Reducer

mean()

返回一个计算其输入的(加权)算术平均值的Reducer。

方法参数:

返回值:Reducer

filter(filter)

对影像集合进行指定过滤规则的过滤,然后返回过滤后的影像集合。

方法参数:

- imageCollection(ImageCollection)

ImageCollection实例。

- filter(Filter)

过滤规则对象。

返回值:ImageCollection

这里我们再使用filter的过程中可以筛选的不仅仅是日期,可以作为单个的年份的筛选

first()

获得影像集合的第一个Image对象。

方法参数:

- imageCollection(ImageCollection)

ImageCollection实例。

返回值:Image

代码:

//第一步:划定研究区域福州市
var china = pie.FeatureCollection("NGCC/CHINA_CITY_BOUNDARY");
// print(china);
var FZ = china.filter(pie.Filter.eq("name", "福州市"));
Map.addLayer(FZ, { color: "ffff00ff", fillColor: "00000000" }, "福州市");
Map.centerObject(FZ, 8);
var geometry = FZ.getAt(0).geometry();
//第二步:筛选数据,提取2013-2020年NDVI年最大值影像
//1、调用Landsat8 TOA数据集并设定筛选条件,构建NDVI计算公式
function processImage(year, geometry) {
    /*初始化影像并且按照空间、时间过滤*/
    var l8Col = pie.ImageCollection("LC08/01/T1")
        .filterBounds(geometry)
        .filterDate(year + "-03-01", year + "-07-31")
        .select(["B5", "B4", "BQA"])
        .map(function (image) {
            var b4 = image.select("B4");
            var b5 = image.select("B5");
            //计算NDVI植被指数
            var ndvi = (b5.subtract(b4)).divide(b5.add(b4));
            //QA波段去云
            var qa = image.select("BQA");
            var cloudMask = qa.bitwiseAnd(1 << 4).eq(0);
            //去云和提取植被覆盖区域
            ndvi = ndvi.updateMask(cloudMask)
                .updateMask(ndvi.gt(0));
            return ndvi;
        });
    //提取研究区域每年NDVI最大值
    var yearImg = l8Col.select("B5").max().clip(geometry);
    return yearImg;
};
//2、设置NDVI显示参数
var visParams = {
    min: -0.2,
    max: 0.8,
    palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901, 66A000, 529400,' +
        '3E8601, 207401, 056201, 004C00, 023B01, 012E01, 011D01, 011301'
};
//3、提取福州市2013-2020年NDVI年最大值影像并显示
var layerNames = [];
var NDVIs = [];
for (var i = 0; i < 8; i++) {
    var year = 2013 + i;
    var key = year.toString();
    layerNames.push(key);
    //统计每一年的NDVI均值影像
    var NDVI = processImage(year, geometry);
    NDVIs.push(NDVI);
    //将NDVI数据添加到地图上显示
    Map.addLayer(NDVI, visParams, "NDVI_" + key, false);
};
//第三步:提取福州市2013-2020年FVC影像,根据像元二分模型计算FVC=(NDVI-NDVImin)/(NDVImax-NDVImin)
//1、设定区域内2013-2020年每年的NDVI最大值、最小值以及FVC计算方法
function calFVCs(NDVI, geometry) {
    var NDVI_max = NDVI.reduceRegion(pie.Reducer.max(), geometry, 1000).get("B5").getInfo();
    var NDVI_min = NDVI.reduceRegion(pie.Reducer.min(), geometry, 1000).get("B5").getInfo();
    var FVC = (NDVI.subtract(NDVI_min)).divide(pie.Number(NDVI_max).subtract(NDVI_min));
    return FVC;
};
//2、提取区域内2013-2020年每年FVC影像并显示
var FVCs = [];
for (var j = 0; j < 8; j++) {
    var year = 2013 + j;
    var key1 = year.toString();
    //提取每年的FVC影像
    var FVC = calFVCs(NDVIs[j], geometry);
    FVC = FVC.set("year", year);
    FVCs.push(FVC);
    //在地图上显示FVC影像
    Map.addLayer(FVC, visParams, "FVC_" + key1);
};
print(FVCs);
//第四步:添加图例显示
/**
 * 图例配置数据
 * title:图例的名称
 * colors:图例的颜色
 * labels:图例分类名称
 * step:需要分的总步长
 */
var data = {
    title: "植被覆盖",
    colors: ['#FFFFFF', '#CE7E45', '#DF923D', '#F1B555', '#FCD163', '#99B718', '#74A901',
        '#66A000', '#529400', '#3E8601', '#207401', '#056201', '#004C00', '#023B01',
        '#012E01', '#011D01', '#011301'],
    labels: ["低覆盖", "中低覆盖", "中覆盖", "中高覆盖", "高覆盖"],
    step: 30,
};
var style = {
    right: "200px",
    bottom: "10px",
    height: "70px",
    width: "350px",
};
var legend = ui.Legend(data, style);
// 地图上显示图例组件
Map.addUI(legend);
//第五步:统计指定区域内2013年-2020年每年的FVC均值,并绘制FVC动态变化曲线
//1、定义区域内FVC均值计算方法
function calFVCmeans(FVCImg, geometry) {
    var FVC_mean = FVCImg.reduceRegion(pie.Reducer.mean(), geometry, 1000);
    return FVC_mean;
}
//2、构建FVC影像集合
var FVCImgs = pie.ImageCollection().fromImages(FVCs);
print(FVCImgs);
//3、计算区域内FVC均值
var FVCmeans = [];
for (var m = 0; m < FVCs.length; m++) {
    var year = 2013 + m;
    var FVCImg = FVCImgs.filter(pie.Filter.eq("year", year)).first();
    var FVC_mean = calFVCmeans(FVCImg, geometry);
    print(year + "FVC均值为", FVC_mean);
    FVCmeans.push(FVC_mean);
}
//4、绘制福建省2013-2020年植被指数变化折线图
var xSeries = layerNames;
var line_options = {
    title: '福州市2013年-2020年植被覆盖动态变化',
    legend: ['FVC均值'],
    xAxisName: "日期",
    yAxisName: "植被覆盖度",
    chartType: "line",
    smooth: true //是否平滑
};
ChartImage(FVCmeans, xSeries, line_options);
//第六步:创建2013-2020年FVC影像导出批量任务,用于导出影像集合到个人仓库下,方便后续的直接使用
//1、构建FVC影像集合
for (var k = 0; k < FVCs.length; k++) {
    var year = 2013 + k;
    var image = FVCImgs.filter(pie.Filter.eq("year", year)).first();
    //2、导出2013-2020年每年FVC影像   
    Export.image({
        image: image,
        description: "FVC_" + year,
        assetId: "FVC_" + year,
        region: geometry,
        scale: 1000
    })
};

结果:

image.png

 

image.png


相关文章
|
7月前
Google Earth Engine(GEE)——计算LST地表温度的出现的错误
Google Earth Engine(GEE)——计算LST地表温度的出现的错误
179 0
|
7月前
|
传感器 编解码 API
Google Earth Engine(GEE)——如何进行NDVI和EVI指数的图表展示?
Google Earth Engine(GEE)——如何进行NDVI和EVI指数的图表展示?
153 0
|
JSON 数据格式
PIE-engine 教程 ——利用NDWI加载青海湖三年水域影像和面积计算
PIE-engine 教程 ——利用NDWI加载青海湖三年水域影像和面积计算
362 0
PIE-engine 教程 ——利用NDWI加载青海湖三年水域影像和面积计算
|
7月前
|
传感器 编解码 区块链
Google Earth Engine(GEE)——Landsat8/modis/sentinel2 NDVI时序影像差异对比分析图表
Google Earth Engine(GEE)——Landsat8/modis/sentinel2 NDVI时序影像差异对比分析图表
195 0
GEE:如何批量处理并下载指定时间范围的月尺度NDVI数据集(MOD09GA为例)
GEE:如何批量处理并下载指定时间范围的月尺度NDVI数据集(MOD09GA为例)
706 0
Google Earth Engine(GEE)——影像进行数学运算(NDVI为例)!
Google Earth Engine(GEE)——影像进行数学运算(NDVI为例)!
825 0
Google Earth Engine(GEE)——影像进行数学运算(NDVI为例)!
|
7月前
|
编解码 数据可视化 定位技术
Google Earth Engine谷歌地球引擎GEE直方图与时间序列多波段折线图绘制与可视化参数调整
Google Earth Engine谷歌地球引擎GEE直方图与时间序列多波段折线图绘制与可视化参数调整
138 1
Google Earth Engine谷歌地球引擎GEE直方图与时间序列多波段折线图绘制与可视化参数调整
|
7月前
|
传感器
GEE——使用cart机器学习方法对Landsat影像条带修复以NDVI和NDWI为例(全代码)
GEE——使用cart机器学习方法对Landsat影像条带修复以NDVI和NDWI为例(全代码)
135 0
|
7月前
Google Earth Engine(GEE)——求指定区域的NDVI时序变化和不同值域范围内的像素数量及其面积
Google Earth Engine(GEE)——求指定区域的NDVI时序变化和不同值域范围内的像素数量及其面积
93 0
|
JSON 数据可视化 数据格式
PIE-engine 教程 ——长时间序列NDVI影像计算和chart时序图加载(2017年锦州全年植被指数展示)
PIE-engine 教程 ——长时间序列NDVI影像计算和chart时序图加载(2017年锦州全年植被指数展示)
621 0
PIE-engine 教程 ——长时间序列NDVI影像计算和chart时序图加载(2017年锦州全年植被指数展示)