GEE学习篇:查询影像合成ee.ImageCollection中使用的影像

文章介绍了在GoogleEarthEngine(GEE)中,如何使用ee.ImageCollection对landsat5和landsat8的数据进行时间范围筛选、云量限制(小于2%),并进行影像合成。通过应用特定的缩放因子函数和显示设置,展示了筛选出的高质量影像,并提供了查看合成结果的方法。

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

在gee中我们经常会使用ee.ImageCollection对某一个时间段的影像进行合成,但是不好看出使用的具体是哪几景影像,为了保证实验的准确性,需要了解具体使用了哪几景影像

分享一下我是如何进行数据查询筛选哒,也可以使用该代码快速查找自己研究区云量少质量好的影像~

//上传矢量文件table可视化显示
var styling = {color:'red',fillColor:'00000000'}//设置显示样式
Map.centerObject(table,11)//设置显示的大小(如果研究区比较小,可以把数值调高)
Map.addLayer(table.style(styling),{},'table')//可视化地理数据

//定义筛选时间
var roi=table
var star_date = '2021-01-01'//定义起始时间
var end_date  = '2021-12-31'//定义终止时间

// //landsat5
// function applyScaleFactors(image) {
//   var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
//   var thermalBand = image.select('ST_B6').multiply(0.00341802).add(149.0);
//   return image.addBands(opticalBands, null, true)
//               .addBands(thermalBand, null, true);
// }
//var dataset = ee.ImageCollection("LANDSAT/LT05/C02/T1_L2")
//    .filterBounds(roi)
//    .filterDate(star_date, end_date)//时间过滤
//    .filter(ee.Filter.lt("CLOUD_COVER",30))    //云量小于xx%
//    .map(applyScaleFactors)
//print(dataset)


// Landsat 8
function applyScaleFactors(image) {
  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);
}
 var dataset= ee.ImageCollection("LANDSAT/LC08/C02/T1_L2")
     .filterBounds(roi)
     .filterDate(star_date, end_date)//时间过滤
     .filter(ee.Filter.lt("CLOUD_COVER",2))//云量小于xx%
     .map(applyScaleFactors)
print(dataset)



var dataset1 = dataset.median()

// //landsat5 显示合成的影像
// Map.addLayer(dataset1.clip(roi), {bands: ['SR_B3', 'SR_B2', 'SR_B1'], min: 0, max: 0.3});

//landsat8  显示合成的影像
Map.addLayer(dataset1.clip(roi), {bands: ['SR_B4', 'SR_B3', 'SR_B1'], min: 0, max: 0.3});

运行后可查看符合筛选条件的的影像有哪些(这里的筛选条件是:云量<2%;2021年全年;研究区)

可以看到,符合条件的影像有4景,时间分别是1月3日、1月19日、2月20日、12月5日

 查看符合筛选条件的影像合成结果

def imgS2Cloudless(roiArea, start_year, start_month, start_day, end_year, end_month, end_day, S2_BANDS, compositeType, cloudPercent): # 设置时间和研究区参数 startYear = start_year startMonth = start_month startDay = start_day endYear = end_year endMonth = end_month endDay = end_day region = roiArea # The masks for the 10m bands sometimes do not exclude bad data at # scene edges, so we apply masks from the 20m and 60m bands as well. def maskEdges(s2_img): edgeMask1 = s2_img.select('B8A').mask() edgeMask2 = s2_img.select('B9').mask() return s2_img.updateMask(edgeMask1).updateMask(edgeMask2) # 去云处理函数 def maskClouds(img): clouds = ee.Image(img.get('cloud_mask')).select('probability') isNotCloud = clouds.lt(cloudPercent) qa = img.select('QA60') cloudBitMask = 1 << 10 cirrusBitMask = 1 << 11 mask = ( qa.bitwiseAnd(cloudBitMask).eq(0) .And(qa.bitwiseAnd(cirrusBitMask).eq(0)) ) cloudMaskBYBlue = img.select('B2').lte(2000) return ( img.updateMask(isNotCloud).updateMask(mask).updateMask(cloudMaskBYBlue) .toDouble().divide(1e4) .copyProperties(img, ["system:time_start", "system:time_end"]) ) # 设置时间范围过滤 startDate = ee.Date.fromYMD(startYear, startMonth, startDay) endDate = ee.Date.fromYMD(endYear, endMonth, endDay) # 构建过滤条件:基于时间和研究区 criteria = ee.Filter.And( ee.Filter.bounds(region), ee.Filter.date(startDate, endDate) ) # 调用 Sentinel-2 数据集 s2Sr = ( ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED').filter(criteria).map(maskEdges) ) # 调用 Sentinel-2 Cloud Probability 数据集 s2Clouds = ( ee.ImageCollection('COPERNICUS/S2_CLOUD_PROBABILITY').filter(criteria) ) # 使用 Join 将 S2_SR 和 Cloud Probability 数据结合 s2SrWithCloudMask = ee.Join.saveFirst('cloud_mask').apply(**{ "primary": s2Sr, "secondary": s2Clouds, "condition": ee.Filter.equals(**{"leftField": 'system:index', "rightField": 'system:index'}) }) # 应用云掩模处理 s2CloudMasked = ( ee.ImageCollection(s2SrWithCloudMask).map(maskClouds) ) imgData = ee.Image(0) # 根据合成类型进行处理 if compositeType == 'median': imgData = s2CloudMasked.median().clip(roiArea) elif compositeType == 'mean': imgData = s2CloudMasked.mean().clip(roiArea) elif compositeType == 'min': imgData = s2CloudMasked.min().clip(roiArea) elif compositeType == 'max': imgData = s2CloudMasked.max().clip(roiArea) return imgData.select(S2_BANDS) 去云处理并合成后缺失比较多
03-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值