2.GEE重要概念——Image ImageCollection
2.1 image
ee.Iamge()
GEE的影像信息主要有三部分:1.影像的ID;2.影像的版本号;3.波段列表和属性信息。
1.ID是查找影像的唯一标识;
2.波段列表记录了影像的所有波段信息,(包括类型,投影,影像的宽高等);
3.属性记录了影像的基本信息,拍摄日期、轨道号、对应存储的ID、云量等。
example1:加载一张landsat图像并显示
var image = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_123037_20180611");
Map.centerObject(image, 7);
print(image);
Map.addLayer(image)//默认加载第一个波段
var visParams= {bands: ['B5', 'B4', 'B3'], min: 5000, max: 15000, gamma: 1.3};
Map.centerObject(image, 7);
Map.addLayer(image.select('B1'),{min:0,max:0.3},"B1")
Map.addLayer(image.select('B2'),{min:0,max:0.3},"B2")
Map.addLayer(image,visParams,"RGB")
//Map.addLayer(image,{min:0,max:0.3,bands:["B4","B3","B2"]},"RGB")等效
example2:筛选出某地区某时段内云量最少的Landsat 8影像并显示出来
var point = ee.Geometry.Point(117.089, 36.744);
var start= ee.Date('2020-08-01');
var finish = ee.Date('2020-09-01');
// 云量筛选
var img = ee.ImageCollection('LANDSAT/LC08/C01/T1')
.filterBounds(point)
.filterDate(start, finish)
.sort('CLOUD_COVER', true)
.first()
var vizParams = {bands: ['B5', 'B4', 'B3'], min: 5000, max: 15000, gamma: 1.3};
Map.centerObject(img, 7);
Map.addLayer(img, vizParams, 'Landsat 8 false color');
example3:图像运算,以计算NDVI为例,给出三种方法:
波段之间的加法运算,以及创建像素的经纬度变量(不知道我为什么放在这块)
var Image_1 = ee.Image(10);
var Image_2 = ee.Image(20);
var Image_3 = Image_1.add(Image_2);
print(Image_1, Image_2, Image_3);
var Image_Lon_Lat = ee.Image.pixelLonLat(); //创建具有两个名为“经度”和“纬度”波段的图像,其中包含每个像素处的经度和纬度(以度数表示)。
print(Image_Lon_Lat);
Map.addLayer(Image_Lon_Lat,{bands:['longitude'],min:-180,max:180},'Longitude');
Map.addLayer(Image_Lon_Lat,{bands:['latitude'],min:-60,max:60},'latitude');
Map.setCenter(0,0,3);
var image = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_123037_20180611");
//第一种,不推荐
var ndvi_1 = image.select('B5').subtract(image.select('B4')).divide(image.select('B5').add(image.select('B4')));
//第二种,仅适合归一化
var ndvi_2 = image.normalizedDifference(['B5','B4'])
//第三种,合适
var ndvi_3 = image.expression('(NIR-RED)/(NIR+RED)',
{'NIR':image.select('B5'),
'RED':image.select('B4')
});
var visParam = {min:-1, max:1, palette:['0000FF','FF0000']};
Map.centerObject(image,7)
Map.addLayer(ndvi_1,visParam,'ndvi_1');
Map.addLayer(ndvi_2,visParam,'ndvi_2');
Map.addLayer(ndvi_3,visParam,'ndvi_3');
Image常用命令查询:
命令 | 含义 |
---|---|
Image.mask() | 创建一个数组图像,其中每个数组值像素被另一个数组值像素遮盖,只保留遮盖非零的元素。如果掩模图像有一个波段,它将被应用到“输入”的所有波段,否则它们必须有相同数量的波段。 |
Image.clip() | 用几何图形或矢量裁剪图像。 |
Image.select() | 从图像中选择波段。返回带有选定波段的图像。 |
Image.slice() | 按位置从图像中选择一组相邻的频带。 |
Image.rgbToHsv() | 将图像从RGB颜色空间转换到HSV颜色空间。期望在[0,1]范围内的3波段图像,并产生三个波段:色调、饱和度和值,值在[0,1]范围内。 |
Image.hsvToRgb() | 将图像从HSV颜色空间转换为RGB颜色空间。期望在[0,1]范围内的3波段图像,并产生三个波段:红、绿、蓝,其值在[0,1]范围内。 |
展示为Image.rgbToHsv()和 Image.hsvToRgb()的应用,没啥大作用。
var L8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_RT');
var L8_One = ee.Image(L8.filterBounds(ee.Geometry.Point(108.9354, 34.3398))
.first()).slice(2,5).unitScale(0,32468);
var L8_HSV = L8_One.rgbToHsv()
var L8_RGB = L8_One.hsvToRgb()
print(L8_One,L8_HSV,L8_RGB)
Map.setCenter(108.9354, 34.3398)
Map.addLayer(L8_One,{},'Origin');
Map.addLayer(L8_HSV,{},'HSV');
Map.addLayer(L8_RGB,{},'RGB');
2.2 imageCollection
ee.IamgeCollection()
下面是一个输出影像集合的例子:
var imgCol = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA').limit(10);
print(imgCol);
//这块的.limit(10)是因为gee只能打印不超过5000张影像,而一个集合往往超出,使用要加以限制。
2.3综合应用
example1:显示山西省Landsat影像(以中心点形式)的可获得情况
var shanxi = province.filter(ee.Filter.eq('PINYIN_NAM','Shanxi'));
Map.addLayer(shanxi);
// This function returns the image centroid as a new Feature.
var getGeom = function(image) {
return ee.Feature(image.geometry().centroid(), {foo: 1});
}; //在该区域的遥感影像的中心点
// Load a Landsat 8 collection.
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
// .filterBounds(ee.Geometry.Point(-122.262, 37.8719))
.filterDate('2020-07-01', '2020-08-01')
.filterBounds(shanxi)
// Map the function over the ImageCollection.
var featureCollection = ee.FeatureCollection(collection.map(getGeom));
// Print the collection.
print(featureCollection);
Map.addLayer(featureCollection)
example2:综合例子,
代码链接:https://code.earthengine.google.com/ce4aebb5b8ffc68ba717a27a3e3fcdc5
var roi = ee.Geometry.Point([116.29780273437495, 39.64351217797058]);
Map.centerObject(roi, 7);
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA");
//1.filter的使用
var scol = l8.filterBounds(roi)
.filterDate("2017-4-1", "2017-6-1")
.filter(ee.Filter.lt("CLOUD_COVER", 5))
.map(function(image) {
var ndvi = image.normalizedDifference(["B5", "B4"]); //2.计算NDVI
return image.addBands(ndvi.rename("NDVI"));
});
print("scol", scol);
//reducer计算最大值
var ndvi = scol.select("NDVI").reduce(ee.Reducer.max());
var ndviVis = {
min: 0,
max: 0.8,
palette: 'FFFFFF, CE7E45, DF923D, F1B555, FCD163, 99B718, 74A901,'+
'66A000, 529400, 3E8601, 207401, 056201, 004C00, 023B01,'+
'012E01, 011D01, 011301',
};
Map.addLayer(ndvi, ndviVis, "NDVI");