ODIAC 碳排放 - AI-Earth 或 PIE-Engine 获取长时间序列数据
全球化石燃料燃烧排放的CO2数据产品(ODIAC Fossil Fuel Emission Dataset)由日本国家环境研究所制作并公开发布。ODIAC率先结合使用夜间光照数据和单个发电厂的排放/位置概况来估计化石燃料CO2排放的全球空间分布。并通过创新的排放模型方法,实现了全球化石燃料CO2排放1x1公里分辨率的数据产品。当前版本为ODIAC2022,包括2000年1月-2021年12月的估算产品。
- 本代码主要用于计算长时间序列(月度)研究范围内的碳排放总量,并导出为排列好的 txt 文件。
AIE 代码
import aie
import numpy as np
aie.Authenticate()
aie.Initialize()
#色例
vis_params = {
'color': '#00FF00'
}
visco2 = {
'palette': ["#000000","#78F34A","#DEFF51","#F7D941","#FC9624","#FF0000"],
'min': 0.0,
'max': 500.0};
#定义研究范围
roi = aie.FeatureCollection('China_City') \
.filter(aie.Filter.eq('city', '北京市')) .geometry()
map = aie.Map(
center=roi.getCenter(),
height=800,
zoom=6
)
map.addLayer(
roi,
vis_params,
'region',
bounds=roi.getBounds()
)
#调取影像
img = aie.ImageCollection('ODIAC_CO2_1KM') \ .filterDate('2021-01-01','2021-01-31')\ .first()\ .select(['Map']); co2 = img.clip(roi) map.addLayer(co2,visco2, 'region', bounds=roi.getBounds()) print(co2.getInfo()) map
#建立时间序列,统计城市碳排放总量
def monthdata(start, end):
images = aie.ImageCollection('ODIAC_CO2_1KM') \
.filterDate(start, end) \
.select(['Map']);
img = images.first().clip(roi)
data = img.reduceRegion(aie.Reducer.sum(), roi,1000);
co2data.append((start[:7],data.getInfo()))
for year in range(2016,2021):
for i in range(1, 13):
start_month = str(year) + '-'+str(i);
end_month = str(year) + '-'+str(i);
monthdata(start_month, end_month)
time_list = [item[0] for item in co2data]
data_values = [item[1]['Map_sum'] for item in co2data]
time_array = np.array(time_list)
data_array = np.array(data_values).reshape(-1, 1)
co2array = np.hstack((time_array.reshape(-1, 1), data_array))
np.savetxt('/tmp/'+'北京市'+'co2_data.txt', co2array, fmt='%s', delimiter='\t')
aie.Export.dataset.toAsset('co2_dataset', '/tmp/'+'北京市'+'co2_data.txt')
- 结果如下图所示:
- 导出栅格数据代码:(仅导出调取影像的栅格数据,需要时序数据加在循环就行)
task = aie.Export.image.toAsset(co2, 'image_export_result', 1000)
task.start()
PIE 代码(PIE-Engine 只有 2000-2019 年逐月的数据)
//研究区域
var roi = pie.FeatureCollection('NGCC/CHINA_CITY_BOUNDARY')
.filter(pie.Filter.eq("name","北京市"))
.first()
.geometry();
//下载长时间序列栅格影像
for(var year = 2000;year<=2019;year++)
{
for(var month = 1;month<=12;month++)
{
var carbon = pie.ImageCollection("ODIAC/CO2_1KM")
.filterDate(year+'-'+month+'-01', year+'-'+month+'-05')
.select("land")
.sum()
.clip(roi);
//导出影像
Export.image({
image: carbon,
description:"碳排放数据"+year,
assetId: "CO2"+year,
region: roi,
crs:'EPSG:4326',
scale: 1000
});
}
}
//时序数据(研究区域内总值)
var start = 2016;
var end = 2017;
var carbondata = [];
function monthdata (start,end){
var images = pie.ImageCollection("ODIAC/CO2_1KM")
.filterDate(start, end)
.select("land");
var img = images.first().clip(roi);
var data = pie.Number(img.reduceRegion(pie.Reducer.sum(),roi,1000).get("land"));
Map.addLayer(img, visParams, start)
carbondata.push(data.getInfo());
}
function cirmonthdata(start,end){
var year = start;
for(var j = 0;j<end-start+1;j++)
{
var year0 =year+j;
for(var i = 1; i <13; i++)
{
var start1 = (year0+"-"+i).toString();
var end1 = ((year0+1)+"-01").toString();
monthdata(start1,end1)
}
}
}
function carbonline(startyear,endyear,array)
{
var time=[];
for(var i=startyear;i<=endyear;i++)
{
for(var j = 1;j<13;j++)
{
var time0 =i+"-"+j
time.push(time0);
}
}
var lines = {
title: 'CO2',
legend: ["CO2"],
xAxis: time,
yAxisName: "CO2",
xAxisName: "时间",
series: [array],
chartType: "line"
};
var chart = ui.Chart.array(lines,{width:"300px"});
print(chart)
}
cirmonthdata(start,end)
carbonline(start,end,carbondata)