• PIE-Engine 教程:水稻面积提取1(宿迁市)


    我们这次用国家的边界通过name进行筛选到宿迁市进行分析,本次计算的水稻面积用到的指数是NDVI,LSWI,EVI三种指数进行分析,用到的影像是Landsat 8数据,DEM数据(计算坡度、坡向)还有指定5月和8月份SAR影像("VH1","VH2")最后分别加入到Landsat波段影像,可导出我们所合成的影像。先看所用到的函数:

    aspect(input)

    计算地形DEM数据的坡向信息(以度为单位),局部梯度是用每个像素的4个连通邻域来计算的,因此图像的边缘会出现缺失值。

    方法参数:

    - terrain(Terrain)

    DEM数据处理方法。

    - input(Image)

    地形DEM数据,以米为单位。

    返回值:Image

    slope(image)

    计算地形DEM数据的坡度信息(以度为单位),局部梯度是用每个像素的4个连通邻域来计算的,因此图像的边缘会出现缺失值。

    方法参数:

    - terrain(Terrain)

    DEM数据处理方法。

    - image(Image)

    地形DEM数据,以米为单位。

    返回值:Image

    addBands(srcImg,names,overwrite)

    添加影像中的波段到当前影像。

    方法参数:

    - dstImg(Image)

    Image实例。

    - srcImg(Image)

    要添加波段的影像对象。

    - names(String|Array)

    波段名称列表,默认为null,表示全部添加。

    - overwrite(Boolean)

    相同名称是否覆盖,默认是false。

    返回值:Image

    map(algorithm,dropNulls)

    针对ImageCollection中的每个Image进行循环计算。

    方法参数:

    - imageCollection(ImageCollection)

    ImageCollection实例。

    - algorithm(Function)

    参数是Image的方法,需要返回Image

    - dropNulls(Boolean)

    是否允许返回空值

    返回值:ImageCollection

    代码:

    1. /**
    2. * @Name : 基于 PIE Engine Studio 的水稻自动提取
    3. * @Author : 武汉大学VHR队
    4. * @Desc : 淮安市水稻提取 -- 合成监督分类影像
    5. * @Source : 航天宏图第四届 “航天宏图杯”PIE软件二次开发大赛云开发组三等奖获奖作品
    6. */
    7. //1.合成监督分类影像
    8. var area = pie.Geometry.Polygon([
    9. [
    10. [
    11. 118.19042604840365,
    12. 32.717477656827796
    13. ],
    14. [
    15. 119.67193792508522,
    16. 32.717477656827796
    17. ],
    18. [
    19. 119.67193792508522,
    20. 34.12687250105918
    21. ],
    22. [
    23. 118.19042604840365,
    24. 34.12687250105918
    25. ],
    26. [
    27. 118.19042604840365,
    28. 32.717477656827796
    29. ]
    30. ]
    31. ], null);
    32. //加载淮安市矢量
    33. var roi = pie.FeatureCollection("NGCC/CHINA_CITY_BOUNDARY")
    34. .filter(pie.Filter.eq('name', '淮安市'))
    35. .first()
    36. .geometry()
    37. Map.centerObject(roi, 8)
    38. Map.addLayer(roi, { color: "red", fillColor: "00000000", width: 2 }, "Huaian")
    39. //NDVI
    40. function NDVI(image) {
    41. var red = image.select("B4")
    42. var nir = image.select("B5")
    43. var ndvi = (nir.subtract(red)).divide(nir.add(red)).multiply(10000)
    44. return image.addBands(ndvi.rename("NDVI"));
    45. }
    46. //LSWI
    47. function LSWI(image) {
    48. var swir = image.select("B6")
    49. var nir = image.select("B5")
    50. var lswi = (nir.subtract(swir)).divide(nir.add(swir)).multiply(10000)
    51. return image.addBands(lswi.rename("LSWI"));
    52. }
    53. //EVI
    54. function EVI(image) {
    55. var red = image.select("B4").divide(10000)
    56. var nir = image.select("B5").divide(10000)
    57. var blue = image.select("B2").divide(10000)
    58. var evi = ((nir.subtract(red)).multiply(2.5))
    59. .divide(nir.add(red.multiply(6)).subtract(blue.multiply(7.5)).add(1))
    60. .multiply(10000)
    61. return image.addBands(evi.rename("EVI"));
    62. }
    63. //去云处理
    64. function cloudMask(image) {
    65. var qa = image.select('BQA');
    66. var cloudMask = qa.bitwiseAnd(1 << 4).eq(0);
    67. return image.updateMask(cloudMask);
    68. };
    69. //选择用于分类的影像并裁剪
    70. var l8col = pie.ImageCollection("LC08/01/T1")
    71. .filterBounds(roi)
    72. .filterDate("2020-3-1", "2020-12-1")
    73. .select(["B2", "B3", "B4", "B5", "B6", "B7", "BQA"])
    74. .map(cloudMask)
    75. .map(NDVI)
    76. .map(LSWI)
    77. .map(EVI)
    78. .median()
    79. //选取dem
    80. var dem = pie.ImageCollection('DEM/SRTM_30')
    81. .filterBounds(roi)
    82. .select('elevation')
    83. .mosaic()
    84. .clip(roi);
    85. var aspect = pie.Terrain.aspect(dem);
    86. var slope = pie.Terrain.slope(dem).multiply(180 / 3.1415926);
    87. //选取SAR 5月8月影像
    88. var sarmay = pie.Image('user/pieadmin/saas/06/sar_may').select('B1').multiply(10000).clip(roi);
    89. var saraug = pie.Image('user/pieadmin/saas/06/sar_aug').select('B1').multiply(10000).clip(roi);
    90. //选择用于分类的波段
    91. var bands = [
    92. "B2", "B3", "B4", "B5", "B6", "B7", "NDVI", "LSWI", "EVI"
    93. ];
    94. //"VH1","VH2","ASPECT","SLOPE"
    95. //合成用于监督分类的影像
    96. var l8Image = l8col
    97. .addBands(aspect.rename("ASPECT"))
    98. .addBands(slope.rename("SLOPE"))
    99. .addBands(sarmay.rename("VH1"))
    100. .addBands(saraug.rename("VH2"))
    101. .select(bands)
    102. .clip(roi)
    103. //导出影像
    104. Export.image({
    105. image: l8Image,
    106. description: "l8Image",
    107. assetId: "l8Image",
    108. region: area,
    109. scale: 30
    110. });

     

  • 相关阅读:
    OpenHarmony轻内核编码规范
    单元测试中常见错误
    C++中的bind与function
    1997-2020年各省三废排放量和熵值法计算的环境规制综合指数(无缺失值)
    【Vue】组件封装小技巧 — 利用$listener和v-on接收父组件传递的事件
    喜报!智汇云舟签约优质项目 视频孪生加速赋能千行百业数智化转型
    【Spring boot 整合 JPA 保存数据和Spring boot 使用 JdbcTemplate 保存数据】
    HTML静态网页作业——基于html+css+javascript+jquery+bootstarp响应式成都家乡介绍网页
    基于TNEWS‘ 今日头条中文新闻(短文本)分类
    【Linux】从零开始学习Linux基本指令(一)
  • 原文地址:https://blog.csdn.net/qq_31988139/article/details/127038254