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.
// 参考https://developers.google.com/chart/interactive/docs/gallery/piechart
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);

在这里插入图片描述
综合实参考

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值