GEE必须会教程—影像数据的区间赋值、插值与比较筛选

影像数据的操作方法比较多,学到今天,至少我们已经学会了如何定义一个影像,以及如何利用Image封装的函数方法进行操作。接下来,我们继续看Image的影像操作方法。

A.定义波段的数据格式

在编程语言中,我们需要根据数据的特点和应用场景选择恰当的数据格式,是浮点类还是整型?是双精度还是文本型?接下来,举个例子:

//栅格的波段数据格式转换
var collection = ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA");
var Image = ee.Image(collection.filterBounds(ee.Geometry.Point([116.36,29.13])).first().slice(1,4).unitScale(0,32468));
var castImage = Image.cast({"B2":"double","B3":"long","B4":"float"},["B2","B3","B4"]);
print("Image:",Image,"castImage",castImage);

此处小编想把L8的T1_TOA部分的波段数据格式改成自己想要的数据格式,一般的数据格式默认是浮点型(float),小编选三个连续的波段,怎么选?这里要用到前面分享过的波段切片方法(slice),同时进行像素值范围的变换(后面专门解释),得到包含目标波段的影像。

为了完成目标,使用cast(bandType,bandList)可以达到想要的效果,该方法共有两个主参数,前面用字典类型告知GEE,你要把哪几个波段转化为哪个数据格式,后者用列表形式对波段进行排序,如此便能够得到按照一定顺序排列的经过调整的波段格式。结果如下:

B.改变栅格的数据属性

//栅格的属性改写
var collection1 = ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA");
var Image1 = ee.Image(collection.filterBounds(ee.Geometry.Point([116.36,29.13])).first().set("note","this image is a training image").setMulti({"date":"2024-03-01","location":"Poyang Lake"}));
print("Image1",Image1); 

栅格数据的属性改写涉及单个属性时,采用set(name,content),即可将属性名称是name的content进行改写,如果要进行多个属性的改写,采用setMulti方法,在参数中利用{....}符号将多组属性名称和内容一一写入。小编在上述代码中演示了向Image中队note,date,location三个属性名称对应的内容进行改写,得到的结果如下:

C.栅格重绘方法

今天第三个要分享的操作方法是remap方法,该方法有些类似于ArcGIS里面的Reclass,即重分类工具,它能够将原来的值范围重新映射为一个新的范围,可以用于土地覆被的改变。举个例子:

//栅格的值Remap,相当于ArcGIS中的重分类
var oldID = ee.List([11,14,20,30,40,50,60,70,90,100,110,120,130,140,150,160,170,180,190,200,210,220,230]);
var newID = ee.List([0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,4,4,4,5,5,6,7,8]);
var LandCover = ee.Image("ESA/GLOBCOVER_L4_200901_200912_V2_3").select("landcover");
var remap = LandCover.remap(oldID,newID,8,"landcover");
Map.addLayer(LandCover,{},"LandCover");
var palettes = require('users/gena/packages:palettes');
Map.addLayer(remap,{palette:palettes.colorbrewer.Set3[9]},"remap");

上面的例子实现了ESA的土地覆盖数据的重新分类,将原来影像数据的id号对应的覆盖类型进行重新归类,用0-8代表9类地表覆盖类型,remap(from,to,defaultvalue,name),共有四个参数,第一个参数是原影像土地覆盖类型对应的值,第二个参数是要映射的新的值,都用列表进行存储,第三个参数如果在’第一个参数’中没有匹配到值可以使用默认值来替代。如果没有指定默认值,未匹配到的值将被屏蔽掉。第四个参数是波段名称,最终得到的结果如下:

D.栅格的区间赋值

区间赋值指的是将某一个区间的值赋值为一个数,常常用来实现栅格重分类的目的。

//栅格的区间赋值
var DEM = ee.Image("USGS/SRTMGL1_003");
var landcover = ee.Image("ESA/GLOBCOVER_L4_200901_200912_V2_3").select("landcover");
var highLand = landcover.where(DEM.lt(4500),0);
Map.setCenter(84.96,28.53);
Map.addLayer(DEM.lt(4500));
Map.addLayer(highLand);

栅格区间赋值一般用到where函数,此处首先调用了两个数据,接着利用where方法将DEM小于4500的地方夫赋值为0,换言之,本代码筛选出数字高程小于4500的区域,并将这些区域的地表覆盖值设为0。区间赋值前后结果对比如下:(上图展示的筛选出来的DEM小于4500的区域,白色部分,海拔标注为1,非4500m的赋值为0,下图是区间赋值结果,青藏高原部分保留了原有的landcover,而黑色部分landcover已经赋值为0)

E.栅格的区间截取

区间截取就是将整个区域的值限定在一个范围内,大于最大值的通常以最大值处理,小于最小值的以一律赋值最小值,举例如下:

//栅格的区间截取
var DEM = ee.Image("USGS/SRTMGL1_003");
var DEM_Clamp = DEM.clamp(1000,3000);
Map.addLayer(DEM_Clamp);

区间截取采用的命令是clamp方法,这里选取的是1000和3000作为阈值,大于3000的都会被赋值为3000,小于1000的,都以1000处理,得到的结果如下:

F.栅格的插值

栅格的插值指的是根据已知点的值推测未知点的值的一种方法,接下来我们举个例子:

//栅格的插值
var province = ee.FeatureCollection("users/hesuixinya511/Province");
function provincecenter(feature){return ee.Geometry(feature.centroid())}
var Center = province.map(provincecenter);
var distance = Center.distance(160000);
var interpolate = distance.interpolate([0,40000,80000,120000,160000],[0,25,50,75,100],"extrapolate");
Map.centerObject(Center,4);
Map.addLayer(distance,{min:0,max:160000},"origin");
Map.addLayer(interpolate,{min:0,max:100},"interpolate");
Map.addLayer(Center,{color:"FF0000"},"centers");

此处小编首先调用自主上传的矢量数据集合,接着定义函数求取每一个省份的中心点,生成Center这个新的矢量集合,接着利用distance定义了一个从举中心点160000m的距离,利用interpolate方法进行插值方法,给定距离0m,40000m,80000m.....对应的数值0,25,50......,使用的extrapolate即外推的方法,根据距离的范围和对应的数值范围,生成一个新的插值结果。并且进行可视化的显示,得到最终结果。

G.栅格的比较筛选

栅格比较筛选,通过等于(eq)、不等于(neq)、大于(gt)、小于(lt)、大于等于(gte)、小于等于(lte)方法实现栅格的比较筛选,得到用户想要栅格。举例如下:

//栅格的比较筛选
var province1 = ee.FeatureCollection("users/hesuixinya511/Province");
var Light = ee.Image("NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182013").select("stable_lights").clip(province1);
var Urban_Lights = Light.gte(20);
Map.setCenter(121.44,31.19);
Map.addLayer(Urban_Lights,{"opacity":0.33,"bands":["stable_lights"],"palette":["404040","FFFF00"]},"Urban_Lights");

此处小编调用夜间灯光数据,想筛选稳定光源像素值大于等于20的地区作为结果,并最终进行显示,调用NOAA的数据后,进行波段筛选,利用gte得到最终结果。

H.栅格的逻辑运算

栅格的逻辑运算用于多类型的栅格数据筛选,用于解决既满足...,又满足....,或满足.....,或满足......等问题,举个例子:

//栅格的逻辑运算
var province2 = ee.FeatureCollection("users/hesuixinya511/Province");
var Light = ee.Image("NOAA/DMSP-OLS/NIGHTTIME_LIGHTS/F182013").select("stable_lights").clip(province2);
var Urban_Lights1 = Light.gte(20);
var DEM2 = ee.Image("USGS/SRTMGL1_003").lt(200).clip(province2);
var UrbanDEM = Urban_Lights1.and(DEM2);
print(DEM2);
Map.setCenter(108.14,34.79,4);
Map.addLayer(Light);
Map.addLayer(DEM2);
Map.addLayer(UrbanDEM);

前面的代码和上一段类似,都是队灯光强度大于20的地方进行筛选,接着小编调用DEM数据,以200作为阈值,筛选出中国区域数字高程在200m以下的地区,而后,利用and函数,即和运算,计算同时满足灯光强度大于等于20和地形高度小于200的区域。最后进行图像可视化,结果如下:

由图可以看出,稳定灯光强度大于等于20,海拔较低的地区大部分处于我国的东部地区,侧面印证了东部地区的经济和城市化的扩张。

好了,今天的影像数据的处理方法分享到这里,如果对你有帮助,不要忘记给小编点赞哦!!你的支持是我持续更新的动力,谢谢喽!

更多内容,欢迎关注小编的公众号“梧桐凉月”,GEE学习之路不易,大家一直加油!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新王炸:文生视频Sora模型发布,能否引爆AI芯片热潮

前言 前方高能预警,Sora来袭! 浅析Sora的技术亮点 语言模型中构建关键词联系 视频素材分解为时空碎片 扩散模型DiT Not for play, But change world! OpenAI的宏大目标 未来已来,只是尚未流行 Sora的成本与OpenAI的7万亿美金豪赌 算…

【Java设计模式】二、单例模式

文章目录 0、单例模式1、饿汉式2、懒汉式3、双重检查4、静态内部类5、枚举6、单例模式的破坏:序列化和反序列化7、单例模式的破坏:反射8、单例模式的实际应用 设计模式即总结出来的一些最佳实现。GoF(四人组) 书中提到23种设计模式,可分为三大…

阿里云降价!云数据库277元一年,价格下调折扣对照表

2024年阿里云百款产品直降,平均降幅20%,不只是云服务器,也包括云数据库,云数据库涉及产品RDS(MySQL、PostgreSQL、MariaDB)、Redis社区版、MongoDB、ClickHouse社区兼容版。阿里云百科aliyunbaike.com分享阿…

使用Docker搭建一款实用的个人IT工具箱——It-Tools

作为程序员,在日常工作中,需要借助一些工具来提高我们工作效率,IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能,使开发者能以更高效方式完成任务。经由IT-Tools,开发人员能轻松应对各类技术挑战&…

【GPU驱动开发】- AST简介

前言 不必害怕未知,无需恐惧犯错,做一个Creator! AST,抽象语法树,是一种包含丰富语义信息的格式,其中包括类型、表达式树和符号等。 TranslationUnitDecl:该类表示一个输入源文件 ASTContext&…

ssm656基于JAVA的校园失物招领平台的设计与实现

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一 、设计说明 1.1 课题…

oracle11安装及使用

安装oracle11 官网下载地址 Oracle Database 11g Release 2 for Microsoft Windows (x64) 官网下载慢可访问我的资源 也可以网盘获取 链接:https://pan.baidu.com/s/1RDrGkqDA7tfKRnpJXUBMDw 提取码:z3na 上传安装包到服务器 在指定目录下创建文件…

【算法】最小生成树—Prim算法与Kruskal算法

Prim算法和Kruskal算法都是解决最小生成树问题的经典算法。最小生成树是原图的最小连通子图,它包含原图的全部结点,且保持图连通的所有边代价和最小。一个连通图可能有多个最小生成树。 一、Prim算法 含义 Prim算法,也被称为普里姆算法&…

CSS技巧:实现两个div在同一行显示的方法

css如何让两个div在同一行显示 - web开发 - 亿速云 在Web开发中,经常遇到需要将多个元素水平排列在同一行的情况。其中一个常见的需求是将两个div元素放置在同一行上,使它们并排显示。在本文中,我们将介绍几种实现这一效果的CSS方法。 1. 使…

多模态论文阅读-LLaVA

Visual Instruction Tuning Abstract1. Introduction2. Related Work3. GPT-assisted Visual Instruction Data Generation4. Visual Instruction Tuning4.1 Architecture4.2 Training 5 Experiments5.1 Multimodal Chatchot5.2 ScienceQA 6 Conclusion Abstract 使用机器生成…

韦东山嵌入式Liunx入门驱动开发四

文章目录 一、异常与中断的概念及处理流程1-1 中断的引入1-2 栈(1) CPU实现a ab的过程(2) 进程与线程 1-3 Linux系统对中断处理的演进1-4 Linux 中断系统中的重要数据结构(1) irq_desc 结构体(2) irqaction 结构体(3) irq_data 结构体(4) irq_domain 结构体(5) irq_domain 结构…

十二、Qt自定义Widget组件、静态库与动态库

一、自定义Widget组件 1、自定义Widget组件 使用步骤采用提升法(promotion)重新定义paintEvent事件 2、实现程序 (1)创建项目,基于QWidget (2)添加类,为Widget组件提升类 #inclu…