GEE:加载图层到底有没有必要进行clip

举报
此星光明 发表于 2022/10/01 16:06:03 2022/10/01
【摘要】 我想在GEE中做一个二进制变化检测,有以下代码,但没有显示任何结果。 你能告诉我我做错了什么吗?另外,如果我知道我想用来做减法的图像的具体日期--有什么方法可以做到吗?或者我必须使用我的方式来过滤日期?原有的代码:var polygon = ee.Geometry.Polygon({coords: [[[-88.6006, 30.3604], [-88.5340, 30.3447], [-8...

我想在GEE中做一个二进制变化检测,有以下代码,但没有显示任何结果。 你能告诉我我做错了什么吗?另外,如果我知道我想用来做减法的图像的具体日期--有什么方法可以做到吗?或者我必须使用我的方式来过滤日期?


原有的代码:

var polygon = ee.Geometry.Polygon({
coords: [[[-88.6006, 30.3604], [-88.5340, 30.3447], [-88.5443, 30.3047], [-88.6146, 30.3231]]], // Pascagoula, MS
geodesic: false
});

var bands = ['B3','B4'];



//var landsat2004 = ee.Image('LANDSAT/LE07/C01/T1_SR/LE07_021039_20040125')
                 // .map(function(landsat2004){return landsat2004.clip(polygon)});

var landsat2004 = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
                  .filterDate('2004-01-25', '2004-02-25')
                  .map(function(landsat2004){return landsat2004.clip(polygon)});

var ls2004 = ee.Image(landsat2004.first());                

//var landsat2014 = ee.Image('LANDSAT/LE07/C01/T1_SR/LE07_021039_20140120')
                  //.map(function(landsat2014){return landsat2014.clip(polygon)});
                 
var landsat2014 = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
                  .filterDate('2014-01-20', '2014-02-20')
                  .map(function(landsat2014){return landsat2014.clip(polygon)});

var ls2014 = ee.Image(landsat2014.first());  
                 
var diff = ls2014.subtract(ls2004);

Map.centerObject(diff);

Map.addLayer(diff,
            {bands: ['B3','B4'], min: -255, max: 255},
           'difference');

其实这里的一个主要问题使我们没有必要使用clip数据,我们只要使用filterBounds函数筛选出所需要的影像就可以了,我们这里需要查看两个函数来看两者的区别。

filterBounds(geometry)
通过与几何体相交来过滤一个集合的快捷方式。集合中的项目如果没有与给定的几何体相交,就会被排除。

这等同于this.filter(ee.Filter.bounds(..))。

注意:提供一个大的或复杂的集合作为几何参数会导致性能不佳。整理集合的几何体并不能很好地扩展;使用最小的集合(或几何体)来实现所需的结果。

返回过滤后的集合。

参数。
this:collection(集合)。
集合实例。

geometry (ComputedObject|FeatureCollection|Geometry)。
要与之相交的几何体、特征或集合。

返回。集合

clip(geometry)
将一个图像夹在一个几何体或特征体上。

输出的波段与输入的波段完全对应,只是几何体没有覆盖的数据被屏蔽了。输出的图像保留了输入图像的元数据。

使用clipToCollection将一个图像剪切到一个特征集合。

返回剪切后的图像。

参数。
this:image(图像)。
图像实例。

geometry (Feature|Geometry|Object):
要剪切的几何体或特征。

返回。图像

这里我们需要知道当我们不需要单景影像范围的影像时,而是需要裁剪自己的矢量范围的时候,我们才使用clip函数,通常下载影像的时候和加载特定区域的影像来使用。

修改后的代码:

var polygon = /* color: #98ff00 */ee.Geometry.Polygon(
        [[[-88.6006, 30.3604],
          [-88.534, 30.3447],
          [-88.5443, 30.3047],
          [-88.6146, 30.3231]]], null, false);



var bands = ['B3','B4'];



//var landsat2004 = ee.Image('LANDSAT/LE07/C01/T1_SR/LE07_021039_20040125')
                 // .map(function(landsat2004){return landsat2004.clip(polygon)});

var landsat2004 = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
                  .filterDate('2004-01-25', '2004-02-25')
                  .filterBounds(polygon)
                  

var ls2004 = ee.Image(landsat2004.first());                

//var landsat2014 = ee.Image('LANDSAT/LE07/C01/T1_SR/LE07_021039_20140120')
                  //.map(function(landsat2014){return landsat2014.clip(polygon)});
                 
var landsat2014 = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
                  .filterDate('2014-01-20', '2014-02-20')
                  .filterBounds(polygon)

var ls2014 = ee.Image(landsat2014.first());  
                 
var diff = ls2014.subtract(ls2004);

Map.centerObject(diff);

Map.addLayer(diff,
            {bands: ['B3','B4'], min: -255, max: 255},
           'difference');

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。