微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?