错误
Classified Mangroves RGB in Green Tunnels Geometry: Layer error: Collection.map: A mapped algorithm must return a Feature or Image.
代码
// 定義時間範圍和地理範圍
var startDate = '2023-01-01';
var endDate = '2023-12-31';
var geometry = ee.Geometry.Rectangle([120, 20, 122, 26]);
// 加載 Sentinel-2 表面反射率影像集合
var collection = ee.ImageCollection("COPERNICUS/S2_SR")
.filterDate(startDate, endDate)
.filterBounds(geometry);
// 定義需要的波段
var bands = ['B2', 'B3', 'B4', 'B8']; // 包括近紅外波段B8
// 定義雲層遮蔽函數
function maskClouds(image) {
var qa = image.select('SCL');
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
.and(qa.bitwiseAnd(cirrusBitMask).eq(0));
return image.updateMask(mask).select(bands);
}
// 應用雲層遮蔽函數到每個影像,然後選擇需要的波段
var cloudMaskedCollection = collection.map(maskClouds);
// 建立中值合成影像
var medianComposite = cloudMaskedCollection.median();
// 定義顯示參數
var visParams = {
bands: ['B4', 'B3', 'B2'],
min: 0,
max: 3000,
gamma: 1.4
};
var greenTunnelsGeometry = ee.Geometry.Polygon([
[120.1340547,23.0233719],
[120.1351209,23.0206209],
[120.1361495,23.0197770],
[120.1362571,23.0196073],
[120.1359611,23.0196631],
[120.1354501,23.0200889],
[120.1353177,23.0200519],
[120.1352137,23.0202235],
[120.1348013,23.0200818],
[120.1345422,23.0205490],
[120.1340128,23.0204676],
[120.1337234,23.0228211],
[120.1336782,23.0234169],
[120.1340547,23.0233719]
]);
// 在地圖上顯示研究區域
Map.addLayer(greenTunnelsGeometry, {color: 'purple'}, '四草區域紅樹林');
// 定義四個點位的經度和緯度坐標
var points = [
ee.Geometry.Point([120.1358367, 23.0198594]),
ee.Geometry.Point([120.1348620, 23.0207224]),
ee.Geometry.Point([120.1339444, 23.0234326]),
ee.Geometry.Point([120.1352097, 23.0204777])
];
// 定義顏色標記
var colors = ['blue', 'green', 'red', 'yellow'];
// 在地圖上顯示每個點位並以不同顏色進行註記
for (var i = 0; i < points.length; i++) {
Map.addLayer(points[i], {color: colors[i]}, 'Point ' + (i+1));
}
// 提取與四個點位具有相同光譜反射率的點位
var sameSpectralPoints = ee.ImageCollection('COPERNICUS/S2')
.filterDate('2023-01-01', '2023-12-31')
.filterBounds(geometry)
//.map(addNDVI) // 添加 NDVI
//.select('nd') // 選擇 NDVI 波段
.median() // 取中值合成影像
.reduceRegion({
reducer: ee.Reducer.mode(), // 使用眾數來找到具有相同光譜反射率的點位
geometry: geometry,
scale: 30
});
// 提取眾數值
var modeValue = sameSpectralPoints.get('nd');
/*
// 標記具有相同光譜反射率的點位並使用相同顏色
var sameredSpectralPoint = ee.Geometry.Point([120.1358367, 23.0198594]);
Map.addLayer(sameredSpectralPoint, {color: 'red'}, 'Same Spectral Point');
*/
// 創建訓練樣本
var samples = ee.FeatureCollection([
ee.Feature(points[0], { 'landcover': 0 }),
ee.Feature(points[1], { 'landcover': 1 }),
ee.Feature(points[2], { 'landcover': 2 }),
ee.Feature(points[3], { 'landcover': 3 })
]);
// 從中值合成影像中提取訓練數據,只使用波段和 landcover 屬性進行分類
var training = medianComposite.sampleRegions({
collection: samples,
properties: ['landcover'],
scale: 30
});
// 創建一個分類器並訓練它
var classifier = ee.Classifier.smileRandomForest(50).train({
features: training,
classProperty: 'landcover',
inputProperties: bands
});
// 對中值合成影像進行分類
var classified = medianComposite.classify(classifier);
// 定義每種植被類型的 RGB 顏色
var colors = {
'0': '0000FF', // 藍色
'1': '00FF00', // 綠色
'2': 'FF0000', // 紅色
'3': 'FFFF00' // 黃色
};
print(classified)
//----------------------------------------------------------------------------------------------
// 從中值合成影像中提取訓練樣本的光譜反射率
var sampleSpectra = training.map(function(feature) {
return medianComposite.reduceReg