Google Earth Engine(gee)中的ImageCollection

目录

limit()、first()

filterBounds()、filterDate()、filterMetadata()

select()

map()

获取影像集中的影像数量:size()

combine()

set()、setMulti()

mosaic()

or()、and()

sum()、max()、min()、mean()

toList()、toArray()

影像融合:mosaic、qualityMosaic

reduceColumns()

fromImages()

sort()


常用 的影像集

  • 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))

  • 32
    点赞
  • 131
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值