var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7']; var imageCollection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') .filterBounds(roi) .filterDate('2017-01-01', '2017-08-01') .sort('CLOUD_COVER', false); var fillMissingValues = function(image) { var selected = image.select(bands).float(); var zeros = ee.Image.constant(0).toFloat(); var filled = zeros.blend(selected); return filled.select(bands); }; var filledCollection = imageCollection.map(fillMissingValues); // 从随机点生成器中获取随机点 var seed = 123; var randomPoints = ee.FeatureCollection.randomPoints(roi, 150, seed); Map.addLayer(randomPoints) // 为随机点添加类别属性 randomPoints = randomPoints.map(function(feature) { var classValue = ee.Number.parse(feature.id()).mod(60); return feature.set('classValue', 30); }); // 定义分类器并进行训练 var classifier = ee.Classifier.smileRandomForest(50, 100).train({ features: randomPoints, classProperty: 'classValue', inputProperties: bands // 使用 bands 变量作为输入属性 }); // 对整个图像进行分类 var classified = filledCollection.map(function(image){ return image.classify(classifier); }); // 将分类结果可视化 Map.addLayer(classified, {min: 0, max:100, palette: 'blue'}, 'Classification');报错Classification: Layer error: Property 'B2' of feature '0' is missing.
时间: 2024-02-05 16:05:12 浏览: 18
这个报错是因为在生成随机点并添加类别属性时,feature 对象中缺少了在 bands 中定义的某些属性。这可能是因为在选择随机点位置时,某些位置的图像数据中并没有包含 bands 中的所有波段,因此在添加类别属性时就会出现缺失。解决这个问题的方法是,在随机点生成时,使用图像集合(即 filledCollection)中的某个图像来选择随机点,这样可以确保随机点所在位置的图像数据包含了所有要素。修改后的代码如下:
```
// 从 filledCollection 中选择一幅图像用于生成随机点
var sampleImage = filledCollection.first();
// 从随机点生成器中获取随机点
var seed = 123;
var randomPoints = ee.FeatureCollection.randomPoints({
region: roi,
points: 150,
seed: seed,
tileScale: 16
}).map(function(feature) {
// 为随机点添加类别属性
var classValue = ee.Number.parse(sampleImage.reduceRegion({
reducer: ee.Reducer.first(),
geometry: feature.geometry(),
scale: 30
}).values().get(0)).mod(60);
return feature.set('classValue', 30);
});
// 定义分类器并进行训练
var classifier = ee.Classifier.smileRandomForest(50, 100).train({
features: randomPoints,
classProperty: 'classValue',
inputProperties: bands // 使用 bands 变量作为输入属性
});
// 对整个图像进行分类
var classified = filledCollection.map(function(image){
return image.classify(classifier);
});
// 将分类结果可视化
Map.addLayer(classified, {min: 0, max:100, palette: 'blue'}, 'Classification');
```
这样修改后,就可以正确地执行图像分类操作了。