PIE-engine 教程 ——利用NDWI加载青海湖三年水域影像和面积计算

简介: PIE-engine 教程 ——利用NDWI加载青海湖三年水域影像和面积计算

   这里我们首先画一个自己选择的研究区,用于方便计算NDWI,这里我们将青海湖区域作为我们的研究区,第二步我们就是要设定一个函数,用于在函数中执行循环遍历,这里包括去云和影像筛选过程,最后按照最大值合成,最后我们分别加载影像,计算影像水域的面积分别用到的就是我们提到的pixelArea()和reduceregion(),在这个过程中我们可以设定一个水域变化面积的函数,用来展示每一面水体的面积变化情况,期间我们还可以构建动态展示效果,加载影像的三年湖水的动画效果。

ChartImage(ySeries,xSeries,options)

即将弃用,请使用 ui.Chart.image.*替换。

通过统计的结果在控制台绘制图表,绘制的图表可以保存。

方法参数:

- ySeries(List)

计算结果Array对象

- xSeries(List)

横坐标标注Array对象

- options(Object)这里的函数可以有好多种,我们这里分别在之前设定好的类型当中分别用到了线性图和柱状图

用于描述统计图的Json对象

返回值:null

代码:

//加载我们的自己画的区域
var geometry = pie.Geometry.Polygon([
    [
        [
            99.58525333814976,
            37.24714673441345
        ],
        [
            100.77704556952716,
            37.24714673441345
        ],
        [
            100.77704556952716,
            36.528174170711736
        ],
        [
            99.58525333814976,
            36.528174170711736
        ],
        [
            99.58525333814976,
            37.24714673441345
        ]
    ]
], null);
//将其所化的geometry转化为矢量
var roi = pie.FeatureCollection(pie.Feature(geometry)); 
//加载图层
Map.addLayer(roi, { color: "ff0000ff", fillColor: "00000000" }, "roi", false); 
//加载地图中心点
Map.centerObject(geometry, 9);
//指定年份数据的NDWI指数提取
function processImage(year, roi) {
    var id = "LC08/01/T1";
    var l8Col = pie.ImageCollection(id)
        .filterBounds(roi) //按范围过滤
        .filterDate(year + "-04-01", year + "-10-01") //按时间过滤
        .select(["B3", "B5", "BQA"])  //选择绿波段、红外波段和BQA波段
        .map(function (image) {     //map函数针对ImageCollection中的每个Image进行循环计算。
            var b3 = image.select("B3");
            var b5 = image.select("B5");
            var ndwi = (b3.subtract(b5)).divide(b3.add(b5));  //ndwi计算,ndwi=(b3-b5)/(b3+b5)
            //QA去云
            var qa = image.select("BQA");
            var cloudMask = qa.bitwiseAnd(1 << 4).eq(0);
            //去云和提取水体
            ndwi = ndwi.updateMask(cloudMask)
                .updateMask(ndwi.gt(0.3));
            return ndwi.rename("NDWI");//对图层重命名,方便后面选择,不重命名的话,select时是“B3”
        });
    //采用最大值直接融合,最后做一次裁剪
    var yearImg = l8Col.select("NDWI").max().clip(roi);//
    return yearImg;  //返回Image对象
}
// 2017-2019年巢湖区域水体指数提取及显示
var img1 = processImage(2017, geometry);
Map.addLayer(img1, { min: -1, max: 1, palette: "0000ff" }, "2017", false);//blue
var img2 = processImage(2018, geometry);
Map.addLayer(img2, { min: -1, max: 1, palette: "00ff00" }, "2018", false);//green
var img3 = processImage(2019, geometry);
Map.addLayer(img3, { min: -1, max: 1, palette: "ff0000" }, "2019", false);//red
// 计算影像面积
function calcArea(yearImg, roi) {
    var areaImage = yearImg.pixelArea().multiply(yearImg.gt(0.3));
    var water = areaImage.reduceRegion(pie.Reducer.sum(), roi, 30);
    return water;
}
// 青海湖水域2017-2019年面积变化多图表对比
//构建描述统计图的json对象
var line_options = {     
    title: '青海湖水域2017-2019年面积变化',
    legend: ['水体面积'],
    xAxisName: "日期(年)",
    yAxisName: "水体面积(平方千米)",
    chartType: "line",
    yScale: 1 / 1000000
};
//构建计算结果Array对象
var areaValues = [    
    calcArea(img1, geometry),
    calcArea(img2, geometry),
    calcArea(img3, geometry)
];
//构建横坐标标注Array对象
var xSeries = [2017, 2018, 2019]; 
//打印结果    
print("2017年", areaValues[0]);
print("2018年", areaValues[1]);
print("2019年", areaValues[2]);
//构建动画数据
var layerNames = [];  
layerNames.push("2017" + "");
layerNames.push("2018" + "");
layerNames.push("2019" + "");
//显示动画效果,传入动画数据、循环时间、循环次数
Map.playLayersAnimation(layerNames, 2, 100); 
//加载显示折线统计图
ChartImage(areaValues, xSeries, line_options);  
//构建描述统计图的json对象
var column_options = {     
    title: '青海湖水域2017-2019年面积变化',
    legend: ["水体面积"],
    yAxisName: "水体面积(平方千米)",
    xAxisName: "日期(年)",
    chartType: "column",
    yScale: 1 / 1000000
};
//加载显示柱状统计图
ChartImage(areaValues, xSeries, column_options);   

结果:

image.png

 

 

image.png

image.png

image.png

 

image.png

 

image.png


相关文章
|
7月前
|
传感器 编解码 API
Google Earth Engine(GEE)——如何进行NDVI和EVI指数的图表展示?
Google Earth Engine(GEE)——如何进行NDVI和EVI指数的图表展示?
153 0
|
7月前
Google Earth Engine——ndwi水体面积计算(landsat4/5/8)出现的无法加载影像的问题
Google Earth Engine——ndwi水体面积计算(landsat4/5/8)出现的无法加载影像的问题
50 0
|
7月前
Open Google Earth Engine(OEEL)——oeel.plotly.plot绘制MODIS影像中土地分类的变化情况
Open Google Earth Engine(OEEL)——oeel.plotly.plot绘制MODIS影像中土地分类的变化情况
66 0
|
7月前
Google Earth Engine(GEE)——求指定区域的NDVI时序变化和不同值域范围内的像素数量及其面积
Google Earth Engine(GEE)——求指定区域的NDVI时序变化和不同值域范围内的像素数量及其面积
93 0
|
7月前
|
编解码 算法
Google Earth Engine(GEE)——遍历提取多年MODIS影像所有土地分类的面积
Google Earth Engine(GEE)——遍历提取多年MODIS影像所有土地分类的面积
127 0
|
7月前
|
传感器
GEE——使用cart机器学习方法对Landsat影像条带修复以NDVI和NDWI为例(全代码)
GEE——使用cart机器学习方法对Landsat影像条带修复以NDVI和NDWI为例(全代码)
135 0
|
JSON 数据可视化 数据格式
PIE-engine 教程 ——长时间序列NDVI影像计算和chart时序图加载(2017年锦州全年植被指数展示)
PIE-engine 教程 ——长时间序列NDVI影像计算和chart时序图加载(2017年锦州全年植被指数展示)
621 0
PIE-engine 教程 ——长时间序列NDVI影像计算和chart时序图加载(2017年锦州全年植被指数展示)
PIE-engine 教程 ——NDVI和FVC计算时序分析以2013年-2020年福州市为例
PIE-engine 教程 ——NDVI和FVC计算时序分析以2013年-2020年福州市为例
641 0
PIE-engine 教程 ——NDVI和FVC计算时序分析以2013年-2020年福州市为例
|
Serverless 定位技术
PIE-engine 教程 ——影像集合的使用map()映射函数(北京市NDVI计算)
PIE-engine 教程 ——影像集合的使用map()映射函数(北京市NDVI计算)
229 1
PIE-engine 教程 ——影像集合的使用map()映射函数(北京市NDVI计算)
|
关系型数据库 MySQL 数据处理
PIE-Engine 教程:水稻面积提取1(宿迁市)
PIE-Engine 教程:水稻面积提取1(宿迁市)
207 0
PIE-Engine 教程:水稻面积提取1(宿迁市)

热门文章

最新文章