#冲刺创作新星#GEE:加载图层影像是否需要进行裁剪clip 原创

此星光明
发布于 2022-10-1 16:05
浏览
0收藏

我想在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');

#冲刺创作新星#GEE:加载图层影像是否需要进行裁剪clip-鸿蒙开发者社区

其实这里的一个主要问题使我们没有必要使用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');


#冲刺创作新星#GEE:加载图层影像是否需要进行裁剪clip-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-10-27 15:49:03修改
收藏
回复
举报
回复
    相关推荐