• PIE-Engine APP:广东省生态遥感指数研究


    本文以广东省为研究区,分别计算NDBSI\WET\NDVI\LST各个指数的的计算后遥感生态指数。本文使用的影像是MODIS影像(USGS/MOD09A1/006、USGS/MOD11A2/006、USGS/MOD13A1/006)然后利用QA波段进行去云,然后通过影像集合进行影像筛选和相关去云操作,然后设定可视化参数,之后就是计算每一个指数的参数以及可视化参数。最后我们将chart图表的样式进行设定,然后导出影像。本文所需的函数

    ui.Chart.array(data)

    数据图表组件。

    方法参数:

    - ui(ui.Chart)

    调用者:ui.Chart对象。

    - data(Object)

    图表配置信息。

    返回值:ui.Chart

    reduceRegion(reducer,geometry,scale)

    对特定区域的所有像素进行统计,返回结果为一个JSON对象;目前可完成最大、最小和求和统计计算。

    方法参数:

    - image(Image)

    Image实例。

    - reducer(Reducer)

    统计类型,包括最大值、最小值和求和。

    - geometry(Geometry)

    统计区域范围。默认是影像第一个波段的范围。

    - scale(Number)

    统计采样比例。

    返回值:Dictionary

    image(image,description,assetId,pyramidingPolicy,dimensions,region,scale,crs,crsTransform,maxPixels)

    导出影像到个人存储空间。

    方法参数:

    - export(Export)

    Export方法。

    - image(Image)

    要导出的影像。

    - description(String, optional)

    导出影像任务的描述。

    - assetId(String, optional)

    导出影像的存储路径。

    - pyramidingPolicy(Object, optional)

    金字塔规则。

    - dimensions(Int, optional)

    维度。

    - region(Geometry, optional)

    导出影像的范围。

    - scale(Float, optional)

    缩放比例,目前默认都是1。

    - crs(Projection, optional)

    投影的基准坐标参考系,暂指定为EPSG:4326或EPSG:3857参考系。

    - crsTransform(List, optional)

    投影坐标系变换值的列表。

    - maxPixels(Long, optional)

    要导出的最大像素数。

    返回值:null

    代码:

    1. /**
    2. * @Name : 广东省遥感生态指数研究
    3. * @Author : 广州大学张三的组
    4. * @Source : 航天宏图第四届 “航天宏图杯”PIE软件二次开发大赛云开发组三等奖获奖作品
    5. * @Description : 1、计算LST、NDVI、WET、NDBSI等数据并且将其导出
    6. */
    7. var featureCollection0 = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY");
    8. var gd = featureCollection0.filter(pie.Filter.eq("name", "广东省")).first().geometry();
    9. //在地图上显示广东省区域矢量图
    10. Map.addLayer(gd, { color: "ffff00ff", fillColor: "00000000" }, "广东省行政区划")
    11. Map.centerObject(gd, 5)
    12. //导入所需数据集
    13. var MOD09A1 = pie.ImageCollection("USGS/MOD09A1/006");
    14. var MOD11A2 = pie.ImageCollection("USGS/MOD11A2/006");
    15. var MOD13A1 = pie.ImageCollection("USGS/MOD13A1/006");
    16. //构建云掩膜函数
    17. function cloudfree_mod09a1(image) {
    18. var qa = image.select('sur_refl_state_500m')
    19. var cloudState0 = 1 << 0;
    20. var cloudState1 = 1 << 1;
    21. var cloudShadowState = 1 << 2;
    22. var cirrusState8 = 1 << 8;
    23. var cirrusState9 = 1 << 9;
    24. var mask = qa.bitwiseAnd(cloudState0).eq(0)
    25. .and(qa.bitwiseAnd(cloudState1).eq(0))
    26. .and(qa.bitwiseAnd(cloudShadowState).eq(0)) // No cloud shadow
    27. .and(qa.bitwiseAnd(cirrusState8).eq(0))
    28. .and(qa.bitwiseAnd(cirrusState9).eq(0)) // No cirrus
    29. return image.updateMask(mask)
    30. }
    31. //筛选09A1影像准备真色彩波段验证云掩膜
    32. var recentimage = MOD09A1
    33. .filterDate("2020-11-01", "2020-12-30")
    34. .filterBounds(gd)
    35. .select(["sur_refl_b01", "sur_refl_b03", "sur_refl_b04", "sur_refl_b06", "sur_refl_state_500m"])
    36. .map(cloudfree_mod09a1)
    37. .mosaic()
    38. .clip(gd);
    39. var visParam = {
    40. min: -100,
    41. max: 3000,
    42. bands: ["sur_refl_b01", "sur_refl_b04", "sur_refl_b03"]
    43. }
    44. //构建水体指数函数
    45. function MNDWI(img) {
    46. var blue = img.select("sur_refl_b03")
    47. var green = img.select("sur_refl_b04");
    48. var swir1 = img.select("sur_refl_b06");
    49. var swir2 = img.select("sur_refl_b07");
    50. var nir = img.select("sur_refl_b02");
    51. var mndwi = green.subtract(swir1).divide(green.add(swir1)).rename(mndwi)
    52. var aweinsh = blue.add(green.multiply(2.5))
    53. .subtract(nir.add(swir1).multiply(1.5))
    54. .subtract(swir2.multiply(0.25))
    55. .rename(aweinsh);
    56. var awei = green.subtract(swir1)
    57. .multiply(4)
    58. .subtract(nir.multiply(0.25).add(swir2.multiply(2.75)))
    59. .rename(awei);
    60. var ndwi = green.subtract(nir)
    61. .divide(green.add(nir))
    62. .rename(ndwi);
    63. return mndwi
    64. }
    65. //以阈值为0创建水体掩膜
    66. var WaterMask = MNDWI(recentimage).lt(0);
    67. //对影像进行水体掩膜运算
    68. var wa = recentimage.updateMask(WaterMask);
    69. //影像可视化渲染
    70. Map.addLayer(wa, visParam, "ss")
    71. //筛选时间地区,水体掩膜处理
    72. var LST = MOD11A2.filterDate("2020-12-01", "2020-12-30")
    73. .filterBounds(gd)
    74. .select('LST_Day_1km')
    75. .mean()
    76. .clip(gd)
    77. .multiply(0.02)
    78. .subtract(273.15)
    79. .rename('lst')
    80. .updateMask(WaterMask)
    81. //计算热度指数最大值
    82. var maxLst = pie.Number(LST.reduceRegion(pie.Reducer.max(), gd, 1000).get('lst'))
    83. //计算热度指数平均值
    84. var aveLst = pie.Number(LST.reduceRegion(pie.Reducer.mean(), gd, 1000).get('lst'))
    85. //计算热度指数最小值
    86. var minLst = pie.Number(LST.reduceRegion(pie.Reducer.min(), gd, 1000).get('lst'))
    87. //通过最大最小值计算归一化热度指数平均值
    88. var noraveLst = aveLst.subtract(minLst).divide(maxLst.subtract(minLst))
    89. var LSTVis = {
    90. min: 4.6,
    91. max: 27.5,
    92. palette: [
    93. '040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6',
    94. '0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef',
    95. '3be285', '3ff38f', '86e26f', '3ae237', 'b5e22e', 'd6e21f',
    96. 'fff705', 'ffd611', 'ffb613', 'ff8b13', 'ff6e08', 'ff500d',
    97. 'ff0000', 'de0101', 'c21301', 'a71001', '911003'
    98. ]
    99. };
    100. //热度指数可视化渲染
    101. Map.addLayer(LST, LSTVis, 'LST');
    102. var NDVI = MOD13A1.filterDate("2020-12-01", "2020-12-30")
    103. .filterBounds(gd)
    104. .select('NDVI')
    105. .mean()
    106. .clip(gd)
    107. .multiply(0.0001)
    108. .rename('ndvi');
    109. //计算绿度指数最大值
    110. var maxNDVI = pie.Number(NDVI.reduceRegion(pie.Reducer.max(), gd, 500).get('ndvi'))
    111. //计算绿度指数平均值
    112. var aveNDVI = pie.Number(NDVI.reduceRegion(pie.Reducer.mean(), gd, 500).get('ndvi'))
    113. //计算绿度指数最小值
    114. var minNDVI = pie.Number(NDVI.reduceRegion(pie.Reducer.min(), gd, 500).get('ndvi'))
    115. //通过最大最小值计算归一化植被指数平均值
    116. var noraveNDVI = aveNDVI.subtract(minNDVI).divide(maxNDVI.subtract(minNDVI))
    117. var ndviVis = {
    118. min: -0.19,
    119. max: 0.9,
    120. palette: [
    121. 'FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
    122. '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
    123. '012E01', '011D01', '011301'
    124. ],
    125. };
    126. //绿度指数可视化渲染
    127. Map.addLayer(NDVI, ndviVis, "ndvi")
    128. //筛选影像,去云处理,水体掩膜处理
    129. var srIMG0 = MOD09A1
    130. .filterDate("2020-11-01", "2020-12-30")
    131. .filterBounds(gd)
    132. .select(["sur_refl_b01", "sur_refl_b02", "sur_refl_b03", "sur_refl_b04",
    133. "sur_refl_b05", "sur_refl_b06", "sur_refl_b07", "sur_refl_state_500m"
    134. ])
    135. .map(cloudfree_mod09a1)
    136. .mosaic()
    137. .clip(gd)
    138. .updateMask(WaterMask);
    139. var WET = srIMG0.select("sur_refl_b01").multiply(0.1147) //红波段
    140. .add(srIMG0.select("sur_refl_b02").multiply(0.2489)) //近红外波段1
    141. .add(srIMG0.select("sur_refl_b03").multiply(0.2408)) //蓝波段
    142. .add(srIMG0.select("sur_refl_b04").multiply(0.3132)) //绿波段
    143. .add(srIMG0.select("sur_refl_b05").multiply(-0.3122)) //近红外波段2
    144. .add(srIMG0.select("sur_refl_b06").multiply(-0.6416)) //短波红外1
    145. .add(srIMG0.select("sur_refl_b07").multiply(-0.5087)) //短波红外2
    146. .multiply(0.0001)
    147. .rename("wet")
    148. //计算湿度指数
    149. var maxWET = pie.Number(WET.reduceRegion(pie.Reducer.max(), gd, 500).get('wet')) //计算湿度指数最大值
    150. var aveWET = pie.Number(WET.reduceRegion(pie.Reducer.mean(), gd, 500).get('wet')) //计算湿度指数平均值
    151. var minWET = pie.Number(WET.reduceRegion(pie.Reducer.min(), gd, 500).get('wet')) //计算湿度指数最小值
    152. var noraveWET = aveWET.subtract(minWET).divide(maxWET.subtract(minWET)) //通过最大最小值计算归一化湿度指数平均值
    153. var wetVis = {
    154. min: -0.3,
    155. max: 0.01,
    156. palette: [
    157. '040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6',
    158. '0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef',
    159. '3be285', '3ff38f', '86e26f', '3ae237', 'b5e22e', 'd6e21f',
    160. 'fff705', 'ffd611', 'ffb613', 'ff8b13', 'ff6e08', 'ff500d',
    161. 'ff0000', 'de0101', 'c21301', 'a71001', '911003'
    162. ]
    163. }
    164. Map.addLayer(WET, wetVis, "wet") //湿度指数可视化渲染
    165. var sswir1 = srIMG0.select("sur_refl_b06");
    166. var rred = srIMG0.select("sur_refl_b01");
    167. var nnir1 = srIMG0.select("sur_refl_b02");
    168. var bblue = srIMG0.select("sur_refl_b03");
    169. var ggreen = srIMG0.select("sur_refl_b04");
    170. var si = sswir1.add(rred)
    171. .subtract(nnir1.add(bblue))
    172. .divide(sswir1.add(rred).add(nnir1.add(bblue)));
    173. //计算干度指数分量裸土指数
    174. var ibi = sswir1.multiply(2).divide(sswir1.add(nnir1))
    175. .subtract(nnir1.divide(nnir1.add(rred)).add(ggreen.divide(ggreen.add(sswir1))))
    176. .divide(sswir1.multiply(2).divide(sswir1.add(nnir1))
    177. .add(nnir1.divide(nnir1.add(rred)).add(ggreen.divide(ggreen.add(sswir1)))));
    178. //计算干度指数分量城市建筑指数
    179. var NDBSI = si.add(ibi).divide(2).rename('ndbsi');
    180. var maxNDBSI = pie.Number(NDBSI.reduceRegion(pie.Reducer.max(), gd, 500).get('ndbsi')) //计算干度指数最大值
    181. var aveNDBSI = pie.Number(NDBSI.reduceRegion(pie.Reducer.mean(), gd, 500).get('ndbsi')) //计算干度指数平均值
    182. var minNDBSI = pie.Number(NDBSI.reduceRegion(pie.Reducer.min(), gd, 500).get('ndbsi')) //计算干度指数最小值
    183. var noraveNDBSI = aveNDBSI.subtract(minNDBSI).divide(maxNDBSI.subtract(minNDBSI)) //通过最大最小值计算归一化干度指数平均值
    184. var ndbsiVis = {
    185. min: -0.3,
    186. max: 0.01,
    187. palette: [
    188. '040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6',
    189. '0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef',
    190. '3be285', '3ff38f', '86e26f', '3ae237', 'b5e22e', 'd6e21f',
    191. 'fff705', 'ffd611', 'ffb613', 'ff8b13', 'ff6e08', 'ff500d',
    192. 'ff0000', 'de0101', 'c21301', 'a71001', '911003'
    193. ]
    194. }
    195. Map.addLayer(NDBSI, ndbsiVis, "ndbsi") //干度指数可视化渲染
    196. var index = LST.addBands(NDVI).addBands(WET).addBands(NDBSI)
    197. var bar_options = {
    198. title: "广东省RSEI分量归一化平均值",
    199. legend: ["2020年12月"],
    200. yAxis: ["LST", "NDVI", "WET", "NDBSI"],
    201. xAxisName: "指数值",
    202. yAxisName: "指数",
    203. series: [
    204. [0.577, 0.729, 0.728, 0.321]
    205. ],
    206. chartType: "bar",
    207. };
    208. //调用绘制方法,输出图表显示在结果面板中
    209. var chart = ui.Chart.array(bar_options);
    210. chart.setStyle({ width: "380px" });
    211. print(chart);
    212. Export.image({
    213. image: index,
    214. description: "index",
    215. assetId: "result",
    216. region: gd,
    217. scale: 500
    218. });

     

     

     

     

     

     

  • 相关阅读:
    Android学习笔记 14. GridLayout 网格布局
    类(class)
    基于GeoToolkit/INT实现二维等值线图绘制示例
    数据库规范化理论
    DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》课程讲解之十大知识领域之4核心—项目质量管理
    单字段纵向分栏
    小程序 target 与 currentTarget(详细)
    k8s集群安装——(二)部署Tomcat运行,扩容,删除
    改进YOLOv5:结合ICCV2023|动态蛇形卷积,构建不规则目标识别网络
    洞察商机,驱动创新:智能数据分析引领企业发展
  • 原文地址:https://blog.csdn.net/qq_31988139/article/details/127086469