影像集的过滤
在 Google Earth Engine (GEE) 中,影像集(ImageCollection
)的过滤是数据处理的关键步骤,可以通过时间、空间范围、元数据属性(如云量)等条件筛选出目标影像。以下是详细的过滤方法介绍:
1. 按时间范围过滤
使用 filterDate()
筛选指定时间范围内的影像。
// 示例:筛选2020年全年的Landsat 8影像
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate('2020-01-01', '2020-12-31');
2. 按空间范围过滤
使用 filterBounds()
筛选覆盖指定几何区域的影像。
// 示例:筛选覆盖某点或区域的影像
var point = ee.Geometry.Point([116.39, 39.91]); // 北京坐标
var region = ee.Geometry.Rectangle([xmin, ymin, xmax, ymax]);
var filtered = collection
.filterBounds(point) // 或 filterBounds(region);
3. 按元数据属性过滤
使用 filter()
和 ee.Filter
条件,结合影像的元数据(如云量、传感器类型等)。
3.1 按数值范围过滤
// 示例:筛选云量低于10%的Landsat影像
var cloudFiltered = collection
.filter(ee.Filter.lt('CLOUD_COVER', 10));
3.2 按字符串属性过滤
// 示例:筛选Landsat 9影像
var landsat9 = ee.ImageCollection('LANDSAT/LC09/C02/T1_L2')
.filter(ee.Filter.eq('SPACECRAFT_ID', 'LANDSAT_9'));
3.3 多条件组合过滤
// 使用 ee.Filter.and() 或链式调用
var complexFilter = collection
.filter(ee.Filter.and(
ee.Filter.gt('SUN_ELEVATION', 50),
ee.Filter.lt('CLOUD_COVER', 5)
));
4. 按云量过滤(以Sentinel-2为例)
云量过滤需结合数据集特有的属性,常用方法:
// 示例:筛选Sentinel-2影像中云量<20%的影像
var s2 = ee.ImageCollection('COPERNICUS/S2_SR')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20));
动态云量过滤(客户端计算)
若需根据计算后的云量过滤(如自定义云掩膜后的统计),需使用 map()
和 evaluate()
:
var filtered = s2.filter(ee.Filter.lt('cloud_score', 10));
// 定义云量计算函数
var addCloudScore = function(image) {
var score = // 自定义云量计算逻辑
return image.set('cloud_score', score);
};
var withCloudScore = s2.map(addCloudScore);
var cloudFiltered = withCloudScore.filter(ee.Filter.lt('cloud_score', 10));
5. 组合多个过滤条件
通过链式调用 filter()
组合时间、空间和属性条件:
var finalCollection = ee.ImageCollection('COPERNICUS/S2_SR')
.filterDate('2021-05-01', '2021-05-31')
.filterBounds(roi)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 5));
6. 其他过滤方法
6.1 按影像ID过滤
var specificImage = collection
.filter(ee.Filter.eq('system:index', '20210501T030541_20210501T030543_T50SPA'));
6.2 按质量标记(QA Band)过滤
部分数据集(如MODIS)提供质量标记波段:
var modis = ee.ImageCollection('MODIS/006/MOD09GA')
.filter(ee.Filter.eq('QC_250m', 0)); // 筛选最佳质量数据
注意事项
- 属性名称差异:不同数据集的元数据属性名称不同(如Landsat的云量是
CLOUD_COVER
,Sentinel-2是CLOUDY_PIXEL_PERCENTAGE
)。 - 客户端与服务器端操作:
evaluate()
是异步操作,需在回调函数中处理结果。 - 性能优化:优先使用服务器端过滤(如
filter()
),减少客户端计算。
通过灵活组合上述方法,可高效地从海量遥感数据中提取所需影像。