Google Earth Engine综合实验二——Global Surface Water的显示、统计与制饼图

编程入门 行业动态 更新时间:2024-10-25 08:15:08

Google Earth <a href=https://www.elefans.com/category/jswz/34/1769120.html style=Engine综合实验二——Global Surface Water的显示、统计与制饼图"/>

Google Earth Engine综合实验二——Global Surface Water的显示、统计与制饼图

GEE综合实验二——Global Surface Water的显示、统计与制饼图(难点list与dictionary转换和unction与map的理解应用以及饼图的制作)

Water Occurrence (1984-2015)

Creating a Basic Visualization

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var occurrence = gsw.select('occurrence');
Map.addLayer(occurrence);
Map.addLayer({eeObject: occurrence, name: 'Water Occurrence (1984-2015)'});
//完整的显示格式

Adding Visualization Parameters

var VIS_OCCURRENCE = {min: 0,max: 100,palette: ['red', 'blue']
};
Map.addLayer({eeObject: occurrence.updateMask(occurrence.divide(100)),name: 'Water Occurrence (1984-2015)',visParams: VIS_OCCURRENCE
});
//最小值0%为red,最大值100%为blue。
//添加.updatemask(occurrence.divide(100))会根据出现值设置像素的不透明度/透明度。

Creating a Threshold Layer

var VIS_WATER_MASK = {palette: ['white', 'blue']
};
//设置阈值,大于90的是蓝色,其余unmask为0值并设置为白色
// Create a water mask layer, and set the image mask so that non-water areas are opaque.
var water_mask = occurrence.gt(90).unmask(0);
Map.addLayer({eeObject: water_mask,visParams: VIS_WATER_MASK,name: '90% occurrence water mask'
});

Water Occurrence Change Intensity变化强度分为10个等级有默认颜色配置

Visualization

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var change = gsw.select("change_abs");
var VIS_CHANGE = {min:-50,max:50,palette: ['red', 'black', 'limegreen']
};
Map.setCenter(-74.4557, -8.4289, 11);  // Ucayali River, Peru
Map.addLayer({eeObject: change,visParams: VIS_CHANGE,name: 'occurrence change intensity'
});
// Calculate a change intensity for the region of interest.可以自定义也可以手动画
var roi = /* color: 0B4A8B */ee.Geometry.Polygon([[[-74.17213, -8.65569],[-74.17419, -8.39222],[-74.38362, -8.36980],[-74.43031, -8.61293]]]);

//查看直方图的分布值
var histogram1 = change.reduceRegion({reducer: ee.Reducer.histogram(),geometry: roi,scale: 30,bestEffort: true,
});
print(histogram1);

// Generate a histogram object and print it to the console tab.绘制直方图
var histogram = ui.Chart.image.histogram({image: change,region: roi,scale: 30,minBucketWidth: 20//横坐标间距是20
});
histogram.setOptions({title: 'Histogram of surface water change intensity.'
});
print(histogram)

Water Class Transition

//水过渡层捕获了三类水(非水、季节性水和永久性水)以及另外两类短暂水(短暂永久水和短暂季节性水)之间的变化。
本节教程将:添加一个用于可视化水过渡的地图层,创建一个分组减速器,用于在指定的兴趣区域内汇总每个过渡类的面积,
并创建一个图表,按过渡类总结面积。
var transition = gsw.select('transition');
Map.setCenter(105.26, 11.2134, 9);     // Mekong River Basin, SouthEast Asia
Map.addLayer({eeObject: transition,name: 'Transition classes (1984-2015)',
});

Summarizing Area by Transition Class

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var transition = gsw.select('transition');
Map.setCenter(105.26, 11.2134, 9);     // Mekong River Basin, SouthEast Asia
Map.addLayer({eeObject: transition,name: 'Transition classes (1984-2015)',
});
print("transition",transition)//一个image只有transition一个波段

//赋予每个像元以面积并添加属性,同综合实验一《森林损失额》
var area_image_with_transition_class = ee.Image.pixelArea().addBands(transition);
//一个image有两个波段,area和transition
//得到的图像对象(带过渡类的区域图像)是一个两波段图像,其中第一个波段包含以平方米为单位的区域信息(由ee.Image生成)。
pixelAreacode>方法),第二个波段包含过渡类信息。
我们使用ee. image . reducereregion方法和分组reducer来总结感兴趣区域(roi)内的类转换,分组reducer的作用是总结每个转换类内的区域
print("area_image_with_transition_class",area_image_with_transition_class)

//按transition分组并计算面积求和,有10组不包括no cahnge和no data,List(10 elements)var reduction_results = area_image_with_transition_class.reduceRegion({reducer: ee.Reducer.sum().group({groupField: 1,groupName: 'transition_class_value',}),geometry: roi,scale: 30,bestEffort: true,
});
print('reduction_results', reduction_results);

Creating a Summary Chart难点(列表转字典与函数应用)

var roi_stats = ee.List(reduction_results.get('groups'));//提出groups作为一个list
print("roi_stats",roi_stats)

// Create a dictionary for looking up names of transition classes.
//ee.Dictionary.fromLists(keys, values) 从两个键和值的并行列表构造一个字典
//查找名称字典将转换类值与其名称关联起来,而查找调色板字典将转换类值与颜色定义关联起来。是对gsw
var lookup_names = ee.Dictionary.fromLists(ee.List(gsw.get('transition_class_values')).map(numToString),gsw.get('transition_class_names')
);
// Create a dictionary for looking up colors of transition classes.
var lookup_palette = ee.Dictionary.fromLists(ee.List(gsw.get('transition_class_values')).map(numToString),转为string为转为字典作为关键字gsw.get('transition_class_palette')
);
print("lookup_names",lookup_names)
print(lookup_names.keys())//关键字


Helper functions

//createFeature函数接受一个字典(包含区域和水转换类)并返回一个适合绘制图表的Feature。
//createpiechartslicdictionary函数使用饼图所期望的格式创建一个与转换类对应的颜色列表
// Create a feature for a transition class that includes the area covered.
function createFeature(transition_class_stats) {transition_class_stats = ee.Dictionary(transition_class_stats);//将输入列表转换为字典var class_number = transition_class_stats.get('transition_class_value');
//get(关键字)是内容查新,roi_stats的transition_class_value是1-10 即分类组号var result = {transition_class_number: class_number,transition_class_name: lookup_names.get(class_number),获得1-10(已numtostring) 对应关键字的内容即改变类别(因为与gsw类别不同)transition_class_palette: lookup_palette.get(class_number),获得1-10 对应关键字的内容即色号area_m2: transition_class_stats.get('sum')};return ee.Feature(null, result);   // Creates a feature without a geometry.
}// Create a JSON dictionary that defines piechart colors based on the transition class palette.
// 参考
function createPieChartSliceDictionary(fc) {return ee.List(fc.aggregate_array("transition_class_palette")).map(function(p) { return {'color': p}; }).getInfo();
//FeatureCollection.aggregate_array(property) 聚合集合中对象的给定属性,计算所选属性的所有值的列表
//.getInfo()
}


// Convert a number to a string. Used for constructing dictionary key lists
// ee.Number.format bookmark border Convert a number to a string using printf-style formatting 使用打印样式格式将数字转换为字符串
function numToString(num) {return ee.Number(num).format();
}
var transition_fc = ee.FeatureCollection(roi_stats.map(createFeature));
print('transition_fc', transition_fc);

// Add a summary chart.
//ui.Chart.feature.byFeature(features, xProperty-string, yProperties-list)从一组特性生成图表。绘制每个特征的一个或多个属性的值
var transition_summary_chart = ui.Chart.feature.byFeature({features: transition_fc,xProperty: 'transition_class_name',yProperties: ['area_m2', 'transition_class_number']}).setChartType('PieChart').setOptions({title: 'Summary of transition class areas',slices: createPieChartSliceDictionary(transition_fc),sliceVisibilityThreshold: 0  // Don't group small slices.});
//setOptions({slides}) 是一个用于地图视图操作的方法。通过该方法,可以将当前地图视图的一些配置选项与指定的幻灯片相对应的幻灯片配置相匹配。
//删除关于slides仍可以显示,只不过配色与数据集默认不同
print(transition_summary_chart);


综合实参考

更多推荐

Google Earth Engine综合实验二——Global Surface Water的显示、统计与制饼图

本文发布于:2024-02-17 05:25:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1692813.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Engine   Earth   Google   Global   制饼图

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!