#冲刺创作新星#GEE:加载图层影像是否需要进行裁剪clip 原创
我想在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');