refactor(Weather_download): 重构天气数据下载脚本并添加导出函数.
This commit is contained in:
parent
7464a47eac
commit
ccfe4ef7bc
@ -10,14 +10,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// 加载研究区域和影像
|
// 加载研究区域和影像
|
||||||
var region_name = "应城市";
|
// var region_name = "应城市";
|
||||||
var region_name_en = "Yingcheng";
|
// var region_name_en = "Yingcheng";
|
||||||
var region = Yingcheng;
|
// var region = Yingcheng;
|
||||||
var crs = "EPSG:4526";
|
// var target_crs = "EPSG:4526";
|
||||||
// var region_name = "保康县";
|
var region_name = "保康县";
|
||||||
// var region_name_en = "Baokang";
|
var region_name_en = "Baokang";
|
||||||
// var region = Baokang;
|
var region = Baokang;
|
||||||
// var crs = "EPSG:4525";
|
var target_crs = "EPSG:4525";
|
||||||
|
var target_res = 30;
|
||||||
var start_year = 2021;
|
var start_year = 2021;
|
||||||
var end_year = 2025;
|
var end_year = 2025;
|
||||||
var start_date = start_year + "-01-01";
|
var start_date = start_year + "-01-01";
|
||||||
@ -46,7 +47,7 @@ function kelvinToCelsius(image) {
|
|||||||
// 加载 ERA5-Land 数据
|
// 加载 ERA5-Land 数据
|
||||||
var ERA5dataset = ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AGGR")
|
var ERA5dataset = ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AGGR")
|
||||||
.filter(common_filter)
|
.filter(common_filter)
|
||||||
.select(ERA5Bands, commonBands)
|
.select(ERA5Bands, commonBands);
|
||||||
print(start_date + " - " + end_date + " ERA5-Land dataset", ERA5dataset);
|
print(start_date + " - " + end_date + " ERA5-Land dataset", ERA5dataset);
|
||||||
var ERA5Tempdataset = ERA5dataset.select("temperature").map(kelvinToCelsius);
|
var ERA5Tempdataset = ERA5dataset.select("temperature").map(kelvinToCelsius);
|
||||||
var ERA5Raindataset = ERA5dataset.select("total_precipitation_sum");
|
var ERA5Raindataset = ERA5dataset.select("total_precipitation_sum");
|
||||||
@ -72,24 +73,24 @@ if (start_year == end_year) {
|
|||||||
} else {
|
} else {
|
||||||
var year_str = start_year + "-" + end_year;
|
var year_str = start_year + "-" + end_year;
|
||||||
}
|
}
|
||||||
print(year_str + " Annual Mean ERA5-Land temperature dataset", yearlyTemp);
|
print(year_str + " Annual Mean ERA5-Land Temperature dataset", yearlyTemp);
|
||||||
print(year_str + " Annual Mean ERA5-Land rainfall dataset", yearlyRain);
|
print(year_str + " Annual Mean ERA5-Land Precipitation dataset", yearlyRain);
|
||||||
|
|
||||||
// 合成处理后会丢失投影信息, 需要重新设置投影
|
// 合成处理后会丢失投影信息, 需要重新设置投影
|
||||||
var proj = ERA5dataset.first().select(1).projection();
|
var proj = ERA5dataset.first().select(1).projection();
|
||||||
var annual_mean_temperature = ee.Image(yearlyTemp.mean()).setDefaultProjection(proj);
|
var annual_mean_temperature = ee.Image(yearlyTemp.mean()).setDefaultProjection(proj);
|
||||||
print(year_str + " Annual Mean ERA5-Land temperature Histogram", ui.Chart.image.histogram(annual_mean_temperature, region, 10000, 258));
|
print(year_str + " Annual Mean ERA5-Land Temperature Histogram", ui.Chart.image.histogram(annual_mean_temperature, region, 10000, 258));
|
||||||
|
|
||||||
var annual_mean_rainfall = ee.Image(yearlyRain.mean()).setDefaultProjection(proj);
|
var annual_mean_precipitation = ee.Image(yearlyRain.mean()).setDefaultProjection(proj);
|
||||||
print(year_str + " Annual Mean ERA5-Land rainfall Histogram", ui.Chart.image.histogram(annual_mean_rainfall, region, 10000, 258));
|
print(year_str + " Annual Mean ERA5-Land Precipitation Histogram", ui.Chart.image.histogram(annual_mean_precipitation, region, 10000, 258));
|
||||||
|
|
||||||
var annual_mean_temp_1km = annual_mean_temperature.clip(bounds).resample("bicubic").reproject({
|
var annual_mean_temp_1km = annual_mean_temperature.clip(bounds).resample("bicubic").reproject({
|
||||||
crs: proj,
|
crs: "EPSG:4526",
|
||||||
scale: 1000,
|
scale: 30,
|
||||||
});
|
});
|
||||||
var annual_mean_rainfall_1km = annual_mean_rainfall.clip(bounds).resample("bicubic").reproject({
|
var annual_mean_precipitation_1km = annual_mean_precipitation.clip(bounds).resample("bicubic").reproject({
|
||||||
crs: proj,
|
crs: "EPSG:4526",
|
||||||
scale: 1000,
|
scale: 30,
|
||||||
});
|
});
|
||||||
|
|
||||||
var temperature_vis = {
|
var temperature_vis = {
|
||||||
@ -119,23 +120,25 @@ var styling = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Map.centerObject(region, 7);
|
Map.centerObject(region, 7);
|
||||||
Map.addLayer(annual_mean_temperature, temperature_vis, year_str + " ERA5-Land Annual Mean temperature 0.1 degree");
|
Map.addLayer(annual_mean_temperature, temperature_vis, year_str + " Annual Mean Temperature 0.1 degree");
|
||||||
Map.addLayer(annual_mean_rainfall, precipitation_vis, year_str + " ERA5-Land Annual Mean precipitation 0.1 degree");
|
Map.addLayer(annual_mean_precipitation, precipitation_vis, year_str + " Annual Mean Precipitation 0.1 degree");
|
||||||
Map.addLayer(annual_mean_temp_1km, temperature_vis, year_str + " ERA5-Land Annual Mean temperature 1km");
|
Map.addLayer(annual_mean_temp_1km, temperature_vis, year_str + " Annual Mean Temperature " + target_res + "m");
|
||||||
Map.addLayer(annual_mean_rainfall_1km, precipitation_vis, year_str + " ERA5-Land Annual Mean precipitation 1km");
|
Map.addLayer(annual_mean_precipitation_1km, precipitation_vis, year_str + " Annual Mean Precipitation " + target_res + "m");
|
||||||
Map.addLayer(region.style(styling), {}, region_name);
|
Map.addLayer(region.style(styling), {}, region_name);
|
||||||
|
|
||||||
// 导出合并后的影像
|
// 导出合并后的影像
|
||||||
// 明确设置数据类型为Float32, 否则默认类型为Float64, 会占用更多内存
|
// 明确设置数据类型为Float32, 否则默认类型为Float64, 会占用更多内存
|
||||||
// 并对缺失值进行填充, 否则默认为nan不便于后续本地处理
|
// 并对缺失值进行填充, 否则默认为nan不便于后续本地处理
|
||||||
var processed_temp_img = annual_mean_temperature.toFloat().unmask(-9999.0);
|
function exportCOG(image, description, folder, region, scale, crs) {
|
||||||
print("Start exporting " + year_str + "Yearly Mean ERA5-Land temperature image (" + crs + ")", processed_temp_img);
|
image = image.toFloat().unmask(-9999.0);
|
||||||
Export.image.toDrive({
|
// 默认为 EPSG:4526 投影
|
||||||
image: processed_temp_img,
|
crs = crs || "EPSG:4526";
|
||||||
description: region_name_en + "_ERA5_Temperature_" + year_str + "_1km",
|
Export.image.toDrive({
|
||||||
folder: "Weather",
|
image: image,
|
||||||
|
description: description,
|
||||||
|
folder: folder,
|
||||||
region: region, // 添加后会自动裁剪
|
region: region, // 添加后会自动裁剪
|
||||||
scale: 1000,
|
scale: scale,
|
||||||
crs: crs,
|
crs: crs,
|
||||||
maxPixels: 1e13, // GEE 最多支持 1e8 像素, 当超过时会自动分块
|
maxPixels: 1e13, // GEE 最多支持 1e8 像素, 当超过时会自动分块
|
||||||
fileFormat: "GeoTIFF",
|
fileFormat: "GeoTIFF",
|
||||||
@ -144,20 +147,24 @@ Export.image.toDrive({
|
|||||||
cloudOptimized: true,
|
cloudOptimized: true,
|
||||||
noData: -9999.0,
|
noData: -9999.0,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var processed_rain_img = annual_mean_rainfall.toFloat().unmask(-9999.0);
|
print("Start exporting " + year_str + " Yearly Mean ERA5-Land Temperature (" + target_crs + " " + target_res + "m)", annual_mean_temperature);
|
||||||
Export.image.toDrive({
|
exportCOG(
|
||||||
image: processed_rain_img,
|
annual_mean_temperature,
|
||||||
description: region_name_en + "_ERA5_Precipitation_" + year_str + "_1km",
|
region_name_en + "_ERA5_Temperature_" + year_str + "_" + target_res + "m",
|
||||||
folder: "Weather",
|
"Temperature",
|
||||||
region: region,
|
region,
|
||||||
scale: 1000,
|
target_res,
|
||||||
crs: crs,
|
target_crs
|
||||||
maxPixels: 1e13,
|
);
|
||||||
fileFormat: "GeoTIFF",
|
print("Start exporting " + year_str + " Yearly Mean ERA5-Land Precipitation (" + target_crs + " " + target_res + "m)", annual_mean_precipitation);
|
||||||
formatOptions: {
|
exportCOG(
|
||||||
cloudOptimized: true,
|
annual_mean_precipitation,
|
||||||
noData: -9999.0,
|
region_name_en + "_ERA5_Precipitation_" + year_str + "_" + target_res + "m",
|
||||||
},
|
"Precipitation",
|
||||||
});
|
region,
|
||||||
|
target_res,
|
||||||
|
target_crs
|
||||||
|
);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user