GEE错误——Layer error: Collection.map: A mapped algorithm must return a Feature or Image.

本文介绍了在Google Earth Engine(GEE)中遇到的图层错误,即Collection.map函数必须返回Feature或Image。错误解析涉及了函数返回值类型、数据类型匹配和条件语句等问题。通过检查输入变量、调色板和分类后的裁剪,找到了问题根源。文章提供了Map.addLayer函数的用法,并展示了修改后的代码,包括spectralDistance函数,用于计算两幅图像之间的光谱距离。
摘要由CSDN通过智能技术生成

错误

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此星光明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值