使用Google Earth Engine下载SPL4SMGP.007 SMAP L4 Global...
생성일: 2025년 3월 11일
답변에 사용된 모델 O3 Mini High by Chat01
생성일: 2025년 3월 11일
답변에 사용된 모델 O3 Mini High by Chat01
使用Google Earth Engine下载SPL4SMGP.007 SMAP L4 Global 3-hourly 9-km Surface and Root Zone Soil Moisture(ee.ImageCollection("NASA/SMAP/SPL4SMGP/007")每日数据,变量sm_rootzone,时间2022-1-1至2022-1-10。注意此数据是3小时分辨率,因此需要先进行每日合成,可以取平均值;下载范围和分辨率参考以下代码:
var regi_geo = ee.Geometry.Rectangle(111.99,-44.01,154.01,-9.99);
var maxImageCollection = dataset.map(function(image) {
return image.reduceResolution({
reducer: ee.Reducer.mean(),
maxPixels: 65536 // 调整以适应你的需要
// 注意:根据你的具体需要调整其他参数,例如bestEffort, tileSize等
}).reproject({
crs: 'EPSG:4326',
crsTransform:[0.02, 0, 111.99, 0, -0.02, -9.99] // 这里设置新的分辨率,根据需要调整
}).clip(regi_geo); // 根据需要,可以在此步或在之后剪裁到特定区域
});
var images = maxImageCollection.select('EVI');
print(maxImageCollection);
//获取影像波段数据集中影像的个数
var num = images.size().getInfo();
//将影像波段数据集转换成长度为num的List
var list = images.toList(num);
//对list影像数据集进行操作
for (var i = 0; i < num; i++){
var image = ee.Image(list.get(i)).clip(regi_geo);
text// 获取影像的日期作为文件名的一部分 var date = image.date().format('YYYY-MM-dd').getInfo(); var nameOut = 'MODIS_EVI_' + date; // 将数据下载到Google云盘上 Export.image.toDrive({ image: image, description: nameOut, fileNamePrefix: nameOut, folder: 'IPG_EVI', // 文件夹 crs: 'EPSG:4326', region: regi_geo, fileFormat: 'GeoTIFF', // GeoTIFF仍是一个通用格式 crsTransform: [0.02, 0, 111.99, 0, -0.02, -9.99], maxPixels: 1e9 });
}
下面提供一段完整的Google Earth Engine脚本示例,用于下载SPL4SMGP.007数据中变量“sm_rootzone”的每日数据(2022年1月1日至2022年1月10日),因原始数据为3小时分辨率,因此先对每天的数据取平均合成,再按指定范围和分辨率导出到Google云盘。请将以下代码粘贴到GEE代码编辑器中运行:
javascript// 定义导出区域(矩形区域) var regi_geo = ee.Geometry.Rectangle(111.99, -44.01, 154.01, -9.99); // 加载SMAP L4 Global 3-hourly数据,并筛选时间范围(注意结束日期设置为1月11日以包含1月10日全天) var dataset = ee.ImageCollection("NASA/SMAP/SPL4SMGP/007") .filterDate('2022-01-01', '2022-01-11'); // 用ee.List生成日期偏移量(共10天,1月1日至1月10日) var days = ee.List.sequence(0, 9); // 对每一天进行处理:筛选当天影像,选取sm_rootzone波段,求平均合成 var dailyComposite = days.map(function(dayOffset) { var start = ee.Date('2022-01-01').advance(dayOffset, 'day'); var end = start.advance(1, 'day'); // 筛选当天的影像,并选取变量"sm_rootzone" var dailyImages = dataset.filterDate(start, end).select('sm_rootzone'); // 计算当天平均值(合成日均图像) var dailyMean = dailyImages.mean(); // 进行降分辨率并重投影(可根据需要调整maxPixels和crsTransform参数) dailyMean = dailyMean.reduceResolution({ reducer: ee.Reducer.mean(), maxPixels: 65536 }).reproject({ crs: 'EPSG:4326', crsTransform: [0.02, 0, 111.99, 0, -0.02, -9.99] }).clip(regi_geo); // 将日期信息存入影像属性,便于后续命名 return dailyMean.set('system:time_start', start.millis()); }); // 将生成的日均影像列表转换成ImageCollection var dailyCollection = ee.ImageCollection.fromImages(dailyComposite); // 获取ImageCollection中影像的数量,并转换为List以便遍历导出 var num = dailyCollection.size().getInfo(); var dailyList = dailyCollection.toList(num); // 循环遍历每一天影像,并导出到Google云盘(文件夹名为"SMAP_sm_rootzone") for (var i = 0; i < num; i++){ var image = ee.Image(dailyList.get(i)); // 提取影像日期,用于命名 var date = ee.Date(image.get('system:time_start')).format('YYYY-MM-dd').getInfo(); var nameOut = 'SMAP_sm_rootzone_' + date; Export.image.toDrive({ image: image, description: nameOut, fileNamePrefix: nameOut, folder: 'SMAP_sm_rootzone', // 可根据需要修改云盘文件夹名称 crs: 'EPSG:4326', region: regi_geo, fileFormat: 'GeoTIFF', crsTransform: [0.02, 0, 111.99, 0, -0.02, -9.99], maxPixels: 1e9 }); }
数据与时间筛选
使用ee.ImageCollection("NASA/SMAP/SPL4SMGP/007")
加载SMAP数据,并通过filterDate
筛选2022年1月1日至2022年1月10日的全部影像(结束日期设为1月11日以确保包含1月10日)。
每日合成
通过ee.List.sequence
生成从0到9的日偏移量,然后对每一天:
sm_rootzone
,mean()
函数计算当天的平均值,reduceResolution
和reproject
调整分辨率与投影,最后用clip
裁剪到感兴趣区域。导出影像
将每日合成结果转换成ImageCollection,再遍历每一幅影像,根据日期为每幅影像命名,利用Export.image.toDrive
将结果导出为GeoTIFF格式到指定的Google云盘文件夹。
运行脚本后,每个日均影像将依次进入任务列表,点击任务开始导出即可。根据实际数据量及区域大小,可能需要调整maxPixels
和其他参数以确保顺利导出。
这样就实现了对SPL4SMGP.007 SMAP数据每日“sm_rootzone”变量的平均合成和导出。
Line 39: Image.reduceResolution: The input to reduceResolution does not have a valid default projection. Use setDefaultProjection() first.
参考以下代码修改:var maxImageCollection = dataset.map(function(image) {
return image.reduceResolution({
reducer: ee.Reducer.mean(),
maxPixels: 65536 // 调整以适应你的需要
// 注意:根据你的具体需要调整其他参数,例如bestEffort, tileSize等
}).reproject({
crs: 'EPSG:4326',
crsTransform:[0.02, 0, 111.99, 0, -0.02, -9.99] // 这里设置新的分辨率,根据需要调整
}).clip(regi_geo); // 根据需要,可以在此步或在之后剪裁到特定区域
});
下面提供一种解决方案,在调用 reduceResolution 前先为每个影像设置默认投影。例如,可以从目标波段(如“sm_rootzone”)获取原始投影,然后调用 setDefaultProjection,再进行后续操作。代码示例如下:
javascriptvar maxImageCollection = dataset.map(function(image) { // 从“sm_rootzone”波段获取原始投影,并设置为默认投影 var defaultProj = image.select('sm_rootzone').projection(); image = image.setDefaultProjection(defaultProj); return image.reduceResolution({ reducer: ee.Reducer.mean(), maxPixels: 65536 // 可根据需要调整其他参数(例如 bestEffort, tileSize 等) }).reproject({ crs: 'EPSG:4326', crsTransform: [0.02, 0, 111.99, 0, -0.02, -9.99] // 根据需要调整新的分辨率 }).clip(regi_geo); // 裁剪到指定区域 });
设置默认投影
使用 image.select('sm_rootzone').projection()
获取“sm_rootzone”波段的投影信息,并通过 setDefaultProjection(defaultProj)
为影像设置默认投影,避免后续 reduceResolution 操作时出现错误。
后续处理
设置完默认投影后,再调用 reduceResolution
进行降分辨率处理,并使用 reproject
按照指定的 CRS 和变换参数进行重投影,最后用 clip(regi_geo)
裁剪到感兴趣区域。
这样修改后,即可避免 “Image.reduceResolution: The input to reduceResolution does not have a valid default projection” 的错误。
给出修改后的完整代码
下面提供修改后的完整代码,已在每日合成部分中对影像设置默认投影,避免reduceResolution报错:
javascript// 定义导出区域(矩形区域) var regi_geo = ee.Geometry.Rectangle(111.99, -44.01, 154.01, -9.99); // 加载SMAP L4 Global 3-hourly数据,并筛选时间范围(注意结束日期设置为1月11日以包含1月10日全天) var dataset = ee.ImageCollection("NASA/SMAP/SPL4SMGP/007") .filterDate('2022-01-01', '2022-01-11'); // 用ee.List生成日期偏移量(共10天,1月1日至1月10日) var days = ee.List.sequence(0, 9); // 对每一天进行处理:筛选当天影像,选取变量"sm_rootzone",求平均合成,然后设置默认投影,再进行降分辨率、重投影和裁剪 var dailyComposite = days.map(function(dayOffset) { var start = ee.Date('2022-01-01').advance(dayOffset, 'day'); var end = start.advance(1, 'day'); // 筛选当天的影像,并选取变量"sm_rootzone" var dailyImages = dataset.filterDate(start, end).select('sm_rootzone'); // 计算当天平均值(合成日均图像) var dailyMean = dailyImages.mean(); // 设置默认投影,避免后续reduceResolution报错 var defaultProj = dailyMean.select('sm_rootzone').projection(); dailyMean = dailyMean.setDefaultProjection(defaultProj); // 降分辨率(取平均)、重投影并裁剪到指定区域 dailyMean = dailyMean.reduceResolution({ reducer: ee.Reducer.mean(), maxPixels: 65536 }).reproject({ crs: 'EPSG:4326', crsTransform: [0.02, 0, 111.99, 0, -0.02, -9.99] }).clip(regi_geo); // 将日期信息存入影像属性,便于后续命名 return dailyMean.set('system:time_start', start.millis()); }); // 将生成的日均影像列表转换成ImageCollection var dailyCollection = ee.ImageCollection.fromImages(dailyComposite); // 获取ImageCollection中影像的数量,并转换为List以便遍历导出 var num = dailyCollection.size().getInfo(); var dailyList = dailyCollection.toList(num); // 循环遍历每一天影像,并导出到Google云盘(文件夹名为"SMAP_sm_rootzone") for (var i = 0; i < num; i++){ var image = ee.Image(dailyList.get(i)); // 提取影像日期,用于命名 var date = ee.Date(image.get('system:time_start')).format('YYYY-MM-dd').getInfo(); var nameOut = 'SMAP_sm_rootzone_' + date; Export.image.toDrive({ image: image, description: nameOut, fileNamePrefix: nameOut, folder: 'SMAP_sm_rootzone', // 请确保在Google云盘中已存在该文件夹或修改为你需要的文件夹名 crs: 'EPSG:4326', region: regi_geo, fileFormat: 'GeoTIFF', crsTransform: [0.02, 0, 111.99, 0, -0.02, -9.99], maxPixels: 1e9 }); }
数据与时间筛选
使用ee.ImageCollection("NASA/SMAP/SPL4SMGP/007")
加载SMAP数据,并通过filterDate
筛选2022年1月1日至2022年1月10日(结束日期设为1月11日)内的全部影像。
每日合成
利用ee.List.sequence
生成日偏移量,对每一天:
sm_rootzone
波段;setDefaultProjection
设置默认投影,避免reduceResolution时出现错误;reduceResolution
降分辨率,并通过reproject
重投影,最后用clip
裁剪到感兴趣区域;导出影像
将每日合成结果转换成ImageCollection,再遍历每一幅影像,根据日期命名后,使用Export.image.toDrive
将结果导出为GeoTIFF格式到Google云盘中。
将上述代码粘贴到Google Earth Engine代码编辑器中运行,即可生成每日合成影像,并在任务列表中看到对应的导出任务。
Line 43: Image.reduceResolution: The input to reduceResolution does not have a valid default projection. Use setDefaultProjection() first.
下面是修改后的完整代码,已在每日合成后为结果影像设置有效的默认投影(取自当天第一幅影像的sm_rootzone波段投影),从而避免reduceResolution报错:
javascript// 定义导出区域(矩形区域) var regi_geo = ee.Geometry.Rectangle(111.99, -44.01, 154.01, -9.99); // 加载SMAP L4 Global 3-hourly数据,并筛选时间范围(注意结束日期设置为1月11日以包含1月10日全天) var dataset = ee.ImageCollection("NASA/SMAP/SPL4SMGP/007") .filterDate('2022-01-01', '2022-01-11'); // 用ee.List生成日期偏移量(共10天,1月1日至1月10日) var days = ee.List.sequence(0, 9); // 对每一天进行处理:筛选当天影像,选取变量"sm_rootzone",计算日均合成,然后设置默认投影,再进行降分辨率、重投影和裁剪 var dailyComposite = days.map(function(dayOffset) { var start = ee.Date('2022-01-01').advance(dayOffset, 'day'); var end = start.advance(1, 'day'); // 筛选当天的影像,并选取变量"sm_rootzone" var dailyImages = dataset.filterDate(start, end).select('sm_rootzone'); // 计算当天平均值(合成日均图像) var dailyMean = dailyImages.mean(); // 设置默认投影:取当天第一幅影像的sm_rootzone波段的投影信息 var firstImage = ee.Image(dailyImages.first()); var defaultProj = firstImage.select('sm_rootzone').projection(); dailyMean = dailyMean.setDefaultProjection(defaultProj); // 降分辨率(取平均)、重投影并裁剪到指定区域 dailyMean = dailyMean.reduceResolution({ reducer: ee.Reducer.mean(), maxPixels: 65536 }).reproject({ crs: 'EPSG:4326', crsTransform: [0.02, 0, 111.99, 0, -0.02, -9.99] }).clip(regi_geo); // 将日期信息存入影像属性,便于后续命名 return dailyMean.set('system:time_start', start.millis()); }); // 将生成的日均影像列表转换成ImageCollection var dailyCollection = ee.ImageCollection.fromImages(dailyComposite); // 获取ImageCollection中影像的数量,并转换为List以便遍历导出 var num = dailyCollection.size().getInfo(); var dailyList = dailyCollection.toList(num); // 循环遍历每一天影像,并导出到Google云盘(文件夹名为"SMAP_sm_rootzone") for (var i = 0; i < num; i++){ var image = ee.Image(dailyList.get(i)); // 提取影像日期,用于命名 var date = ee.Date(image.get('system:time_start')).format('YYYY-MM-dd').getInfo(); var nameOut = 'SMAP_sm_rootzone_' + date; Export.image.toDrive({ image: image, description: nameOut, fileNamePrefix: nameOut, folder: 'SMAP_sm_rootzone', // 请确保在Google云盘中已存在该文件夹或修改为你需要的文件夹名 crs: 'EPSG:4326', region: regi_geo, fileFormat: 'GeoTIFF', crsTransform: [0.02, 0, 111.99, 0, -0.02, -9.99], maxPixels: 1e9 }); }
数据与时间筛选
使用 ee.ImageCollection("NASA/SMAP/SPL4SMGP/007")
加载SMAP数据,并通过 filterDate
筛选2022年1月1日至1月10日内的全部影像(结束日期设置为1月11日以确保包含1月10日)。
每日合成
通过 ee.List.sequence
生成日偏移量,对每一天:
sm_rootzone
波段;mean()
计算日均值;sm_rootzone
波段获取投影信息);reduceResolution
降分辨率,再通过 reproject
重投影,并用 clip
裁剪到指定区域。导出影像
将每日合成结果转换成ImageCollection,再遍历每一幅影像,根据日期为每幅影像命名,利用 Export.image.toDrive
将结果导出为GeoTIFF格式到指定的Google云盘文件夹。
将上述代码粘贴到Google Earth Engine代码编辑器中运行,即可生成每日合成影像并在任务列表中看到对应的导出任务。