目录
一、研究区初始化与地图配置
二、数据预处理函数
三、影像集合筛选与预处理
四、影像合成与可视化
五、结果导出至 Google Drive
六、关键技术要点总结与注意事项
七、运行结果
若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!
本代码基于 Google Earth Engine(GEE)平台,利用 Landsat-9 卫星的 Level-2 级数据(LANDSAT/LC09/C02/T1_L2),通过数据预处理、水体提取、云影剔除等步骤,反演 2023 年夏季(6-9 月)研究区的水体表面温度,最终将结果导出至 Google Drive,为水文环境监测、生态评估等研究提供数据支持。
一、研究区初始化与地图配置
var roi = geometry; Map.centerObject(roi, 10); var roiLayer = ui.Map.Layer(roi, {color: 'red', fillColor: 'white'}, '研究区'); Map.add(roiLayer);- 研究区定义:
var roi = geometry中,geometry是预先在 GEE 地图界面绘制的研究区矢量图形(如多边形),代码通过该变量锁定分析范围,后续所有数据处理均限定在该区域内。 - 地图居中与可视化:
Map.centerObject(roi, 10)使地图自动居中到研究区,第二个参数 “10” 是地图缩放级别(范围 1-20,数值越大视图越清晰),确保研究区完整显示在视野中。ui.Map.Layer(...)构建研究区的可视化图层,设置边界颜色为红色(color: 'red')、填充色为白色(fillColor: 'white'),并命名为 “研究区”,最后通过Map.add(roiLayer)将图层添加到地图界面,方便直观查看分析范围。
二、数据预处理函数
function preprocess(img) { // 1. 云与云影mask构建 var qa = img.select('QA_PIXEL'); var cloud = qa.bitwiseAnd(1 << 1).neq(0); var cirrus = qa.bitwiseAnd(2 << 1).neq(0); var cloud2 = qa.bitwiseAnd(3 << 1).neq(0); var shadow = qa.bitwiseAnd(4 << 1).neq(0); var cloud_mask = cloud.or(cirrus).or(cloud2).or(shadow); // 2. 地表反射率波段预处理 var ms = img.select('SR_B.*').multiply(2.75e-05).add(-0.2); // 3. NDWI计算与水体mask构建 var ndwi = ms.normalizedDifference(['SR_B3', 'SR_B5']).rename('ndwi'); var water_mask = ndwi.gt(0.1); // 4. 地表温度(LST)反演 var lst = img.select('ST_B10').multiply(0.00341802).add(149).subtract(273.15); // 5. 应用mask并保留时间属性 return lst.updateMask(water_mask).updateMask(cloud_mask.not()) .copyProperties(img, ['system:time_start']); }该函数是代码核心,对单景 Landsat-9 影像执行“质量控制 - 波段处理 - 水体提取 - 温度反演”的完整流程,输入为单景影像(img),输出为预处理后的水体温度影像。
- 云与云影剔除(质量控制):
- Landsat-9 的
QA_PIXEL波段是质量控制波段,通过位运算(bitwiseAnd)可提取特定质量信息。 - 分别通过位运算识别普通云(
cloud)、卷云(cirrus)、其他云类(cloud2)和云影(shadow),再通过or()函数将各类云及云影合并为cloud_mask(掩码图层,“1” 代表云 / 云影区域,“0” 代表有效区域)。
- Landsat-9 的
- 地表反射率波段校准:
img.select('SR_B.*')筛选所有地表反射率波段(SR_B1至SR_B7,对应不同光谱范围)。multiply(2.75e-05).add(-0.2)是 Landsat-9 Level-2 数据的官方校准公式,将原始数字量化值(DN 值)转换为实际地表反射率(无量纲,范围 0-1),为后续植被指数计算提供准确数据。
- NDWI 计算与水体提取:
normalizedDifference(['SR_B3', 'SR_B5'])计算归一化水体指数(NDWI),公式为(绿波段 - 近红外波段) / (绿波段 + 近红外波段),水体在 NDWI 中表现为高值。ndwi.gt(0.1)设置阈值 0.1,将 NDWI 大于 0.1 的区域判定为水体,生成water_mask(“1” 为水体,“0” 为非水体)。
- 地表温度反演:
img.select('ST_B10')选择热红外波段(ST_B10),该波段记录了地物的热辐射信息。multiply(0.00341802).add(149)是官方辐射定标公式,将 DN 值转换为绝对辐射亮度;subtract(273.15)将开尔文温度(K)转换为摄氏度(℃),最终得到地表温度(LST)。
- 掩码应用与属性保留:
updateMask(water_mask)保留水体区域、剔除非水体区域;updateMask(cloud_mask.not())保留非云 / 云影区域、剔除云污染区域,双重掩码确保最终结果仅包含 “无云的水体”。copyProperties(img, ['system:time_start'])保留原始影像的时间属性(拍摄时间),为后续时间序列分析提供依据。
三、影像集合筛选与预处理
var l9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_L2") .filterDate('2023-06-01', '2023-09-30') .filterBounds(roi) .map(preprocess);- 影像集合调用:
ee.ImageCollection("LANDSAT/LC09/C02/T1_L2")调用 GEE 内置的 Landsat-9 Level-2 影像集合,该集合已完成大气校正、辐射定标等预处理,可直接用于定量分析。 - 时间筛选:
filterDate('2023-06-01', '2023-09-30')筛选 2023 年 6 月 1 日至 9 月 30 日的影像,聚焦夏季时段,符合研究目标。 - 空间筛选:
filterBounds(roi)仅保留覆盖研究区的影像,剔除与研究区无关的影像,减少计算量。 - 批量预处理:
map(preprocess)对筛选后的每景影像批量应用上述preprocess函数,生成预处理后的水体温度影像集合(l9)。
四、影像合成与可视化
var composite = l9.mean().clip(roi); var visParams = { min: -20, max: 35, palette: ['blue', 'cyan', 'green', 'yellow', 'red'] }; Map.addLayer(composite, visParams, 'Landsat9 Water Temp (°C)');- 时间平均合成:
l9.mean()对夏季所有预处理后的影像计算平均值,生成夏季水体温度均值影像,可减少单景影像的随机误差和云残留影响;clip(roi)确保结果严格限定在研究区内,避免边界外冗余数据。 - 可视化参数设置:
min: -20, max: 35设定温度显示范围(-20℃至 35℃),超出该范围的温度将被渲染为对应极值颜色。palette定义颜色渐变方案:蓝色(低温)→青色→绿色→黄色→红色(高温),直观反映温度空间分布差异。
- 地图添加图层:
Map.addLayer(...)将合成后的水体温度影像添加到地图,命名为 “Landsat9 Water Temp (°C)”,方便实时查看温度分布格局。
五、结果导出至 Google Drive
Export.image.toDrive({ image: composite, description: 'L9_WaterTemp_2023_Summer', folder: 'GEE_Exports', fileNamePrefix: 'L9_WaterTemp_2023_Summer', region: roi, scale: 30, crs: 'EPSG:4326', maxPixels: 1e13 });- 导出核心设置:
image: composite指定导出的影像为夏季温度合成影像。description和fileNamePrefix设定导出任务名称和文件前缀,便于后续在 Drive 中查找。folder: 'GEE_Exports'指定导出文件存储在 Google Drive 中的 “GEE_Exports” 文件夹(需提前创建或允许 GEE 自动创建)。
- 导出参数配置:
region: roi限定导出范围为研究区。scale: 30设定导出影像的空间分辨率为 30 米(Landsat-9 热红外波段原始分辨率为 100 米,此处通过重采样至 30 米,与反射率波段分辨率一致,便于后续分析)。crs: 'EPSG:4326'设定空间参考系为 WGS84(全球通用地理坐标系),确保数据兼容性。maxPixels: 1e13设定最大导出像素数,避免因研究区过大导致导出失败(1e13 足以覆盖大面积区域)。
六、关键技术要点总结与注意事项
关键技术要点总结:
- 数据质量控制:通过
QA_PIXEL波段的位运算,精准剔除云、卷云、云影等污染区域,确保水体温度数据的准确性。 - 水体提取逻辑:利用 NDWI 指数对水体的敏感性,通过阈值法(0.1)快速分离水体与非水体,为温度反演限定目标区域。
- 温度反演精度:采用 Landsat 官方提供的辐射定标公式和温度转换方法,保证反演结果的科学性和可比性。
- GEE 高效性:通过
ImageCollection的筛选、map批量处理和mean合成,实现大规模影像数据的快速处理,无需本地存储和计算资源。
注意事项:
- 研究区
geometry需提前在 GEE 地图界面绘制,支持点、线、面等矢量类型,面状区域需确保闭合。 - 导出前需确保 Google 账号已登录,且 Drive 有足够存储空间(30 米分辨率的大面积影像可能占用较多空间)。
- 夏季影像可能存在云量较多的情况,若合成后仍有云残留,可缩小时间范围或增加云掩膜的严格程度(如调整 NDWI 阈值或云识别位运算规则)。
- 温度反演结果为地表温度(LST),而非水体内部温度,适用于表层水体环境监测,若需深层水温,需结合实测数据校正。
七、运行结果
若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!