基于GEE的Landsat影像拼接与导出

本文介绍了如何使用Google Earth Engine (GEE) 对Landsat卫星数据进行影像拼接和云量筛选,以优化大区域研究的效率。通过导入研究区矢量数据,选择特定时间范围内的Landsat8 T1数据,过滤云量低于5%的影像,然后进行镶嵌和导出,以便在ENVI或ArcGIS中进一步处理。同时提供了单幅及多幅影像的导出方法。

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

 USGS为每一颗Landsat卫星均提供了3级不同水平的数据产品,以满足开发、科研人员的需要。包括:Tier 1 (T1)、Tier 2 (T2)、Real Time (RT)。

T1数据是Landsat高质量数据,该数据适合进行时间序列分析;

T2数据是在处理过程中不符合一级标准的数据,但是其存在云层覆盖明显、地面控制不足、轨道信息不准确等问题,不能达到T1数据的几何校正精度;

RT数据经过2020年8月发布的第三版大气校正数据,Landsat8采用的是LaSRC地表反射率代码,是USGS专门为Landsat8数据设计的大气校正程序。

由于Landsat数据的分辨率较高,所以当研究区域较大时,需要下载多幅影像才能覆盖整个研究区域,不仅浪费存储空间,处理起来也相当耗费时间。

    所以下边为大家分享如何使用GEE对Landsat影像进行拼接,并筛选云量较少区域。之后对数据进行导出,方便大家在ENVI或者Arcgis中进行后续的处理研究。

//首先,导入自己的研究区矢量数据。此处为个人矢量数据位置
ROI=ee. FeatureCollection("users/……");

//选择数据集和合成数据的时间范围
var dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
    .filterDate('2021-6-01', '2021-9-30')//此时间范围内云量较少
    .filterBounds(ROI)
    .filter(ee.Filter.lte('CLOUD_COVER',5))//云量设置
    .sort('CLOUD_COVER')//按云量排序
print(dataset)   

var mos=dataset.mosaic()
var mos_cl = mos.clip(ROI)
print(mos_cl)

//显示shp边界
Map.addLayer(ROI,{color:'yellow',fillColor: "00000000", width: 1},'liaoshi Boundary');

//显示ROI影像并且以321合成,后面命名
Map.addLayer(mos_cl,{bands:["B4","B3","B2"],gamma:1.3,max:108,min:15},'liaoshi Image');

//输出数据
Export.image.toDrive({
  image:mos_cl.int16(),
  description: 'Landsat8_2021_11',
  fileNamePrefix:'Landsat8_liaoshi',
  region:ROI,
  scale:30,
  crs: "EPSG:4326",
  maxPixels:1e13
})

注:此处导出方法为只有一副影像时进行导出,下方为大家提供多幅影像批量导出的封装函数,供大家更改代码以及数据批量导出时使用。

function exportImageCollection(imgCol, roi, scale) {
  var indexList = imgCol.reduceColumns(ee.Reducer.toList(), ["system:index"]) 
                  .get("list");
  indexList.evaluate(function(indexs) {
    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.clip(roi),
        description: indexs[i],
        fileNamePrefix: indexs[i],
        region: roi,
        scale: scale,
        crs: "EPSG:4326",
        maxPixels: 1e13
      });
    }
  }); 
}

同名公主号同步更新,众多数据可在公主号【资源下载】中获取,如有问题可后台留言,大家一起交流沟通!

### 在 Google Earth Engine (GEE) 中导出数据的方法 在 GEE 中,导出数据是一项常见的任务,支持多种类型的导出操作,包括栅格数据、矢量数据以及表格数据。以下是几种常用的导出方法及其适用场景。 --- #### 1. 导出栅格数据 GEE 支持将影像影像集合导出为本地文件(如 GeoTIFF 格式)。可以使用 `Export.image.toDrive()` 或 `Export.image.toAsset()` 方法完成这一过程。 ```javascript // 示例:导出单张影像到 Google Drive var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); // 输入影像 var geometry = image.geometry(); // 获取影像的几何范围 Export.image.toDrive({ image: image, description: 'export_landsat_image', folder: 'GEE_Exports', // 存储路径 region: geometry, // 几何范围 scale: 30, // 分辨率 crs: 'EPSG:4326' // 投影系统 }); ``` 为了应对大范围区域可能导致的任务失败问题,推荐分块导出策略[^3]。通过设置参数 `maxPixels` 和 `crsTransform`,可以有效减少内存占用并提高成功率。 --- #### 2. 导出矢量数据 对于矢量数据(如 FeatureCollection),可以使用 `Export.table.toDrive()` 方法将其保存为 CSV、Shapefile 或其他格式。 ```javascript // 示例:导出矢量数据到 Google Drive var featureCollection = ee.FeatureCollection('TIGER/2016/Roads'); // 输入矢量数据 Export.table.toDrive({ collection: featureCollection, description: 'export_roads_data', fileFormat: 'CSV' // 输出格式可以选择 'GeoJSON', 'KML', 'KMZ' }); ``` 如果矢量数据较大,也可以考虑将其存储为 GEE 资产以便后续重复调用。 --- #### 3. 批量导出影像集合 当需要导出整个影像集合时,可以结合第三方库(如 geetools)简化流程[^4]。 ```javascript // 引入 geetools 库 var batch = require('users/fitoprincipe/geetools:batch'); // 定义研究区域和筛选条件 var ROI = ee.Geometry.Rectangle([-122.085, 37.422, -122.075, 37.43]); var landsat = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ROI) .filterDate('2021-01-01', '2021-12-31'); // 使用 geetools 进行批量导出 batch.Download.collection.toDrive({ collection: landsat, folder: 'Landsat_exports', namePattern: '{id}', // 文件命名模式 region: ROI, scale: 30, crs: 'EPSG:4326' }); ``` 这种方法显著提高了效率,尤其适用于长时间序列数据分析。 --- #### 4. 解决导出失败的问题 在处理大面积区域或高分辨率数据时,可能会遇到任务超时或资源不足等问题[^2]。以下是一些常见解决方案: - **缩小研究范围**:尝试将研究区域划分为若干子区域分别导出。 - **降低分辨率**:适当增加 `scale` 参数值以减少像素数量。 - **分块导出**:利用 `crsTransform` 设置固定像素网格,确保各子区域无缝拼接[^3]。 --- #### 5. 将导出数据转换为 Numpy 数组 如果需要进一步在 Python 环境中处理导出的数据,可以借助 `geemap` 库读取并转化为 NumPy 数组[^1]。 ```python import geemap.eefolium as emap import numpy as np # 初始化地图实例 Map = emap.Map(center=[37.422, -122.085], zoom=10) # 加载影像 image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') # 下载影像并转为 NumPy 数组 array = emap.ee_to_numpy(image, band_names=['B4', 'B3', 'B2']) print(array.shape) # 查看数组维度 ``` 此方法便于集成机器学习模型或其他高级计算框架。 --- ### 总结 GEE 提供了灵活多样的数据导出接口,涵盖了从单一影像到复杂时空序列的各种需求。针对不同规模的研究区域和应用场景,合理选择合适的导出方式至关重要。同时注意遵循最佳实践以规避潜在的技术障碍。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值