(GEE)2000-2020年黄河流域时序渐变图及高程模型计算 JavaScript版

news2024/11/19 19:22:12

文章目录

    • 一. 选取目标区域
    • 二. NDVI实现
    • 三. 高程模型DEM实现
    • 四. 时序图
    • 五. 植被覆盖类型
    • 六. 参考文献


首先推荐吴秋生老师团队开源的便捷构建网站:适用于地理空间应用的Streamlight
吴秋生老师团队的工具请自行探索。本文讲解基于GEE云开发平台实现,基于modis,黄河数据中心,LandSat7&8数据。
注意在大范围使用landsat数据集会出现黑色断条
数据集如下:

// 数据集可用性: 1999年1月至2022年4月
var dataSet_landSet7_1 = 'LANDSAT/LE07/C02/T1_L2' // Landsat 7 ETM+ Collection 2 大气校正表面反射率。表面反射率
var dataSet_landSet7_2 = "LANDSAT/LE07/C02/T1_TOA" // Landsat 7 ETM+ Collection 2 校准的大气顶部 (TOA) 反射率 大气之巅
var dataSet_landSet7_3 = "LANDSAT/LE07/C02/T1" // Landsat 7 ETM+ 集合 2 个 DN 值,表示缩放、校准的传感器辐射度  原始图像
// 数据集可用性: 20134 月至今 
var dataSet_landSet8_1 = "LANDSAT/LC08/C02/T1_L2" // Landsat 8 OLI/TIRS Collection 2 大气校正表面反射率。表面反射率
var dataSet_landSet8_2 = "LANDSAT/LC08/C02/T1_TOA" // Landsat 8 OLI/TIRS Collection 2 校准的大气顶部 (TOA) 反射率。 大气之巅
var dataSet_landSet8_3 = "LANDSAT/LC08/C02/T1" // Landsat 8 OLI/TIRS 集合 2 DN 值,表示缩放、校准的传感器辐射度。 原始图像

一. 选取目标区域

gee提供了点阵获取点位,但是较为麻烦。我选择上传shp矢量区域。该项数据来源于 黄河数据中心 以及 国家冰川冻土沙漠科学数据中心 。请自行申请数据,但其shp,dem文件地理信息有误,最好向师兄师姐要现成的shp,dem文件。。。。

在这里插入图片描述


二. NDVI实现

// 黄河范围
var scope_yellow_river_basin_shp = 'projects/ee-w782353676/assets/yellow-river'
var roi = ee.FeatureCollection(scope_yellow_river_basin_shp)
// 添加Landsat5/7/8 影像集合,添加时间波段
var start_year = 2000
var end_year = 2020
// 数据集可用性: 1999年1月至2022年4月
var dataSet_landSet7_1 = 'LANDSAT/LE07/C02/T1_L2' // Landsat 7 ETM+ Collection 2 大气校正表面反射率。表面反射率
var dataSet_landSet7_2 = "LANDSAT/LE07/C02/T1_TOA" // Landsat 7 ETM+ Collection 2 校准的大气顶部 (TOA) 反射率 大气之巅
var dataSet_landSet7_3 = "LANDSAT/LE07/C02/T1" // Landsat 7 ETM+ 集合 2 个 DN 值,表示缩放、校准的传感器辐射度  原始图像
// 数据集可用性: 2013 年 4 月至今 
var dataSet_landSet8_1 = "LANDSAT/LC08/C02/T1_L2" // Landsat 8 OLI/TIRS Collection 2 大气校正表面反射率。表面反射率
var dataSet_landSet8_2 = "LANDSAT/LC08/C02/T1_TOA" // Landsat 8 OLI/TIRS Collection 2 校准的大气顶部 (TOA) 反射率。 大气之巅
var dataSet_landSet8_3 = "LANDSAT/LC08/C02/T1" // Landsat 8 OLI/TIRS 集合 2 DN 值,表示缩放、校准的传感器辐射度。 原始图像

// =========landSat卫星 大范围区域,出现黑条=====
// function getDataSet(image){
//   return ee.ImageCollection(image)
//     .filterDate(start_year + '-01-01', end_year + '-12-31') // 筛选出指定时间的影像 
//     .filterBounds(roi) // 筛选出指定范围的影像
//     .filter(ee.Filter.lt("CLOUD_COVER",5))    //云量小于5%;  
// }
// // 合并Landsat 7/8表面反射率数据集
// var landSet7=getDataSet(dataSet_landSet7_1).map(calculateNDVI)
// var landSet8=getDataSet(dataSet_landSet8_1).map(calculateNDVI)
// var dataSet = landSet7.merge(landSet8)

// // 创建一个函数来组合Landsat 7和8的数据集并计算NDVI
// function calculateNDVI(image) {
//   var sensorId = image.get('SPACECRAFT_ID');
//   // 根据传感器ID确定近红外和红光波段名称 
//   // 在landsat8中SR_B5为近红外反射,SR_B4为红外反射。而在landsat7中SR_B4为近红外反射,SR_B3为红外反射
//   var nirBandName = sensorId === 'LANDSAT_7' ? 'SR_B4' : 'SR_B5';
//   var redBandName = sensorId === 'LANDSAT_7' ? 'SR_B3' : 'SR_B4';
//   // 计算NDVI
//   var ndvi = image.normalizedDifference([nirBandName, redBandName])
//                   .rename('NDVI');

//   // 返回带有NDVI波段的新图像
//   return image.addBands(ndvi);
// }
// ======= modis数据集 ========
var dataSet_modis = "MODIS/061/MOD13A1" // MOD13A1.061 Terra Vegetation Indices 16-Day Global 500m 
function getDataSet(image){
  return ee.ImageCollection(image)
    .filterDate(start_year + '-01-01', end_year + '-12-31') // 筛选出指定时间的影像 
    .filterBounds(roi) // 筛选出指定范围的影像
}
var dataSet = getDataSet(dataSet_modis).map(function(image){
  return image.clip(roi)
})

// 可视化NDVI
var palettes = require('users/gena/packages:palettes'),
palette = [
    'ffffff', 'ce7e45', 'df923d', 'f1b555', 'fcd163', '99b718', '74a901',
    '66a000', '529400', '3e8601', '207401', '056201', '004c00', '023b01',
    '012e01', '011d01', '011301'
  ],
NDVIL=0,
NDVIR=9000,
ndviVisParams = {
  palette: palette,
  min: NDVIL, 
  max: NDVIR
};
Map.addLayer(dataSet.select('NDVI'), ndviVisParams, 'NDVI');
// 设置地图中心
Map.centerObject(roi, 6); // 自动定位到黄河中心区域,具体级别可能需要调整
// 可选:查看航天器和传感器信息
print('航天器名称:', dataSet.aggregate_array('SPACECRAFT_ID').distinct());
print('传感器名称:', dataSet.aggregate_array('SENSOR_ID').distinct());



var geometryGradientBar = ee.Geometry.Polygon(
        [[[120.58035887483346, 35.41874649038236],
          [120.58035887483346, 35.09129359905458],
          [122.42056883577096, 35.09129359905458],
          [122.42056883577096, 35.41874649038236]]], null, false);
var yellowRiver = roi;
// Map.addLayer(yellowRiver, {}, 'Polygon');


//--------------step1.图像获取与处理----------------//
//选择产品
var col = dataSet.select('NDVI');
// 生成循环的list
var years = ee.List.sequence(2000,2020,1);
var months = ee.List.sequence(1,12,1);

/*
这里处理的基本思路是按月进行最大值合成
*/
var col =  ee.ImageCollection.fromImages(
  years.map(function (y) {
    return months.map(function(m){
      var start = ee.Date.fromYMD(y,m,1).advance(-1,"month");
      var end = ee.Date.fromYMD(y,m,1).advance(1,"month");
      var w = col.filterDate(start,end).max();    
                    
      return w.set('year', y)
              .set('month', m)
              .set('system:time_start',start);
  })}).flatten()
);


//------------step2渲染模块设定-------------//

// 添加带有标签的颜色渐变条
var style = require('users/gena/packages:style');
var utils = require('users/gena/packages:utils');
var txt = require('users/gena/packages:text');

var textProperties = {
  fontSize: 24, //*定义比例尺的字体
  textColor: 'ffffff',
  outlineColor: '000000',
  outlineWidth: 0,
  outlineOpacity: 0.8
};
var labels = ee.List.sequence(0, 1);
var gradientBar = style.GradientBar.draw(geometryGradientBar, {
  min: NDVIL, max: NDVIR, palette: palette, labels: labels,
  format: '%.0f', text: textProperties
});


var label = 'NDVI';
var scale = Map.getScale() * 2; // 修改颜色条带的尺寸
var geometryLabel = ee.Geometry.Point([114.71,33.64],'EPSG:4326');  


// 将渐变条和标签图像添加到 NDVI 图像.
var rgbVis =col.map(function(img) {
  var y = ee.Number(img.get("year")).toInt()
  var m = ee.Number(img.get("month")).toInt()
  var label = ee.String(y).cat("-").cat(m)
  var text = txt.draw(label, geometryLabel, scale, {fontSize: 24});//此处修改时间字体
  return img.visualize(ndviVisParams).clip(yellowRiver).blend(gradientBar).blend(text);
});
 

// 定义 GIF 可视化参数
var gifParams = {
  'region': yellowRiver.geometry(),
  'dimensions': 450,
  'crs': 'EPSG:4326',
  'framesPerSecond': 2,
  'format': 'gif'
};
//------------step3 GIF显示-------------//
// 将GIF打印到控制台
print(rgbVis.getVideoThumbURL(gifParams));

// // 在控制台中渲染 GIF 动画
print(ui.Thumbnail(rgbVis, gifParams));

由于黄河区域较大,且云平台对像素点位有设限,因此设置色素分辨率为<450 或降低帧率
使用MODIS数据集结果如下图:
在这里插入图片描述

在这里插入图片描述
使用LandSat计算生成数据集结果如下图
在这里插入图片描述


三. 高程模型DEM实现



// 设置地图中心
Map.centerObject(yellow_river_DEM, 6); // 自动定位到黄河中心区域,具体级别可能需要调整
// 蓝色 < 1000m
// 深绿色 1000~2000
// 亮绿色,2000~3000
// 暗棕色,3000~4000
// 橙色,4000~5000
// 红色,>5000
var elevationVis = {
  min: 0,
  max: 6000,
  palette: ['#8ab4f8','#006633', '#E5FFCC', '#662A00', '#FFAA00', '#FF0000'],
};
Map.addLayer(yellow_river_DEM, elevationVis, 'SRTM DEM');



// 图例
//添加图例方式封装成为了一个方法
//palette: 颜色列表
//names: 图例说明列表
function addLegend(palette, names) {
 //图例的底层Panel
 var legend = ui.Panel({
   style: {
     position: 'bottom-right',
     padding: '5px 10px'
   }
 });
 //图例标题
 var title = ui.Label({
   value: 'Classification',
   style: {
     fontWeight: 'bold',
     color: "red",
     fontSize: '16px'
   }
 });
 legend.add(title);

 //添加每一列图例颜色以及说明
 var addLegendLabel = function(color, name) {
       var showColor = ui.Label({
         style: {
           backgroundColor: color,
           padding: '8px',
           margin: '0 0 4px 0'
         }
       });


       var desc = ui.Label({
         value: name,
         style: {margin: '0 0 4px 8px'}
       });
     //颜色和说明是水平放置
       return ui.Panel({
         widgets: [showColor, desc],
         layout: ui.Panel.Layout.Flow('horizontal')
       });
 };

 //添加所有的图例列表

 for (var i = 0; i < palette.length; i++) {
   var label = addLegendLabel(palette[i], names[i]);
   legend.add(label);
 }  

 Map.add(legend);
}

var palette = elevationVis.palette;
var names = ["<1000m","1000m~2000m","2000m~3000m","3000m~4000m","4000m~5000m",">5000m"];
//添加图例
addLegend(palette, names);

在这里插入图片描述


四. 时序图

// 黄河范围
var scope_yellow_river_basin_shp = 'projects/ee-w782353676/assets/yellow-river'
var roi = ee.FeatureCollection(scope_yellow_river_basin_shp)

var start_year = 2000
var end_year = 2020
// ======= modis数据集 ========
var dataSet_modis = "MODIS/061/MOD13A1" // MOD13A1.061 Terra Vegetation Indices 16-Day Global 500m 
 
function getDataSet(image){
  return ee.ImageCollection(image)
    .filterDate(start_year + '-01-01', end_year + '-12-31') // 筛选出指定时间的影像 
    .filterBounds(roi) // 筛选出指定范围的影像
}
var dataSet = getDataSet(dataSet_modis).select('NDVI').map(function(image){
                       return image.multiply(0.0001).set(image.toDictionary(image.propertyNames()))
                     })

//绘制由全区域每景图像NDVI平均值构成的曲线图
print(ui.Chart.image.series({
    imageCollection: dataSet,
    region: roi,
    reducer: ee.Reducer.mean(),
    scale: 1000
    }).setOptions({
      interpolateNulls: true,
      lineWidth: 2,
      title: 'NDVI_totalregion',
      vAxis: {title: 'NDVI'}, //viewWindow: {min: 0, max: 0.3}调整坐标轴上下限
      hAxis: {title: 'Date'},
      trendlines: { 0: {title: 'NDVI_trend',type:'linear', showR2: true,  color:'red', visibleInLegend: true}} //添加趋势线
    }));

在这里插入图片描述

五. 植被覆盖类型

var scope_yellow_river_basin_shp = 'projects/ee-w782353676/assets/yellow-river'
var roi = ee.FeatureCollection(scope_yellow_river_basin_shp)


var start_year = 2001
var end_year = 2020
function getDataSet(image){
  return ee.ImageCollection(image)
                .filterDate(start_year + '-01-01', end_year + '-12-31') // 筛选出指定时间的影像 
                .filterBounds(roi);// 筛选出指定范围的影像;
}
var dataSet = getDataSet('MODIS/061/MCD12Q1').map(function(image){
  return image.clip(roi)
})
var igbpLandCover = dataSet.select('LC_Type1');
var igbpLandCoverVis = {
  min: 1.0,
  max: 17.0,
  palette: [
    '05450a', '086a10', '54a708', '78d203', '009900', 'c6b044', 'dcd159',
    'dade48', 'fbff13', 'b6ff05', '27ff87', 'c24f44', 'a5a5a5', 'ff6d4c',
    '69fff8', 'f9ffa4', '1c0dff'
  ],
};
// 设置地图中心
Map.centerObject(roi, 6); // 自动定位到黄河中心区域,具体级别可能需要调整
Map.addLayer(igbpLandCover.mean(), igbpLandCoverVis, 'IGBP 植被覆盖类型');

在这里插入图片描述
在这里插入图片描述

六. 参考文献

MODIS NDVI Times Series Animation
GEE下制作带图例的NDVI时间序列GIF

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1629310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于springboot内置tomcat最大请求数配置的一些问题

前言 springboot内置了tomcat。那么一个springboot web应用&#xff0c;最大的请求链接数是多少呢&#xff1f;很早以前就知道这个是有个配置&#xff0c;需要的时候&#xff0c;百度一下即可。但&#xff0c;事实并非如此&#xff0c;有几个问题我想大多数人还真不知道。比如…

机械图纸管理系统,如何选择适合的机械图纸管理系统?

机械图纸管理系统是一种专门用于管理和跟踪机械制造过程中的图纸、设计文件和相关信息的软件系统。例如&#xff1a;彩虹图纸管理系统&#xff0c;这种系统能够有效地整合和管理工程图纸、零部件清单、技术规范、工艺流程等各种数据&#xff0c;为企业提供全面的图纸管理和协作…

typescript:vscode的settings配置文件配置ts语法提示

typescript&#xff1a;vscode的settings配置文件配置ts语法提示 1 找到vscode左下角的齿轮按钮 2 点击Settings&#xff08;或者快捷键ctrl,&#xff09;&#xff1a; 点击右上角的Open Settings(JSON)按钮打开配置文件&#xff1a; 或者ctrlshiftp&#xff0c;搜索settings&…

嵌入式全栈开发学习笔记---Linux基本命令1

目录 cd加路径 相对路径是什么 绝对路径是什么 cd后面没有路径 cd- ls -l ls -a ls -al ls加路径 Linux的命令是数不清的&#xff0c;就像很多应用软件一样&#xff0c;随时都有可能被开发出来。 但是我们目前阶段只需要掌握基本的命令就可以了。 上一篇博文中我已经…

元宇宙APP搭建重点,会用到哪些三方服务?

元宇宙APP的搭建是一个综合性的项目&#xff0c;涉及到众多关键要素和第三方服务。以下是一些元宇宙APP搭建的重点&#xff0c;以及可能用到的第三方服务&#xff1a; 一、搭建重点 技术框架的选择与搭建&#xff1a;元宇宙APP需要稳定、高效的技术框架来支撑其运行。这包括前…

插入排序,搞起来,一路狂奔,数组插入

一点喽 目录 编程实现&#xff1a;程序功能是在一个有序序列中插入一个数后&#xff0c;该数列依然有序 输入测试数据&#xff1a;2 3 5 7 8 23 34 56 78 90 25 程序运行结果&#xff1a;插入之后的数组为 2 3 5 7 8 23 25 34 56 78 90 第一个就…

如何增强交友、婚恋平台、金融等平台的安全性

运营商二要素核验是一种数字身份验证方法&#xff0c;主要使用用户的手机号码和姓名作为核验要素。这两个要素被认为是最基本的用户身份信息&#xff0c;通过运营商的数据库来核实其真实性。 在实际操作中&#xff0c;用户需要提供手机号码和姓名进行验证。应用系统会调用接口…

unity的特性AttriBute详解

unity的特性AttriBute曾经令我大为头疼。因为不动使用的法则&#xff0c;但是教程都是直接就写&#xff0c;卡住就不能继续学下去。令我每一次看到&#xff0c;直接不敢看了。 今天使用文心一言搜索一番&#xff0c;发现&#xff0c;恐惧都是自己想象的&#xff0c;实际上这个…

Docker之存储配置与管理

一、容器本地配置与Docker存储驱动 每个容器都被自动分配了本地存储&#xff0c;也就是内部存储。容器由一个可写容器层和若干只读镜像层组成&#xff0c;容器的数据就存放在这些层中。 容器本地存储采用的是联合文件系统。这种文件系统将其他文件系统合并到一个联合挂载点&a…

Unity类银河恶魔城学习记录15-5,6 p157 Audio time limiter p158 Area sound

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili​​ AreaSound.cs using System.Collections; using System.Collections.G…

Spring boot + Redis + Spring Cache 实现缓存

学习 Redis 的 value 有 5 种常用的数据结构 Redis 存储的是 key-value 结构的数据。key 是字符串类型&#xff0c;value 有 5 种常用的数据结构&#xff1a; Redis 的图形化工具 Another Redis Desktop Manager Spring Data Redis Redis 的 Java 客户端。 Spring Cache Spr…

Pycharm新建工程时使用Python自带解释器的方法

Pycharm新建工程时使用Python自带解释器的方法 新建Project时最好不要新建Python解释器&#xff0c;实践证明&#xff0c;自己新建的Python解释器容易出现各种意想不到的问题。 那么怎样使用Python安装时自带的解释器呢&#xff1f; 看下面的三张截图大家就清楚了。 我的Pyth…

avl excite python二次开发1--python解释器需用内置解释器aws_cmd

avl excite python二次开发1--python解释器需用内置解释器aws_cmd 1、python解释器问题1.1、用外置python解释器&#xff0c;import WSInterface会失败(WSInterface.pyd)1.2、用内置解释器aws_cmd运行py脚本1.3 用内置解释器aws_python执行脚本三级目录 1、python解释器问题 1…

Python_AI库 matplotlib扩展知识

Python_AI库 matplotlib扩展知识 在数据分析和处理的领域里&#xff0c;可视化是一种不可或缺的手段。通过图形化的展示&#xff0c;我们可以更直观地理解数据的分布、趋势和关系。而matplotlib&#xff0c;作为Python中最为流行的数据可视化库之一&#xff0c;以其强大的功能…

Anti Rookit -- 检测隐藏进程

Anti Rookit 一&#xff1a;检测隐藏进程 引言 检测隐藏进程除了众所周知的枚举进程ID之外&#xff0c;还有枚举句柄表的方式。不过今天给大家带来的是第三种方法。 探究 应用层通过接口 C r e a t e P r o c e s s \textcolor{cornflowerblue}{CreateProcess} CreateProcess…

分布式与一致性协议之Paxos算法(二)

Paxos算法 如何达成共识 想象这样一个场景&#xff0c;某地出现突发事件&#xff0c;当地村委会、负责人等在积极研究和搜集解决该事件的解决方案&#xff0c;你也决定参与其中&#xff0c;提交提案&#xff0c;建议一些解决方法。为了和其他村民的提案做区分&#xff0c;你的…

Stability AI 推出稳定音频 2.0:为创作者提供先进的 AI 生成音频 - Circle 阅读助手

概述 Stability AI 的发布再次突破了创新的界限。这一尖端模型以其前身的成功为基础&#xff0c;引入了一系列突破性的功能&#xff0c;有望彻底改变艺术家和音乐家创建和操作音频内容的方式。 Stable Audio 2.0 代表了人工智能生成音频发展的一个重要里程碑&#xff0c;为质量…

【golang学习之旅】Go的 switch 分支语句

系列文章 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】Go 的循环结构 【golang学习之旅】Go里面 if 条件判断语句 目录 系列文章switch 分支fallthrough 关键字无条件 switch switch 分支 有些时候需…

前端框架编译器之模板编译

编译原理概述 编译原理&#xff1a;是计算机科学的一个分支&#xff0c;研究如何将 高级程序语言 转换为 计算机可执行的目标代码 的技术和理论。 高级程序语言&#xff1a;Python、Java、JavaScript、TypeScript、C、C、Go 等。计算机可执行的目标代码&#xff1a;机器码、汇…

如何使用 Internet Download Manager (IDM) 来加速和优化你的下载体验 IDM 6.41下载神器

在当今信息爆炸的时代&#xff0c;下载文件和媒体内容已成为我们日常生活的一部分。无论是工作学习还是娱乐休闲&#xff0c;我们都需要从互联网上下载各种资源。为了提高下载效率和确保文件完整性&#xff0c;选择一款优秀的下载管理软件至关重要。Internet Download Manager …