GEE(Google Earth Engine)学习——常用筛选器Filter操作

目录

一、筛选器Filter

(1)关系比较型筛选器

(2)差值筛选器

(3)字符筛选器

(4)详细时间筛选

(5)筛选器叠加筛选

二、Join配合Filter进行两数据集联合筛选

(1)仅保留左侧数据集的筛选

(2)两侧均保留的数据集的筛选(数据集融合)

(3)对符合要求数据集以属性形式添加左侧数据集内

(4)空间数据之间的筛选

举例说明:

筛选出河南省空间区域范围内Landsat 8影像日期在2021年5月的影像。


一、筛选器Filter

(1)关系比较型筛选器

var filter_1 = ee.Filter.eq/neq/gt/gte/lt/lte('字段','字段值');          

//关系进行判断,返回筛选器

var result_filter = (FeatureCollection/ImageCollection).fliter(filter_1);      

//此时筛选结果仍为Collection类型。

若返回非Collection类型,如下所示:

var result_filter = (FeatureCollection/ImageCollection).fliter(filter_1).first();

(2)差值筛选器

var filter_1 = ee.Filter.maxDifference('最大差值','字段','字段数值'); 
'var filter_1 = ee.Filter.maxDifference('10','area',100); '
//表示面积字段area与100最大相差10的区域 

(3)字符筛选器

 对起始、终止、包含字符串进行筛选

var filter_1 = ee.Filter.stringStartsWith('字段','起始字符串');
var filter_2 = ee.Filter.stringEndsWith('字段','末尾字符串');
var filter_3 = ee.Filter.stringContains('字段','包含字符串');

对范围筛选

var filter_1 = ee.Filter.rangeContains('字段','起始字母', '终止字母');
'var filter_1 = ee.Filter.rangeContains('NAME','B', 'D');'
//表示筛选出NAME字段种包含字母B到D的全部区域

针对某些字段内以列表形式存在的字段值,需要用到listContains() 

var filter_1 = ee.Filter.listContains('字段','列表内包含值');

 针对多值进行筛选时,需要用到列表进行多值筛选:

var list_1 = ee.List('字符串1', '字符串2', '字符串3');
var filter_1 = ee.Filter.inlist('字段',list_1);
//筛选出字段中包含列表内某些元素的结果(多值筛选)

(4)详细时间筛选

var filter_1 = ee.Filter.calendarRange(day1, day2, 'day_of_year');
//筛选器:筛选一年中第day1到第day2天中的影像
var filter_2 = ee.Filter.calendarRange(month1, month2, 'month_of_year');
//筛选器:按月份筛选

筛选一年中的天数也可以用DayOfYear()

filter_1 = ee.Filter.day_Of_Year(day1, day2);
//筛选器:筛选一年中第day1到第day2天中的影像

(5)筛选器叠加筛选

var filter_1 = ee.Filter.and(filter_A, filter_B);
//筛选器:筛选交filter
var filter_2 = ee.Filter.or(filter_A, filter_B);
//筛选器:筛选并filter
var Result = China.filter(filter_1);
//其中相当于filter_A与filter_B结果合并

反筛选

var filter_2 = filter_1.not();
//要filter_1筛选结果不符合的部分

二、Join配合Filter进行两数据集联合筛选

(1)仅保留左侧数据集的筛选

【ee.Join.simple(),对两数据集满足某条件下对某个数据集进行筛选】

【ee.Join.inverted(),对两数据集不满足某条件下对某个数据集进行筛选】

以下完成了对数据集1与数据集2之间相差天数小于times的数据集1进行筛选。

'用于筛选数据集影像之间相差times以内的数据集'
var filter_1 = ee.Filter.maxDifference(
{
  difference: times,
  '通过系统时间联系数据集(system:time_start)'
  leftField: 'system:time_start',//左字段的选择器,类型为time_start,即从起始计时,单位毫秒
  rightField: 'system:time_start' //右字段的选择器'
//注意:左右字段(Field)与左右对象只能选其一,如果有左右对象则无选择器(字段的单位已经存在);有选择器时,不能有对象,对象目前为未知
});   
//其中times单位为毫秒,例如1天为1*24*60*60*1000

'定义一个空的simpleJoin,后边应用筛选器时是选择符合条件的结果'
var simpleJoin = ee.Join.simple();     
'定义一个空的invetJoin,后边应用筛选器时是选择不符合条件的结果'
var invetJoin = ee.Join.inverted();

'对simpleJoin应用筛选器'
var simpleJoined = simpleJoin.apply(数据集1, 数据集2, filter_1);
print(simpleJoined);        //可以打印查看满足条件的数据集1影像名称

(2)两侧均保留的数据集的筛选(数据集融合)

'用于筛选两影像某字段之间满足条件的数据集'
var filter_1 = ee.Filter.eq(
{
  leftField: '字段1名称',
  rightField: '字段2名称'
});   

'定义一个空的innerJoin,应用筛选器时是选择符合条件的结果'
var innerJoin = ee.Join.inner('名称1', '名称2'); //定义生成结果的合成两产品的名称    

'对innerJoin应用筛选器'
var toyJoin = innerJoin.apply(数据集1, 数据集2, filter_1);
print(toyJoin);        
//可以打印查看满足条件的两个影像名称,分别对应前边的名称1与名称2

 更多地应用于合成不同产品数据集,例如基于系统时间合成同一天下Landsat与MODIS影像数据。多种数据融合形成需要的综合产品。(通过cat()将不同影像进行波段整合,最后形成波段融合后的影像结果)

'inner后续的产品整合'
var toyJoin_result = toyJoin.map(function(IM){
    return ee.image.cat(IM.get('名称1'), IM.get('名称2'));
})

(3)对符合要求数据集以属性形式添加左侧数据集内

ee.Join.saveAll()    用于确定符合要求的数据集,结果标记在新增属性字段内

var filter_1 = ee.Filter.maxDifference(
{
  difference: times,
  leftField: 'system:time_start',
  rightField: 'system:time_start'
});   

var saveAllJoin = ee.Join.saveAll(
{
  matchesKey: 属性名称,
  ordering: 'system:time_start',  //排序字段
  ascending:true   //升序
});  

'对saveAllJoin应用筛选器'
var saveAll_Join_Images = saveAllJoin.apply(数据集1, 数据集2, filter_1);
print(saveAll_Join_Images);        

 ee.Join.saveBest()   确定最优数据集,返回在属性字段内,只保留最优图像

var filter_1 = ee.Filter.maxDifference(
{
  difference: times,
  leftField: 'system:time_start',
  rightField: 'system:time_start'
});   

var saveBestJoin = ee.Join.saveBest(
{
  matchesKey: 属性名称,
  measureKey: 测量字段   //返回测量结果,例如时间差距毫秒
});  

'对saveBestJoin应用筛选器'
var saveBest_Join_Images = saveBestJoin.apply(数据集1, 数据集2, filter_1);
print(saveBest_Join_Images);        

 ee.Join.saveFirst()    只保留右侧第一个符合要求数据影像

(4)空间数据之间的筛选

空间筛选器介绍:

① ee.Filter.withinDistance()

用于确定两者之间空间距离之间的差距影像筛选(例如:站点数据与影像栅格数据)

var filter_1 = ee.Filter.withinDistance({
  distance: 距离,
  leftField: '.geo',   //.geo特指空间属性
  rightField: '.geo',
  maxError: 10         //运行电脑最大缩放误差
});

 ② ee.Filter.intersects()

用于确定相交数据集的影像筛选(例如:矢量数据与其相交的栅格数据筛选)

var filter_1 = ee.Filter.intersects({
  leftField: '.geo',   //.geo特指空间属性
  rightField: '.geo',
  maxError: 10         //运行电脑最大缩放误差
});

剩余可以基于该空间筛选得到的筛选器结合Join的操作实现对某个数据集进行空间的筛选操作。

举例说明:

筛选出河南省空间区域范围内Landsat 8影像日期在2021年5月的影像。

var China = ee.FeatureCollection("users/geometry_try/China_province");
//添加中国省级边界行政区矢量图

var Henan_filter = ee.Filter.eq('City_1', 'henan');  //按字段筛选出河南省
var Henan = China.filter(Henan_filter);
Map.centerObject(Henan);
Map.addLayer(Henan);

var L8_Dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
    .filterDate('2021-05-01', '2021-06-01');   //添加Landsat 8 T1影像

var Henan_L8_filter = ee.Filter.intersects({
  leftField:'.geo',
  rightField:'.geo'
});   //get geo intersects filter     构建空间相交筛选器

var Join_simple = ee.Join.simple();    //create Join simple
var Henan_L8_Dataset = Join_simple.apply(L8_Dataset, Henan, Henan_L8_filter);  //apply Join simple
print(Henan_L8_Dataset);
var Henan_L8_Dataset_B1 = Henan_L8_Dataset.map(function select_B1(Image){
  return Image.get('SR_B1');         //get band1, 运用map函数筛选出第一波段影像
});
//addLayer ImageCollection
Map.addLayer(ee.ImageCollection(Henan_L8_Dataset));
Map.addLayer(Henan,{color:'red'},'henan');

可以看出筛选后影像有23张(List (23 elements)) 

GEE(Google Earth Engine)学习——常用筛选器Filter操作_第1张图片

 针对各张影像查看波段如下,查看第一波段的编号:

GEE(Google Earth Engine)学习——常用筛选器Filter操作_第2张图片

 最后查看筛选出的结果如下所示:

GEE(Google Earth Engine)学习——常用筛选器Filter操作_第3张图片

 可以看出其中影像存在部分的缺失,河南省西部部分区域在2021年5月没有Landsat 8 T1影像。

 

你可能感兴趣的:(GEE基础操作学习,javascript,google,earth)