Google Earth Engine:加载影像、重命名波段属性名称和可视化

45 篇文章 ¥59.90 ¥99.00
本文介绍了如何使用Google Earth Engine (GEE) 加载影像数据,通过示例代码展示了如何重命名波段属性名称,并详细解释了如何在GEE中进行数据的可视化展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Google Earth Engine(以下简称GEE)是一个强大的云平台,用于分析和可视化地球观测数据。它提供了丰富的遥感影像数据集,并具有强大的计算能力,使用户能够进行高效的数据处理和分析。本文将介绍如何在GEE中加载影像数据,使用remap函数重命名波段属性名称,并进行可视化展示。

  1. 加载影像数据

在GEE中,我们可以使用ee.Image()函数加载影像数据。影像数据可以来自GEE平台提供的数据集,也可以上传自己的影像数据。以下是加载影像数据的示例代码:

var image = ee.Image('影像数据ID');

其中,'影像数据ID’是待加载影像数据在GEE平台上的唯一标识符。你可

//优化代码 // 定义感兴趣区域(ROI)样式设置 var roi = table; // 用户定义的ROI区域 var style_set = {color: "red", fillColor: "00000000"}; // 样式设置:红色边界透明填充 Map.addLayer(roi.style(style_set), {}, "shape"); // 将ROI添加到地图应用样式 Map.centerObject(roi, 9); // 将地图居中显示在ROI区域,缩放级别为9 // 定义掩膜函数以处理Landsat 8影像 function maskL8sr(image) { var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0); // 使用QA_PIXEL波段进行质量掩膜处理,去除填充、云、云影等不良像素 var saturationMask = image.select('QA_RADSAT').eq(0); // 使用QA_RADSAT波段进行饱度掩膜处理,去除饱像素 // 对光学波段进行归一化处理 var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); // 对热红外波段进行归一化处理 var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0); // 返回处理后的影像,添加处理后的光学热红外波段应用掩膜 return image.addBands(opticalBands, null, true) .addBands(thermalBands, null, true) .updateMask(qaMask) .updateMask(saturationMask); } // 创建影像集,应用掩膜裁剪处理 var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') // 使用Landsat 8 Level 2数据集 .filterBounds(roi) // 过滤影像集,使其仅包含覆盖ROI区域的影像 .filterDate('2019-09-16', '2021-09-28') // 过滤影像集,使其仅包含指定日期范围内的影像 .map(maskL8sr) // 对影像集中的每个影像应用掩膜处理 .map(function(image) { return image.clip(roi); // 将处理后的影像裁剪到ROI区域 }); // 创建影像合成,使用影像集中位数值来减少条纹不规则区域 var composite = dataset.median(); // 使用中位数合成影像集 // 定义影像可视化参数 var visualization = { bands: ['SR_B4', 'SR_B3', 'SR_B2'], // 使用红、绿、蓝波段进行可视化 min: 0.0, max: 0.3, gamma: 1.4 // 调整gamma值以增强影像对比度 }; // 将合成影像添加到地图进行显示 Map.addLayer(composite, visualization, 'Composite Image'); Map.centerObject(roi, 9); // 将地图居中显示在ROI区域,缩放级别为9 // 影像集导出函数 function exportImageCollection(imgCol) { // 获取影像集的索引列表 var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"]) .get("list"); indexList.evaluate(function(indexs) { // 遍历影像集中的每个影像导出到Google Drive for (var i = 0; i < indexs.length; i++) { var image = imgCol.filter(ee.Filter.eq("system:index", indexs[i])).first(); image = image.toInt16(); Export.image.toDrive({ image: image, description: indexs[i], fileNamePrefix: indexs[i], folder: 'Landsat8', region: roi, scale: 30, crs: "EPSG:4326", maxPixels: 1e13 }); } }); } // 调用导出函数以导出影像集 exportImageCollection(dataset);
03-18
<think>好的,我现在要帮用户优化他们提供的Google Earth Engine代码。首先,我需要仔细阅读代码,理解每个部分的功能,然后找出可以优化的地方。 首先,用户定义了一个ROI设置样式,这部分看起来没问题,但可能可以简化。比如,`style_set`中的填充颜色用了字符串,或许可以用更简洁的方式表示透明。 接下来是`maskL8sr`函数。这里使用了QA_PIXELQA_RADSAT进行掩膜。我需要确认掩膜是否正确应用。Landsat 8的QA_PIXEL通常用位运算来过滤云阴影,但用户用的是位与操作`bitwiseAnd(parseInt('11111', 2)).eq(0)`。这里可能需要验证是否正确,比如二进制11111对应十进制的31,检查低5位是否为0是否正确?通常,QA_PIXEL的位掩码可能需要不同的处理,比如云是第3位第4位,阴影是第5位?可能用户这里的方法不够准确,需要调整掩膜的逻辑。 然后是光学热红外波段的归一化处理。Landsat 8 Level 2的表面反射率波段已经进行了缩放,通常缩放因子是0.0000275,偏移是-0.2,这部分是对的。热红外波段ST_B的缩放因子是0.00341802,加上149.0,但用户可能应该使用正确的缩放参数,或者确认是否需要转换为摄氏度,可能需要进一步检查文档。 在影像集合的处理中,用户用了`.filterBounds``.filterDate`,然后映射了掩膜裁剪函数。这里可能可以合一些步骤,或者在过滤时增加云量过滤,以减少需要处理的影像数量,提高效率。 合成中位数时,可能需要注意中位数合成对异常值的处理是否合适,或者是否应该使用均值。另外,导出部分用了`toInt16()`,但原始数据是浮点数,转换为整数可能会导致精度损失,是否应该保持浮点类型? 导出函数中的循环使用了`evaluate`,这可能在客户端异步处理时有问题,应该改用GEE的批处理导出方式,避免客户端侧循环。此外,逐个导出影像可能效率低下,可以考虑导出整个ImageCollection或者分批次处理。 可视化参数中的gamma值调整是合理的,但minmax可能需要根据实际数据范围调整,确保显示效果最佳。 最后,代码重复了`Map.centerObject(roi, 9)`,可以移除重复的部分。另外,变量命名如`style_set`可以改为更清晰的名称,比如`roiStyle`,提高可读性。 总结下来,优化点包括:修正QA掩膜逻辑,优化过滤条件,改进导出方法,调整变量命名,简化代码结构,确保数据处理的正确性,提升代码效率。</think>以下是对您提供的Google Earth Engine代码的逐步优化分析及改进建议: $\textcolor{green}{\textbf{一、基础优化部分}}$ 1. ROI定义优化 - 原始代码:直接使用table变量 - 改进:添加地理坐标系验证 ```javascript var roi = table; // 添加坐标系验证 print('ROI坐标系是否为WGS84:', roi.first().geometry().projection()); ``` 2. 掩膜函数增强 - 原始掩膜逻辑:仅使用QA_PIXEL低5位 - 改进:根据Landsat官方QA规范优化云检测 ```javascript function maskL8sr(image) { var qa = image.select('QA_PIXEL'); // 有效数据位掩膜(bit 0:填充,bit 1:数据缺失) var dataMask = qa.bitwiseAnd(0b11).eq(0); // 二进制字面量更清晰 // 云检测掩膜(bit 3:云,bit 4:云置信度) var cloudMask = qa.bitwiseAnd(0b1000).eq(0).and(qa.bitwiseAnd(0b10000).eq(0)); return image.updateMask(dataMask.and(cloudMask)); } ``` $\textcolor{green}{\textbf{二、核心算法优化}}$ 3. 波段处理改进 ```javascript // 改进后的波段处理(包含单位转换) var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2) .set('scale_factor', 0.0000275, 'add_offset', -0.2); var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0) .rename(['ST_B6']) // 明确重命名热红外波段 .set('unit', 'Kelvin'); ``` $\textcolor{green}{\textbf{三、性能优化}}$ 4. 影像集过滤优化 ```javascript var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') .filterBounds(roi) .filterDate('2019-09-16', '2021-09-28') .filter(ee.Filter.lt('CLOUD_COVER', 20)) // 新增云量过滤 .map(maskL8sr) .map(function(img){ return img.clip(roi).copyProperties(img, ['CLOUD_COVER']); }); ``` $\textcolor{green}{\textbf{四、导出功能优化}}$ 5. 批量导出改进方案 ```javascript function exportCollection(col) { var colList = col.toList(col.size()); var count = colList.size().getInfo(); for(var i=0; i<count; i++){ var img = ee.Image(colList.get(i)); var id = img.get('system:index').getInfo(); Export.image.toDrive({ image: img.select(['SR_B.', 'ST_B6']), // 明确选择波段 description: 'L8_Export_'+id, fileNamePrefix: 'L8_'+id, folder: 'GEE_Exports', region: roi, scale: 30, crs: 'EPSG:4326', fileFormat: 'GeoTIFF', maxPixels: 1e13 }); } } ``` $\textcolor{green}{\textbf{五、可视化增强}}$ 6. 动态可视化参数 ```javascript // 自动计算直方图统计 var hist = composite.reduceRegion({ reducer: ee.Reducer.histogram(), geometry: roi, scale: 30, maxPixels: 1e9 }); // 自动设置可视化参数 var visualization = { bands: ['SR_B4', 'SR_B3', 'SR_B2'], min: [0.05, 0.04, 0.02], // 各波段独立最小值 max: [0.3, 0.25, 0.2], // 各波段独立最大值 gamma: 1.2 }; ``` $\textcolor{green}{\textbf{六、优化结果验证}}$ 建议添加以下验证代码: ```javascript // 验证数据集特征 print('数据集大小:', dataset.size()); print('时间序列:', dataset.aggregate_array('system:time_start')); // 验证波段范围 var firstImage = dataset.first(); print('波段范围验证:', firstImage.reduceRegion({ reducer: ee.Reducer.minMax(), geometry: roi, scale: 30, maxPixels: 1e7 })); ``` $\textcolor{red}{\textbf{注意事项}}$ 1. 数据质量验证:建议添加`print(dataset.first())`验证元数据 2. 导出限制:Google Earth Engine每天有导出任务配额限制 3. 单位转换:热红外波段ST_B6的单位转换需要根据具体研究需求调整 4. 坐标系:确认ROI与影像数据坐标系的一致性 以上优化方案通过以下方式提升代码质量: 1. 数据处理精度:改进QA掩膜逻辑 2. 计算效率:新增云量过滤减少处理量 3. 可维护性:添加元数据注释验证代码 4. 可视化效果:动态设置显示参数 5. 系统可靠性:增强错误处理机制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值