当前位置: 首页 > news >正文

PIE-engine 教程 ——影像集合的使用for循环函数(北京市NDVI计算)

上一次我们通过对北京市影像集合完成了对其NDVI的计算,这次我们同样换一个for循环的形式来实现NDVI的计算,大家可以找找差异,以下是上一篇文章的链接:

(931条消息) PIE-engine 教程 ——影像集合的使用map()映射函数(北京市NDVI计算)_此星光明的博客-CSDN博客

这里函数就不在介绍了,NDVI的计算公式就是:

NDVI——归一化植被指数:NDVI=(NIR-R)/(NIR+R),或两个波段反射率的计算。

1、NDVI的应用:检测植被生长状态、植被覆盖度和消除部分辐射误差等;

2、-1可见光高反射;0表示有岩石或裸土等,NIR和R近似相等;正值,表示有植被覆盖,且随覆盖度增大而增大;

3、NDVI的局限性表现在,用非线性拉伸的方式增强了NIR和R的反射率的对比度。对于同一幅图象,分别求RVI和NDVI时会发现,RVI值增加的速度高于NDVI增加速度,即NDVI对高植被区具有较低的灵敏度;

4、NDVI能反映出植物冠层的背景影响,如土壤、潮湿地面、雪、枯叶、粗糙度等,且与植被覆盖有关;

大家还记得之前发布for和map的区别吗?for循环需要准确知道我们要运行的次数,所以我们必须知道这个影像集合中有多少张影像需要我们遍历,我们用到的函数:

size()

获得影像集合中Image的个数。

方法参数:

- imageCollection(ImageCollection)

ImageCollection实例。

返回值:Number

mosaic()当我们要输出影像的时候(单张/景影像除外),必须要合成就会用到此函数

将影像集合融合成为一张影像Image,融合规则保留是这个影像集合中最新的有效像素值。

方法参数:

- imageCollection(ImageCollection)

ImageCollection实例。

返回值:Image

clip(geometry)

按照指定的矢量边界裁剪影像。除了未被几何覆盖的数据被掩盖之外,裁剪前后的影像波段完全对应。裁剪后影像保留裁剪前的元数据。

方法参数:

- image(Image)

Image实例。

- geometry(Feature|Geometry|Object)

裁剪使用的矢量边界。

返回值:Image

代码:

/**
 * @File    :   map-07-ImageCollection循环计算_使用for循环
 * @Time    :   2022/3/1
 * @Author  :   piesat
 * @Version :   1.0
 * @Contact :   400-890-0662
 * @License :   (C)Copyright 航天宏图信息技术股份有限公司
 * @Desc    :   取ImageCollection中的每个元素计算NDVI,采用for循环
 */

//加载北京市边界
var roi = pie.FeatureCollection("NGCC/CHINA_PROVINCE_BOUNDARY")
    .filter(pie.Filter.eq("name", "北京市"))
    .first()
    .geometry();
Map.centerObject(roi, 6);
Map.addLayer(roi, { color: "ff0000", fillColor: "00000000", width: 3 }, "北京市");

//按区域、时间筛选影像
var imgCol = pie.ImageCollection("LC08/01/T1")
    .filterBounds(roi)
    .filterDate("2019-8-01", "2019-8-30");
print("imgCol", imgCol);
Map.addLayer(imgCol.select(["B2", "B3", "B4"]).mosaic().clip(roi), { min: 0, max: 2500, bands: ["B4", "B3", "B2"] }, "imgCol", false);

//获取影像数量
var count = imgCol.size();
print(count);

//循环计算每景影像NDVI植被指数
var newCol = [];
for (i = 0; i <= 7; i++) {
    var image = imgCol.getAt(i);
    var nir = image.select("B5");
    var red = image.select("B4");
    var imgCol_NDVI = nir.subtract(red).divide(nir.add(red)).rename("NDVI");
    image = image.addBands(imgCol_NDVI);
    newCol.push(image);
}
var imgCol_new = pie.ImageCollection().fromImages(newCol);
print("imgCol_new", imgCol_new);

//NDVI绘制样式
var visParamNDVI = {
    min: -0.2,
    max: 0.8,
    palette: ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901',
        '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01',
        '012E01', '011D01', '011301']
};

//加载北京市NDVI植被指数
var NDVI = imgCol_new.select("NDVI").mosaic().clip(roi);
Map.addLayer(NDVI, visParamNDVI, "NDVI");

 大家始终记住一点,就是当我们在使用for循环的时候,如果要遍历,必须首先要获取影像或者矢量的id序列号,这时就会用到getAt这个功能。

getAt(index)

获得影像集合中指定编号的Image对象。

方法参数:

- imageCollection(ImageCollection)

ImageCollection实例。

- index(Number)

Image的编号

返回值:Image

 我们获得影像数量

 新增的NDVI影像波段值

 

相关文章:

  • 数据结构-栈和队列(1)
  • 【微服务】springboot 整合 dubbo3.0
  • c++迭代器STL中的vector简单概述
  • 不可重复读和幻读详解(必看!!!)
  • 2022eclipse下载安装与使用教程
  • 【云原生】zookeeper + kafka on k8s 环境部署
  • 【牛客刷题日记】— Javascript 通关秘籍
  • 深度学习项目部署遇到的错误【记录】
  • 解决无法获取到B站点赞数和播放量的解决办法
  • 【历史上的今天】9 月 19 日:世界上第一个表情符号;微软发布 Virtual PC;苹果 UI 扁平化的开始
  • lio-sam框架:后端里程计、回环、gps融合
  • 使用Eclipse创建一个简单的servlet项目
  • 【OpenCV】- 模板匹配(浩瀚星空只为寻找那一抹明月)
  • Python Apex Legends 武器自动识别与压枪 全过程记录
  • 程序里对象很深很大,可以用这个设计模式缓解一下
  • axios 和 cookie 的那些事
  • Fabric架构演变之路
  • java小心机(3)| 浅析finalize()
  • Java应用性能调优
  • Mac转Windows的拯救指南
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Python中eval与exec的使用及区别
  • ReactNativeweexDeviceOne对比
  • ViewService——一种保证客户端与服务端同步的方法
  • 分布式事物理论与实践
  • 漂亮刷新控件-iOS
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 线性表及其算法(java实现)
  • 正则与JS中的正则
  • 中文输入法与React文本输入框的问题与解决方案
  • 追踪解析 FutureTask 源码
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (04)odoo视图操作
  • (13)Hive调优——动态分区导致的小文件问题
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (四)事件系统
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .ai域名是什么后缀?
  • .md即markdown文件的基本常用编写语法
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 的程序集加载上下文
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [《百万宝贝》观后]To be or not to be?