Google Earth Engine-未定义数组的第一个元素

问题描述

我尝试分别计算1000和2000个随机分布的水和陆地像素的均值和方差值。然后,我想将两个均值都存储在一个称为“均值”的列表中,并将两个方差值都存储在一个名为“方差”的列表中。之后,我将使用这些值进行进一步的计算。所有值都可以正确计算,但是由于某些原因,两个列表中的第一个值都标记为“未定义”。但是,每个列表中的第二个值都是正确的。有人知道原因可能是什么?

1000和2000个采样点随机分布在两个称为“ water_clear”和“ soil_bright”的多边形中。该代码使用GEE编写,并应用于Sentinel-2数据。

谢谢大家!

Map.setCenter(31.27331,-22.41671,15);
//Map.centerObject(knp,12)

var date_start = '2020-04-01';
var date_end = '2020-04-30';


//Load Sentinel-2
var s2 = ee.ImageCollection("copERNICUS/S2")
    .filter(ee.Filter.lessthanorEquals('CLOUDY_PIXEL_PERCENTAGE',20))
    .filterBounds(knp)
    .map(function(image){return image.clip(knp)});
    

var month = s2.filterDate(date_start,date_end).mosaic();//Datum an Monat anpassen//
Map.addLayer(month,{bands: ['B4','B3','B2'],min:0,max: 3000},'month');

//--------------------------Selecting_Random_Sample_Points_for_each_Class-----------------------------------------------
//ANPASSEN: polygone
//Classes to select samples for
//Test classes for Seninel-2
var classes = [water_clear,soil_brown] //,water_turbid_20m,soil_bright,soil_brown,soil_dark,vegetation,shaddows,clouds]
var classes_names = ['Water_clear','soil_bright']//,'Water_turbid_20m','Soil_bright','Soil_brown','Soil_dark','vegetation','Shaddows','Clouds']

//Test classes for Seninel-1
//var classes = [S1_water_still,S1_water_flowing,S1_land,vegetation]
//var classes_names = ['S1_water_still','S1_water_flowing','S1_land','vegetation']

//repeat sample selection for each class
for (var i = 0; i < classes.length; i++) {

// Define an arbitrary region in which to compute random points.
var region = ee.Geometry(classes[i]);

//For the water classes create 1000 random points (as they are small in area).
//For the remaining classes create 2000 random points (as they are big in area).
if (classes[i] == water_clear || classes[i] == water_turbid || classes[i] == water_clear_20m || classes[i] == water_turbid_20m || classes[i] == S1_water_still || classes[i] == S1_water_flowing) {
var randomPoints = ee.FeatureCollection.randomPoints(region,1000);
//Map.addLayer(randomPoints,{},'randomPoints'+[i]);
//print(randomPoints,'randomPoints_1000')
} else {
var randomPoints = ee.FeatureCollection.randomPoints(region,2000);
Map.addLayer(randomPoints,'randomPoints_2000')

}

// display the points.
Map.addLayer(randomPoints,'randomPoints for class: '+classes_names[i]);
print(randomPoints,'randomPoints for class: '+classes_names[i]);


//...................................Varianz..und..arithm. Mittel...............................
//empty lists to store mean and variance value for each class
var means = []
var variances = []


// //apply each element of list "classes" to the following code
//for (var i = 0; i < classes.length; i++) {
// //Calculate mean of all points
// //Creating feature collection
//var randomPoints = classes[i];
// print(randomPoints,'points')
// Map.addLayer(randomPoints,'points')

//mean
var mean = month
.select("B11")
.reduceRegion(ee.Reducer.mean(),randomPoints,10)
.get("B11")
// Convert to Number for further use
var meanN = ee.Number(mean)
// Show data
print(meanN,'arithm. Mittel '+[i]);

//variance
var variance = month
.select("B11")
.reduceRegion(ee.Reducer.variance(),10)
.get("B11")
// Convert to Number for further use
var varianceN = ee.Number(variance)
// Show data
print(varianceN,'Varianz '+[i]);

means[i] = meanN
variances[i] = varianceN
}
print(means,'means')

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...