Google Earth Engine/GEE学习心得(二)

您所在的位置:网站首页 gee重采样到度 Google Earth Engine/GEE学习心得(二)

Google Earth Engine/GEE学习心得(二)

2024-07-14 08:46| 来源: 网络整理| 查看: 265

GEE的API(应用程序编程接口)介绍(上)

介绍

介绍一下Google Earth Engine JavaScript API。在使用GEE之前,一定要注册账号(可以使用学校的邮箱,比较好通过)。操作主要在GEE Code Editor界面,这是一个网页,在网页上集成了开发环境。

图像和图像波段的可视化

废话不多说,直接上代码:

// Instantiate an image with the Image Constructor.用之前学到的ee.Image()函数创造一个image实例 var image = ee.Image('CGIAR/SRTM90_V4'); // Zoom to a location.放大到目标地点,参数9的意思是缩放等级,越大意味着放大(zoom in)的越厉害。 Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon. // Display the image on the map. Map.addLayer(image);

之后点击代码界面上方Run按钮执行程序,在下方的地图界面可以看到展示的图像。ee.Image()函数中的参数是图像的字符串形式的ID(可以在GEE data catalog中查询)。

Image构造函数:

使用GEE data catalog来查找ID,可以粘贴这个ID,也可以点击旁边的Import按钮创造一个连接,在代码界面的最上方会有一个Import输出项

操作地图:

使用Map.setCenter()方法来设置地图展示的中心,参数是经纬度(以小数形式表示)和缩放等级(1级就是最大的全球尺度)

给地图添加图层(layer):

使用Map.addLayer()方法来添加图层

GEE中的图像:

GEE中的每个图像都由一到多个波段组成,每个波段都有name,pixel values(像素的值),pixel resolution(像素分辨率),和projection(投影)这四个属性。当使用Map.setCenter()方法来添加图像时,需要设置如何显示:如果是单一波段,就显示其灰度值(最小值黑色,最大值白色)(默认值如下:int整形范围为[-32768, 32767];float浮点型拉伸到[0,1];byte比特拉伸到[0,255])。通过打印image这个变量,在console控制台会出现一个object,可以查看其各个属性。

改变图层显示方式:

通过添加Map.setCenter()方法中的另一个参数visParams(数据类型为object)来自定义图层的显示方式。可以拉伸像素值的最大最小值(可以改变图像对比度);Map.setCenter()方法的第三个参数是图层的名字(字符串)。

通过添加向参数visParams添加palette(调色盘)属性(数据类型为list)给单一波段加颜色

调色盘(Palettes):

调色盘通过一个颜色列表来线性的/渐变的给像素值一个颜色。这个颜色用的是CSS方案,可以直接给定颜色的名字(比如blue)或者给出hexadecimal值(比如0000FF)

如:

//给定像素值的最大最小值来拉伸图像

Map.addLayer(image, {min: 0, max: 3000}, 'custom visualization');

//给单波段图像增加颜色,最小值蓝色,最大值红色,中间值线性绿色渐变

Map.addLayer(image, {min: 0, max: 3000, palette: ['blue', 'green', 'red']},     'custom palette');

对图像进行计算

在会加载展示图像后,我们可以进行计算,例如计算地面坡度,可以使用ee.Terrain中的slope()方法。

图像数学:

ee.Image类中也有大量的计算方法,例如可以用不同波段来计算(band math or map algebra),其中可以用sin()方法进行三角函数计算,使用add(), subtract(), multiply()方法也可以进行相应计算。

图像统计:

通过使用ee.Reducer类来进行图像的统计计算。比如可以计算某一区域高程的平均值,可以通过多边形工具(polygon drawing tools)来选取区域,之后数字化(digitize)这个多边形,点击Exit按钮得到结果。代码界面的上方会出现自动出现import。

注意:此处的reduceRegion()是Image的一个方法,它的参数是一个列表,通过给出名字和对应的值,比如’ reducer’要给出要计算的统计量;’geometry’给出要计算的区域多边形;’scale’给出要计算的像素尺度(以m为单位),为避免混淆,尽量给出这个参数。该方法的返回值是一个字典数据,其中的关键字是波段名、对应的值是该波段的统计数据。需要根据关键字查找需要的值再继续下一步计算。

GEE中的尺度:

可以通过如下方法获得图像的默认分辨率var scale = srtm.projection().nominalScale();

如果设定的尺度低于图像默认分辨率,GEE会用最邻近法(nearest neighbor)进行重采样(resample);如果高于图像默认分辨率,GEE也会做出相应的处理。

如:

计算坡度:

// Load the SRTM image. var srtm = ee.Image('CGIAR/SRTM90_V4'); // Apply an algorithm to an image. var slope = ee.Terrain.slope(srtm); // Display the result. Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon. Map.addLayer(slope, {min: 0, max :60}, 'slope');

//计算三角函数:

// Get the aspect (in degrees). var aspect = ee.Terrain.aspect(srtm); // Convert to radians, compute the sin of the aspect.转化成弧度再计算 var sinImage = aspect.divide(180).multiply(Math.PI).sin(); // Display the result. Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');

//计算平均高程:

// Compute the mean elevation in the polygon. var meanDict = srtm.reduceRegion({   reducer: ee.Reducer.mean(),   geometry: polygon,   scale: 90 }); // Get the mean from the dictionary and print it. var mean = meanDict.get('elevation'); print('Mean elevation', mean);

图像集合(Image Collections)

图像集合代表了一系列GEE图像数据,每个图像都有ID,类似的,图像集合数据也有自己的ID,可以通过GEE Data Catalog来查找。

过滤图像集合数据(Filtering image Collections):

每个图像集合都包括该集合中所有的图像数据,当我们需要单一图像数据或者图像集合的子集合时,就需要使用过滤功能,来限制所需要的地点或时间。比如想要把图像限制在某一个区域,要先用点线面等工具(geometry drawing tools)给定研究区域,再进行相应的处理。之后可以使用print()方法来显示过滤后的图像数据,但是最多只能打印5000条数据。也可以通过右侧控制台的小三角来展开feature列表来查看图像数据。也可以进一步通过别的代码比如分类,来看感兴趣的数据

展示RGB图像:

GEE会默认使用多波段图像的前三个波段,按照红绿蓝的顺序拉伸像素值之后展示,默认图像看起来不太好看,需要根据所使用的卫星数据来调整显示的波段(比如Landsat 8的真彩色就是B4B3B2对应红绿蓝;假彩色就是B5B4B3对应红绿蓝),并给定合适的拉伸范围,

展示图像集合:

类似展示RGB图像,可以通过下面代码来展示图像集合,不同的是,展示图像集合时,只会展示最近的合成图像,所以有些地方看起来不连续,并且云比较多。

如:

//声明图像集合变量

var l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA');

//过滤图像

//需要在地图上手动标注一个点,并命名为point

var spatialFiltered = l8.filterBounds(point); print('spatialFiltered', spatialFiltered); var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31'); print('temporalFiltered', temporalFiltered);

// This will sort from least to most cloudy.按照云量从小到大分类 var sorted = temporalFiltered.sort('CLOUD_COVER'); // Get the first (least cloudy) image. var scene = sorted.first();

//展示默认的情况,这种情况下图像不太好看

Map.centerObject(scene, 9); Map.addLayer(scene, {}, 'default RGB');

//对参数进行一定的调整,优化图像,此处拉伸范围0-0.3即可

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3}; Map.addLayer(scene, visParams, 'true-color composite');

//展示图像集合,但是只会显示最近的图像

var l8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA'); var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31'); Map.addLayer(landsat2016, visParams, 'l8 collection');

合成,掩膜和拼接(Compositing, Masking, and Mosaicking)

使用Reducers合成影像:

接上文展示图像集合时,GEE展示了镶嵌过的最近的遥感影像,由于Landsat8采集数据的时间是16天,因此每个点实际有很多幅图像,但是展示图像集合的时候,只会展示最新的一幅图,可以通过Reducer来进行一些操作,比如使用median()方法来获取中位数,这样避免了高值的云,也避免了低值的阴影。此处使用的median()方法属于ee.Reducer()方法。

注意:此时对图像集合数据进行筛选时,输出数据是一幅图像,并非图像集合。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3