前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Google Earth Engine(重分类和where函数)

Google Earth Engine(重分类和where函数)

作者头像
GIS与遥感开发平台
发布2022-04-29 08:40:18
8410
发布2022-04-29 08:40:18
举报
文章被收录于专栏:GIS与遥感开发平台

Google Earth Engine(重分类和where函数)

本期我们就讲一下where函数,where函数可以把影像按照不同的类别,或者不同的范围进行计算。

例如,我们想对不同地物分类的NDVI进行不同的运算,我们就可以用where函数。

我们也顺便讲一下remap函数,这个就类似于ArcGIS中的重分类。

Where函数示例(识别水体为例)

我们通常用NDWI这个指数对水体进行识别。计算NDWI以后设定一个阈值,大于这个阈值的就是水体,小于这个阈值的就是非水体。本次,我们选用0.2作为阈值。最后我们把水体赋值为1,非水体赋值为0。

where函数有两个参数,前一个参数为条件语句,后一个参数为值或者运算公式,当条件语句为Ture的时候,把值赋给等式左边。这个函数与python中的where函数很类似。

主要函数:where

代码语言:javascript
复制
var table = ee.FeatureCollection("users/boyxiaozheng/feature/beijing");
var maks_cloud=function(image){
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  var qa = image.select('pixel_qa');
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                          .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  var img=image.updateMask(mask);

  return img;

}
var image=ee.ImageCollection("LANDSAT/LC08/C01/T1_SR")
                        .filterDate('2017-01-01','2017-12-10')
                        .filterBounds(table)
                        .map(maks_cloud)
                        .mean();

var ndwi=image.normalizedDifference(['B3', 'B5']);
var water=ndwi.where(ndwi.lte(0.2),0).where(ndwi.gt(0.2),1)

var palette = ['#FF0000','#0000FF'];

Map.centerObject(table);
Map.addLayer(water_time, {min: 0, max: 1, palette: palette});

结果:

示例2(对不同地物的NDVI乘上不同系数)

我们再讲另外一个where函数的示例,就是对不同地物类型下的NDVI进行不同的计算。这个就是个示例,没啥具体含义。

同时,在此之前我们要对地物进行重分类(remap),函数里面有两个参数。这两个参数为两个列表,第一个列表为重分类前的数值,第二个列表为重分类的数值,两个列表长度要一样,数值一一对应。

代码语言:javascript
复制
var table = ee.FeatureCollection("users/boyxiaozheng/feature/beijing");
function cal_ndvi(image){
  var mask=ee.Algorithms.Landsat.simpleCloudScore(image).select(['cloud']).lte(20);
  var ndvi=image.normalizedDifference(['B5', 'B4']).updateMask(mask).rename('NDVI');
  return ndvi;
}

var dataset = ee.ImageCollection('MODIS/006/MCD12Q1');
var igbpLandCover = dataset.select('LC_Type1')
                            .filterDate('2017-01-01','2017-12-01')
                            .mosaic();

var re_class= ee.Image(igbpLandCover).remap([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],
                                  [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3]) ;


var ndvi_image= ee.ImageCollection("LANDSAT/LC08/C01/T1_RT")
  .filterBounds(table.geometry())
  .filter(ee.Filter.lt('CLOUD_COVER',10))
  .filterDate('2017-06-01','2017-10-01')
  .map(cal_ndvi)
  .mosaic();

var example_data=ndvi_image.where(re_class.eq(1),ndvi_image.multiply(3))
                           .where(re_class.eq(2),ndvi_image.multiply(2))
                           .where(re_class.eq(3),ndvi_image.multiply(1));

var igbpLandCoverVis = {
  min: -3,
  max: 3,
  palette: [
    '05450a', '086a10', '54a708', '78d203', '009900', 'c6b044', 'dcd159',
    'dade48', 'fbff13', 'b6ff05', '27ff87', 'c24f44', 'a5a5a5', 'ff6d4c',
    '69fff8', 'f9ffa4', '1c0dff'
  ],
};
Map.centerObject(table);
Map.addLayer(example_data.clip(table), igbpLandCoverVis, 'IGBP Land Cover');

本次我们讲了GEE中的where函数(NDWI为例)还有remap函数。大家有什么想实现的功能呢?可以随时留言交流。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GIS与遥感开发平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档