目录
filterBounds()、filterDate()、filterMetadata()
常用 的影像集
- landsat8-(含有pixel_qa波段):ee.ImageCollection("LANDSAT/LC08/C01/T1_SR")
- 夜晚灯光:DMSP OLS: Nighttime Lights Time Series Version 4
- 世界人口:ee.ImageCollection('WorldPop/POP')
- 全球森林变化:ee.Image("UMD/hansen/global_forest_change_2019_v1_7")
limit()、first()
gee中在控制台对影像集最多存在5000条记录
limit函数用来限制显示记录的条数
由于ImageCollection中没有可以直接获取最后一个image的函数,此时可以通过将ImageCollection转为List,再使用ee.Reducer.last()即可得到最后一个Image,即ee.List(imgs.toList(5)).reduce(ee.Reducer.last())
filterBounds()、filterDate()、filterMetadata()
var sichuan = ee.FeatureCollection("users/lcljv1066965/test/sichuan"),
l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA");
var l8_filter=l8.filterDate('2018-01-01','2018-12-31')
.filterBounds(sichuan.geometry())
.filterMetadata("CLOUD_COVER","less_than",0.1)
print(l8_filter)
Map.centerObject(sichuan)
Map.addLayer(l8_filter,{bands:'B4,B3,B2',min:0,max:0.2},'img')
filterDate()中还可以直接传dataRange
var modis = ee.ImageCollection("MODIS/006/MOD09A1");
print(ee.DateRange('2005-01-01','2005-3-1'))
print(modis.filterDate(ee.DateRange('2005-01-01','2005-3-1')))
select()
提取波段
此外,还可以对提取出的波段重命名,如下
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA"),
geo_chengdu = /* color: #98ff00 */ee.Geometry.Point([104.0029791458729, 30.607084597847134]);
var l8_filter=l8.filterDate('2018-01-01','2018-12-31')
.filterBounds(geo_chengdu)
.limit(5)
var l8_select=l8_filter.select(["B5","B4","B3"],['Near infrared',"Red",'Green'])
print("l8_filter",l8_filter)
print("l8_select",l8_select)
map()
类似js中的map函数
map()函数中不能print
以计算ndvi为例:
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA");
var l8_select=l8.filterBounds(ee.Geometry.Point(106.5,29.6))
.filterDate("2018-01-01","2018-12-31")
.select("B[4,5]")
.limit(3)
function add_NDVI(image){
var NDVI=image.normalizedDifference(["B5","B4"]).rename("NDVI")
return image.addBands(NDVI)
}
var l8_ndvi=l8_select.map(add_NDVI)
print(l8_select,l8_ndvi)
获取影像集中的影像数量:size()
combine()
将2个数据集合并为1个数据集
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA"),
geo_chengdu = /* color: #98ff00 */ee.Geometry.Point([104.0029791458729, 30.607084597847134]);
var l8_filter=l8.filterDate('2018-01-01','2018-12-31')
.filterBounds(geo_chengdu)
.limit(1)
var combine_blue=l8_filter.select(["B2"],["Blue"])
var combine_red=l8_filter.select(["B4"],["Red"])
var combine=combine_blue.combine(combine_red)
print(combine_blue,combine_red,combine)
set()、setMulti()
设置属性
var l8_1 = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_001004_20140625"),
l8_2 = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_001004_20140524"),
l8_3 = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_001004_20140609");
var l8_collection=ee.ImageCollection([l8_1,l8_2,l8_3])
var setProperty=l8_collection.set('author','lijiang')
.setMulti({'create_time':2019,age:22})
print(setProperty)
mosaic()
影像融合
var l8_1 = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_127040_20180303"),
l8_2 = ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_128039_20130413");
var l8_collection=ee.ImageCollection([l8_1,l8_2])
var l8_mosaic=l8_collection.mosaic()
print(l8_1,l8_2,l8_mosaic)
Map.addLayer(l8_1)
Map.addLayer(l8_2)
Map.addLayer(l8_mosaic)
or()、and()
针对ImageCollection中各个image的某个波段的栅格值
这里以城市夜晚灯光常亮情况为例,判断人类聚集区:
var Night_light = ee.ImageCollection("NOAA/DMSP-OLS/NIGHTTIME_LIGHTS");
var Night_light_select=Night_light.select("stable_lights")
print(Night_light_select)
var light_or=Night_light_select.or()
var light_and=Night_light_select.and()
Map.setCenter(105.13,35.68,4)
Map.addLayer(light_or,{min:0,max:1,palette:['000000','ffff99']},'偶尔亮')
Map.addLayer(light_and,{min:0,max:1,palette:['000000','ffff99']},'一直亮 ')
sum()、max()、min()、mean()
需要指出的是,对影像集的计算,实际上是对影像集中各个Image的对应波段进行计算。比如ImageCollection中有2个Image,分别为Image1和Image2,每个Image中都有3个波段,分别是b1,b2,b3,那么对于求这个影响集的最大值(返回Image),就是从Image1中的b1波段和Image2中的b1波段中选择出波段值最大的波段,作为最终Image的b1波段值。
而对于Image求最大值,则是找出Image中各个像元值中波段的最大值。比如,Image中有3个波段,分别是b1,b2,b3,求Image的最大值,则是从b1,b2,b3中选择出最大的值来作为返回的Image的值
总之,ImageCollection是针对同一个波段计算,而Image是针对不同的波段计算
var sichuan = ee.FeatureCollection("users/lcljv1066965/test/sichuan"),
l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT");
var imgs=l8.filterBounds(sichuan)
.select("B[3-5]")
.limit(3)
Map.addLayer(imgs.min(),{},"imgs.min()")
Map.addLayer(imgs.median(),{},"imgs.median() 中位数")
Map.addLayer(imgs.max(),{},"imgs.max()")
Map.addLayer(imgs.sum(),{},"imgs.sum()")
Map.addLayer(imgs.mean(),{},"imgs.mean() 平均值")
var sichuan = ee.FeatureCollection("users/lcljv1066965/test/sichuan"),
l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT");
var imgs=l8.filterBounds(sichuan)
.select("B[3-5]")
.limit(1)
Map.addLayer(imgs.min(),{},"imgs.min()")
Map.addLayer(imgs.median(),{},"imgs.median() 中位数")
Map.addLayer(imgs.max(),{},"imgs.max()")
Map.addLayer(imgs.sum(),{},"imgs.sum()")
Map.addLayer(imgs.mean(),{},"imgs.mean() 平均值")
toList()、toArray()
将影像集转换为list、Array格式
var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_RT");
var l8_select=l8.filterBounds(ee.Geometry.Point(106.5,29.6))
.filterDate("2018-01-01","2018-12-31")
.select("B[3-5]")
print("l8_select",l8_select)
print("l8.toList(5)",l8.toList(5))
print("l8.toList(5).get(0)",l8.toList(5).get(0))
print("l8.toArray()",l8.toArray())
影像融合:mosaic、qualityMosaic
- mosaic获取的是最后一个有值的像素,然后生成一张影像;
- qualityMosaic提取的是按照qunalityBand排序后最大值的数据
当Map上加载ImageCollection时,默认用的是mosaic
那么在展示NDVI时,可以用qualityMosaic这个函数对ImageCollection的指定波段去云,因为云的NDVI值很小,所以只要我们把NDVI值往大的取,那么就会把NDVI小的值,即这些云给筛选掉
该命令的功能是“选出最大值像素”。具体来说,本例的Image Collection已经通过.map命令给其中的每个图像都增加了NDVI(波段名为nd)数据,当利用qualityMosaic命令并且选择nd波段为参数时,其结果就是将Image Collection的NDVI最大的像素挑选出来并组合成一副图像。
var imgs = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA")
.filterBounds(ee.Geometry.Point(107.193, 29.1373))
.filterDate('2018-01-01','2018-12-31')
.select('B[2-5]');
function add_NDVI (img){
return img.addBands(img.normalizedDifference(['B5','B4']))
}
var imgs_withNDVI = imgs.map(add_NDVI)
print("imgs_withNDVI",imgs_withNDVI)
Map.setCenter(106.618, 29.6653,9)
Map.addLayer(imgs_withNDVI.qualityMosaic('nd'),{"bands":["B5","B4","B3"],"max":0.5,"gamma":1},'qualityMosaic')
Map.addLayer(imgs_withNDVI.mosaic(),{"bands":["B5","B4","B3"],"max":0.5,"gamma":1},'mosaic')
reduceColumns()
var mod_daily_500 = ee.ImageCollection("MODIS/006/MOD09GA");
var imgs=mod_daily_500.limit(5)
print("mod_daily_500.limit(5)",mod_daily_500.limit(5))
print("imgs.reduceColumns",imgs.reduceColumns(ee.Reducer.toList(),["system:index"]).get("list"))
fromImages()
var img1=ee.Image("MODIS/006/MOD09GA/2005_01_01")
var img2=ee.Image("MODIS/006/MOD09GA/2005_01_02")
var list_imgs=ee.List([img1,img2])
print("list_imgs",list_imgs)
print("ee.ImageCollection.fromImages(list_imgs)",ee.ImageCollection.fromImages(list_imgs))
sort()
第一个参数为properties中的属性,第二个参数为布尔类型,默认为true,即升序;当为false时,是降序
var modis = ee.ImageCollection("MODIS/006/MOD09GA");
print(modis.limit(3))
print(modis.limit(3).sort('system:index',true))
print(modis.limit(3).sort('system:index',false))