• PIE-Engine 教程:水稻面积提取3—sentinel2合成月度影像宿迁市)


    这里分别获取计算2019年和2020年LSWI、EVI两期影像的分析,这里我们有几个常用的函数其中过一个是构建影像集合的一个函数:

    fromImages(images)

    根据Image列表构建ImageCollection对象。

    方法参数:

    - imageCollection(ImageCollection)

    ImageCollection实例。

    - images(Array)

    影像数据列表

    返回值:ImageCollection

    大家这里可能有点疑问关于代码中的分析,EVI影像的波段代码要divide(1000),因为这里的sentinel2的波段中每一个波长

    名称中心波长(nm)分辨率(m)描述信息
    AB
    B1443.9442.360Aerosols
    B2496.6492.110Blue
    B356055910Green
    B4664.566510Red
    B5703.9703.820Red Edge 1
    B6740.2739.120Red Edge 2
    B7782.5779.720Red Edge 3
    B8835.183310NIR
    B8A864.886420Red Edge 4
    B9945943.260Water vapor
    B101373.51376.960Cirrus
    B111613.71610.420SWIR 1
    B122202.42185.720SWIR 2
    QA10443.9442.310--
    QA20----20--
    QA60----60--
    Bitmask for QA60
    • Bits 10: Opaque clouds
      • 0: No opaque clouds
      • 1: Opaque clouds present
    • Bits 11: Cirrus clouds
      • 0: No cirrus clouds
      • 1: Cirrus clouds present

    代码:

    1. /**
    2. * @Name : 基于 PIE Engine Studio 的水稻自动提取
    3. * @Author : 武汉大学VHR队
    4. * @Desc : 淮安市水稻提取 - 合成sentinel2月度影像
    5. * @Source : 航天宏图第四届 “航天宏图杯”PIE软件二次开发大赛云开发组三等奖获奖作品
    6. */
    7. //3.合成sentinel2月度影像
    8. //选择淮安市矢量
    9. var roi = pie.FeatureCollection("NGCC/CHINA_CITY_BOUNDARY").filter(pie.Filter.eq('name', '淮安市')).first().geometry()
    10. Map.centerObject(roi, 8)
    11. Map.addLayer(roi)
    12. //LSWI
    13. function LSWI(image) {
    14. var swir = image.select("B11")
    15. var nir = image.select("B8")
    16. var lswi = (nir.subtract(swir)).divide(nir.add(swir))
    17. return image.addBands(lswi.rename("LSWI"));
    18. }
    19. //EVI
    20. function EVI(image) {
    21. var red = image.select("B4").divide(10000)
    22. var nir = image.select("B5").divide(10000)
    23. var blue = image.select("B2").divide(10000)
    24. var evi = ((nir.subtract(red)).multiply(2.5))
    25. .divide(nir.add(red.multiply(6)).subtract(blue.multiply(7.5)).add(1))
    26. .multiply(10000)
    27. return image.addBands(evi.rename("EVI"));
    28. }
    29. //去云处理
    30. function maskS2clouds(image) {
    31. //选择有关云掩膜的波段
    32. var qa = image.select('QA60')
    33. //位10和11分别代表云和卷云。
    34. var cloudBitMask = 1 << 10;
    35. var cirrusBitMask = 1 << 11;
    36. // 将有关云的像元置为0
    37. var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
    38. .and(qa.bitwiseAnd(cirrusBitMask).eq(0))
    39. return image.updateMask(mask)
    40. }
    41. var area = pie.Geometry.Polygon([
    42. [
    43. [
    44. 118.33558377212347,
    45. 32.62288800615681
    46. ],
    47. [
    48. 119.24768569883133,
    49. 32.62288800615681
    50. ],
    51. [
    52. 119.24768569883133,
    53. 31.21438784070145
    54. ],
    55. [
    56. 118.33558377212347,
    57. 31.21438784070145
    58. ],
    59. [
    60. 118.33558377212347,
    61. 32.62288800615681
    62. ]
    63. ]
    64. ], null);
    65. //合成lswi波段的月度影像(做这个实验时由于map函数存在问题不能同时进行两个波段计算,因此分开计算)
    66. var lswi1 = pie.ImageCollection('S2/L1C')
    67. .filterBounds(roi)
    68. .filterDate("2019-12-1", "2019-12-31")
    69. .select(['B2', 'B4', 'B8', 'B11', 'QA60'])
    70. .map(maskS2clouds)
    71. .map(LSWI)
    72. .select(['LSWI'])
    73. .mosaic()
    74. .clip(roi)
    75. var lswi2 = pie.ImageCollection('S2/L1C')
    76. .filterBounds(roi)
    77. .filterDate("2020-12-1", "2020-12-31")
    78. .select(['B2', 'B4', 'B8', 'B11', 'QA60'])
    79. .map(maskS2clouds)
    80. .map(LSWI)
    81. .select(['LSWI'])
    82. .mosaic()
    83. .clip(roi);
    84. //合成evi波段的月度影像
    85. var evi1 = pie.ImageCollection('S2/L1C')
    86. .filterBounds(roi)
    87. .filterDate("2019-12-1", "2019-12-31")
    88. .select(['B2', 'B4', 'B8', 'B11', 'QA60'])
    89. .map(maskS2clouds)
    90. .map(EVI)
    91. .select(['EVI'])
    92. .mosaic()
    93. .clip(roi)
    94. var evi2 = pie.ImageCollection('S2/L1C')
    95. .filterBounds(roi)
    96. .filterDate("2020-12-1", "2020-12-31")
    97. .select(['B2', 'B4', 'B8', 'B11', 'QA60'])
    98. .map(maskS2clouds)
    99. .map(EVI)
    100. .select(['EVI'])
    101. .mosaic()
    102. .clip(roi);
    103. //将2019年和2020年对应月份影像取均值合成
    104. var lswi = pie.ImageCollection.fromImages([lswi1, lswi2]).mean()
    105. var evi = pie.ImageCollection.fromImages([evi1, evi2]).mean()
    106. var jan = lswi.addBands(evi);
    107. //导出月度影像
    108. Export.image({
    109. image: jan,
    110. description: 'jan',
    111. assetId: "jan",
    112. region: area,
    113. scale: 30,
    114. })

  • 相关阅读:
    1991年至2008年澳大利亚每月的抗糖尿病药物补贴时间序列分析
    归并排序知识总结
    [附源码]计算机毕业设计基于Springboot的中点游戏分享网站
    玩游戏掉帧严重?看过来!
    第十章、python字符串操作与with语句及上下文管理器------with语句与上下文管理器(Context Manager)
    win10-cpu-Yolov7
    解决——》CommunicationsException:Communications link failure
    ZynqMP PL固件通过U-BOOT从指定位置加载FPGA BIT
    springboot+quartz报错:Table ‘XXXX.QRTZ_TRIGGERS‘ doesn‘t exist
    Node + Express 后台开发 —— 起步
  • 原文地址:https://blog.csdn.net/qq_31988139/article/details/127038999