Google Earth Engine——影像统计过程中出现的空值问题
这里有一个问题,是单单只有一景影像, 但是这里我们需要看代码,代码中利用的函数就是原数据筛选,然后 就是这个函数用的等于,等于的值是单景影像的id
filterMetadata(name, operator, value)
已删除。使用 filter() 与 ee.Filter.eq(), ee.Filter.gte() 等。
通过元数据来过滤一个集合的快捷方式。这相当于this.filter(ee.Filter.metadata(..))。
返回过滤后的集合。
参数。
this:collection(集合)。
集合实例。
name(字符串)。
要过滤的属性名称。
operator (String):
比较运算符的名称。可能的值是。"equals", "less_than", "greater_than",
"not_equals", "not_less_than", "not_greater_than", "start_with",
"end_with", "not_starts_with", "not_ends_with", " contains",
"不包含"。
value(对象)。
- 要比较的值。
返回。集合
所以这里就解释了为啥只有单景影像的第一个问题
这里第二个问题就是我们这里再统计单景影像的函数的时候这里是将统计值返回给一个空的矢量,所以这里并没有将其统计的值给得到,而这里选择的是first,也就是选择的第一个shp矢量这里本身就是一个空值
SCL | Scene Classification Map (The "No Data" value of 0 is masked out) | 1 | 11 | 20 meters | 0 |
Class Table: SCL这里是具体的分类信息
Value | Color | Color Value | Description |
---|---|---|---|
1 | #ff0004 | Saturated or defective | |
2 | #868686 | Dark Area Pixels | |
3 | #774b0a | Cloud Shadows | |
4 | #10d22c | Vegetation | |
5 | #ffff52 | Bare Soils | |
6 | #0000ff | Water | |
7 | #818181 | Clouds Low Probability / Unclassified | |
8 | #c0c0c0 | Clouds Medium Probability | |
9 | #f1f1f1 | Clouds High Probability | |
10 | #bac5eb | Cirrus | |
11 | #52fff9 | Snow / Ice |
SLC波段将去掉0的数据
代码:
-
//影像筛选这里是单景影像的筛选
-
var S2 = ee.ImageCollection('COPERNICUS/S2_SR')
-
.filterMetadata("system:index", 'equals', '20210705T165901_20210705T165855_T20XNN')
-
-
// 定义一个云遮蔽函数。
-
var maskcloud1 = function(image) {
-
var QA60 = image.select(['QA60']);
-
return image.updateMask(QA60.lt(1))
-
};
-
-
// 定义一个植被掩蔽函数。这个大家需要去看这个波段的的影像信息
-
var masklandcover = function(image){
-
var SCL = image.select(['SCL']);
-
return image.updateMask(SCL.eq(4).or(SCL.eq(5)).or(SCL.eq(6)).or(SCL.eq(11)))
-
}
-
-
// 选择大于0的
-
var maskpstv = function(image){
-
var RE = image.select(['AbsError']);
-
return image.updateMask(RE.gte(0))
-
}
-
-
//选择小于0的
-
var maskngtv = function(image){
-
var RE = image.select(['AbsError']);
-
return image.updateMask(RE.lt(0))
-
}
-
-
var AbsoluteError_oldc_f = function(image) {
-
return image.expression(
-
'((2.5 * (NIR - RED) / (NIR + (6-7.5/2.08)*RED + 1))-(2.5 * (NIR - RED) / (NIR + 6*RED-7.5*BLUE + 1)))',
-
{
-
'NIR': image.select('B8').multiply(0.0001),
-
'RED': image.select('B4').multiply(0.0001),
-
'BLUE': image.select('B2').multiply(0.0001),
-
}).rename('AbsError').copyProperties(image, image.propertyNames());
-
};
-
-
//利用影像进行上面的map工作
-
var ImgsMasked = S2.map(maskcloud1).map(masklandcover).map(AbsoluteError_oldc_f);
-
-
//然后再进行大于和小于的筛选
-
var ImgsMasked_pstv = ImgsMasked.map(maskpstv)
-
var ImgsMasked_ngtv = ImgsMasked.map(maskngtv)
-
-
//求影像的均值
-
var BecomeTs = function(image){
-
var date = image.get("DATE_ACQUIRED")//.format("Y-M-D");
-
var mean = image.reduceRegion({
-
reducer: ee.Reducer.mean(),
-
geometry: image.geometry(),
-
scale: 10,
-
bestEffort: true
-
});
-
//
-
// 并返回一个具有 "null "几何形状的特征,并带有属性(字典)。
-
return ee.Feature(null, {'mean': mean.get('AbsError'), 'date': date,'geometry':image.geometry().coordinates()})
-
}
-
-
print('ImgsMasked_ngtv',ImgsMasked_ngtv)
-
// There is only one image with name 20210705T165901_20210705T165855_T20XNN
-
print('Result using map() function', ImgsMasked_ngtv.map(BecomeTs))
-
// get the mean value -119345390125318.16
-
print('Result using first() function',BecomeTs(ImgsMasked_ngtv.first()))
-
// get the mean value null
文章来源: blog.csdn.net,作者:此星光明,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_31988139/article/details/125828911
- 点赞
- 收藏
- 关注作者
评论(0)