此次案例,又两个官网的数据和配色连接:

https://cds.nccs.nasa.gov/wp-content/uploads/2014/04/NEX-DCP30_Tech_Note_v0.pdf

http://www.nasa.gov/content/nasa-supercomputer-generates-closer-look-at-future-climate-conditions-in-us


NASA NEX-DCP30 数据集由美国本土的缩减气候情景组成,这些情景源自在耦合模型比对项目第 5 阶段(CMIP5,参见 Taylor 等人,2012 年)下进行的总环流模型 (GCM) 和跨为政府间气候变化专门委员会第五次评估报告 (IPCC AR5) 制定的四种温室气体排放情景,称为代表性浓度路径(RCP,见 Meinshausen 等人,2011 年)。这些数据集的目的是提供一组高分辨率、偏差校正的气候变化预测,可用于评估气候变化对更细尺度气候梯度敏感过程的影响以及局部地形对气候条件的影响。 该数据集包含涵盖 1950 年至 2005 年(回顾性运行)和 2006 年至 2099 年(预期运行)期间的月度预测。它包括从可用于 pr、tasmin 和 tasmax 波段的所有模型运行中为每个 RCP 计算的集合统计数据。 NEX-DCP30 由气候分析小组和 NASA 艾姆斯研究中心使用 NASA Earth Exchange 编写,并由 NASA 气候模拟中心 (NCCS) 分发。


此次案例是对于气候的分析,主要是美国加州气候变化的一个可视化,时间序列的过程分析。

GEE(Google Earth Engine)——使用 NASA NEX-DCP30 数据集创建投影的可视化(美国加利福尼亚州圣华金流域的气候)_气候预测 

GEE(Google Earth Engine)——使用 NASA NEX-DCP30 数据集创建投影的可视化(美国加利福尼亚州圣华金流域的气候)_google cloud_02

 GEE(Google Earth Engine)——使用 NASA NEX-DCP30 数据集创建投影的可视化(美国加利福尼亚州圣华金流域的气候)_GEE_03

 代码:

var geometry1 = /* color: #98ff00 */ee.Geometry.MultiPoint();
//影像的选择波段选择和时间筛选
var base_collection = ee.ImageCollection('NASA/NEX-DCP30_ENSEMBLE_STATS')
.select(['tasmax_median', 'tasmax_quartile25', 'tasmax_quartile75'])
.filterDate('2010-01-01', '2100-01-01');
//设置一个变量来作为时间的筛选这里从7月开始
var january = base_collection.filter(ee.Filter.calendarRange({
start: 7,
field: 'month'
}));

// 讲K温度转化为摄氏度C然后复制属性
january = january.map(function(image) {
return image.subtract(273.15)
.copyProperties(image, ['system:time_start', 'scenario']);
});
//对数据进行筛选
var rcp26 = january.filterMetadata('scenario', 'equals', 'rcp26');
var rcp45 = january.filterMetadata('scenario', 'equals', 'rcp45');
var rcp60 = january.filterMetadata('scenario', 'equals', 'rcp60');
var rcp85 = january.filterMetadata('scenario', 'equals', 'rcp85');

//设置矢量边界
var forest = ee.Feature(
ee.Geometry.Rectangle(-121, 39.4, -120.8, 39.8),
{label: 'Tahoe National Forest'});

var roi = ee.Feature(
ee.FeatureCollection('USGS/WBD/2017/HUC06')
.filterMetadata('huc6', 'equals', '180400') // San Joaquin watershed
.first());
//这里是曲线图的设置,主要是标题包括线宽和字体大小
var options = {
title: 'Daily Maximum Near-Surface Air Temperature',
vAxis: {
title: 'Daily Maximum Near-Surface Air Temperature [Celsius]'
},
lineWidth: 1,
pointSize: 4
};
//曲线图的标签设置
var labelBands = function(collection, scenario) {
return collection.select(
['tasmax_median', 'tasmax_quartile25', 'tasmax_quartile75'],
['rcp' + scenario + '_tasmax_median',
'rcp' + scenario + '_tasmax_quartile25',
'rcp' + scenario + '_tasmax_quartile75']);
};
//一个波段和另一个波段的掩膜
var combined = labelBands(rcp26, '26').merge(labelBands(rcp85, '85'));
//图形的设置
var chart = ui.Chart.image.series({
imageCollection: combined,
region: roi,
reducer: ee.Reducer.mean(),
scale: 200,
xProperty: 'system:time_start'
}).setChartType('LineChart')
.setOptions({
title: 'Predicted January Temperature - San Joaquin Watershed',
vAxis: {
title: 'Daily Maximum Near-Surface Air Temperature [Celsius]'
},
interval: {
rcp26_tasmax_quartile: {'style':'area'},
rcp85_tasmax_quartile: {'style':'area'},
},
lineWidth: 1,
curveType:'function',
interpolateNulls: true
});
chart = chart.setSeriesNames('RPC2.6', 0);
chart = chart.setSeriesNames('RPC8.5', 3);
print(chart);

//主要是设置不同曲线的颜色和对应标签属性
var sld =
'<RasterSymbolizer>' +
'<ColorMap>' +
'<ColorMapEntry color="#110092" quantity="17.5" label="17.5"/>' +
'<ColorMapEntry color="#0C00FF" quantity="20.0" label="20.0" />' +
'<ColorMapEntry color="#0E66FF" quantity="22.5" label="22.5" />' +
'<ColorMapEntry color="#0DDFFB" quantity="25.0" label="25.0" />' +
'<ColorMapEntry color="#52AA92" quantity="27.5" label="27.5" />' +
'<ColorMapEntry color="#A9EE35" quantity="30.0" label="30.0" />' +
'<ColorMapEntry color="#FFDE00" quantity="32.5" label="32.5" />' +
'<ColorMapEntry color="#FF6E00" quantity="35.0" label="35.0" />' +
'<ColorMapEntry color="#F90000" quantity="37.5" label="37.5" />' +
'<ColorMapEntry color="#770B11" quantity="40.0" label="40.0" />' +
'</ColorMap>' +
'</RasterSymbolizer>';
//这个主要是地图上的显示
var image2 = ee.Image(rcp26.filterDate('2050-01-01', '2051-01-01').first())
.select('tasmax_median');

Map.centerObject(roi);
Map.addLayer(image2,
{bands:'tasmax_median', min:-2, max:8},
'historical_195001 tasmax_median', false);
Map.addLayer(image2.sldStyle(sld), {}, "tasmax_median (styled)", true);
Map.addLayer(roi, {}, 'Region of Interest');