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


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

    ChartImage(ySeries,xSeries,options)

    即将弃用,请使用 ui.Chart.image.*替换。
    通过统计的结果在控制台绘制图表,绘制的图表可以保存。

    方法参数:

    - ySeries(List)

    计算结果Array对象

    - xSeries(List)

    横坐标标注Array对象

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

    用于描述统计图的Json对象

    返回值:null

    代码:

    1. //加载我们的自己画的区域
    2. var geometry = pie.Geometry.Polygon([
    3. [
    4. [
    5. 99.58525333814976,
    6. 37.24714673441345
    7. ],
    8. [
    9. 100.77704556952716,
    10. 37.24714673441345
    11. ],
    12. [
    13. 100.77704556952716,
    14. 36.528174170711736
    15. ],
    16. [
    17. 99.58525333814976,
    18. 36.528174170711736
    19. ],
    20. [
    21. 99.58525333814976,
    22. 37.24714673441345
    23. ]
    24. ]
    25. ], null);
    26. //将其所化的geometry转化为矢量
    27. var roi = pie.FeatureCollection(pie.Feature(geometry));
    28. //加载图层
    29. Map.addLayer(roi, { color: "ff0000ff", fillColor: "00000000" }, "roi", false);
    30. //加载地图中心点
    31. Map.centerObject(geometry, 9);
    32. //指定年份数据的NDWI指数提取
    33. function processImage(year, roi) {
    34. var id = "LC08/01/T1";
    35. var l8Col = pie.ImageCollection(id)
    36. .filterBounds(roi) //按范围过滤
    37. .filterDate(year + "-04-01", year + "-10-01") //按时间过滤
    38. .select(["B3", "B5", "BQA"]) //选择绿波段、红外波段和BQA波段
    39. .map(function (image) { //map函数针对ImageCollection中的每个Image进行循环计算。
    40. var b3 = image.select("B3");
    41. var b5 = image.select("B5");
    42. var ndwi = (b3.subtract(b5)).divide(b3.add(b5)); //ndwi计算,ndwi=(b3-b5)/(b3+b5)
    43. //QA去云
    44. var qa = image.select("BQA");
    45. var cloudMask = qa.bitwiseAnd(1 << 4).eq(0);
    46. //去云和提取水体
    47. ndwi = ndwi.updateMask(cloudMask)
    48. .updateMask(ndwi.gt(0.3));
    49. return ndwi.rename("NDWI");//对图层重命名,方便后面选择,不重命名的话,select时是“B3”
    50. });
    51. //采用最大值直接融合,最后做一次裁剪
    52. var yearImg = l8Col.select("NDWI").max().clip(roi);//
    53. return yearImg; //返回Image对象
    54. }
    55. // 2017-2019年巢湖区域水体指数提取及显示
    56. var img1 = processImage(2017, geometry);
    57. Map.addLayer(img1, { min: -1, max: 1, palette: "0000ff" }, "2017", false);//blue
    58. var img2 = processImage(2018, geometry);
    59. Map.addLayer(img2, { min: -1, max: 1, palette: "00ff00" }, "2018", false);//green
    60. var img3 = processImage(2019, geometry);
    61. Map.addLayer(img3, { min: -1, max: 1, palette: "ff0000" }, "2019", false);//red
    62. // 计算影像面积
    63. function calcArea(yearImg, roi) {
    64. var areaImage = yearImg.pixelArea().multiply(yearImg.gt(0.3));
    65. var water = areaImage.reduceRegion(pie.Reducer.sum(), roi, 30);
    66. return water;
    67. }
    68. // 青海湖水域2017-2019年面积变化多图表对比
    69. //构建描述统计图的json对象
    70. var line_options = {
    71. title: '青海湖水域2017-2019年面积变化',
    72. legend: ['水体面积'],
    73. xAxisName: "日期(年)",
    74. yAxisName: "水体面积(平方千米)",
    75. chartType: "line",
    76. yScale: 1 / 1000000
    77. };
    78. //构建计算结果Array对象
    79. var areaValues = [
    80. calcArea(img1, geometry),
    81. calcArea(img2, geometry),
    82. calcArea(img3, geometry)
    83. ];
    84. //构建横坐标标注Array对象
    85. var xSeries = [2017, 2018, 2019];
    86. //打印结果
    87. print("2017年", areaValues[0]);
    88. print("2018年", areaValues[1]);
    89. print("2019年", areaValues[2]);
    90. //构建动画数据
    91. var layerNames = [];
    92. layerNames.push("2017" + "");
    93. layerNames.push("2018" + "");
    94. layerNames.push("2019" + "");
    95. //显示动画效果,传入动画数据、循环时间、循环次数
    96. Map.playLayersAnimation(layerNames, 2, 100);
    97. //加载显示折线统计图
    98. ChartImage(areaValues, xSeries, line_options);
    99. //构建描述统计图的json对象
    100. var column_options = {
    101. title: '青海湖水域2017-2019年面积变化',
    102. legend: ["水体面积"],
    103. yAxisName: "水体面积(平方千米)",
    104. xAxisName: "日期(年)",
    105. chartType: "column",
    106. yScale: 1 / 1000000
    107. };
    108. //加载显示柱状统计图
    109. ChartImage(areaValues, xSeries, column_options);

    结果:

     

     

     

     

     

     

     

     

  • 相关阅读:
    论坛项目知识回顾
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    在k8s中快速搭建基于Prometheus监控系统
    按关键字搜索lazada商品接口(支持高并发请求多个国家站数据),代码对接教程
    1. 获取数据-requests.get()
    我的DW个人网站设计——安徽宣城6页HTML+CSS+JavaScript
    【MindSpore】DCGAN生成漫画头像-----利用华为云modelarts云终端实现
    护眼灯有效果吗?五款好用热门的护眼台灯推荐
    第十五天设计 Goal 解析器
    EN 12259-5固定消防系统水流探测器—CE认证
  • 原文地址:https://blog.csdn.net/qq_31988139/article/details/127018884