基于GEE的Landsat8影像计算NDVI、NDBI

划定矩形框然后计算NDVI

如果没有很精细的范围需求则不需要在GEE中上传shp文件,可以通过指定矩形框然后计算范围内的NDVI值,这里以香港为例:

// Define the region of interest (Hong Kong)
var hongKong = ee.Geometry.Rectangle([113.825, 22.15, 114.35, 22.6]);

// Load Landsat 8 Surface Reflectance collection
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
                .filterBounds(hongKong) // Filter by region
                .filterDate('2023-01-01', '2023-12-31') // Filter by date
                .filter(ee.Filter.lt('CLOUD_COVER', 20)); // Filter by cloud cover

// Select the image with the least cloud cover
var image = landsat8.sort('CLOUD_COVER').first();

// Calculate NDVI
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');

// Clip NDVI to Hong Kong region
var ndvi_hk = ndvi.clip(hongKong);

// Display NDVI on the map
Map.centerObject(hongKong, 10);
Map.addLayer(ndvi_hk, {
    
    min: 0, max: 1, palette: ['blue', 'white', 'green']}, 'NDVI');

// Add Hong Kong region outline
Map.addLayer(hongKong, {
    
    color: 'red'}, 'Hong Kong Boundary');

// Print information about the NDVI image
print('NDVI Image:', ndvi_hk);

// Export the NDVI image to Google Drive
Export.image.toDrive({
    
    
  image: ndvi_hk,
  description: 'NDVI_HongKong_2023',
  folder: 'EarthEngineExports',  // Specify your Google Drive folder
  fileNamePrefix: 'NDVI_HK_2023',
  region: hongKong,
  scale: 30, // Landsat 8 has a 30m resolution
  maxPixels: 1e13 // Maximum number of pixels allowed for export
});

上传shp后计算NDVI和NDBI

有的shp边缘过于支离破碎,直接在GEE中按照shp进行裁剪可能会超出计算限制而报错,所以获取边界后可能还需要继续简化为矩形边界框最后才能导出(如果shp边缘简单则不需要转换为边界框这部分的操作)。

// 加载Landsat 8影像集合
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
  .filterDate('2023-01-01', '2023-12-31');  // 设置时间范围

// 获取香港的边界,并简化为矩形边界框
var hkRegion = ee.FeatureCollection("users/you/HK");
var simplifiedRegion = hkRegion.geometry().bounds();  // 转换为边界框

// 计算年平均影像
var meanImage = landsat8.mean();

// 计算NDVI
var meanNDVI = meanImage.normalizedDifference(['B5', 'B4']).rename('NDVI').clip(simplifiedRegion);

// 计算归一化建筑指数(NDBI)
var meanNDBI = meanImage.normalizedDifference(['B6', 'B5']).rename('NDBI').clip(simplifiedRegion);

// 设置可视化参数
var ndviVisParam = {
    
    min: 0, max: 1, palette: ['lightgreen', 'green', 'darkgreen']};
var ndbiVisParam = {
    
    min: -1, max: 1, palette: ['white', 'gray', 'brown']};

// 在地图上可视化NDVI和NDBI结果
Map.centerObject(hkRegion, 10);
Map.addLayer(meanNDVI, ndviVisParam, 'NDVI');
Map.addLayer(meanNDBI, ndbiVisParam, 'NDBI');

// 将NDVI结果导出到Google Drive
Export.image.toDrive({
    
    
  image: meanNDVI,
  description: 'HK_NDVI',
  scale: 30,
  region: simplifiedRegion,
  fileFormat: 'GeoTIFF'
  crs: "EPSG:4326",
  maxPixels:1e13
});

// 将NDBI结果导出到Google Drive
Export.image.toDrive({
    
    
  image: meanNDBI,
  description: 'HK_NDBI',
  scale: 30,
  region: simplifiedRegion,
  fileFormat: 'GeoTIFF',
  crs: "EPSG:4326",
  maxPixels:1e13
});

同时相比于第一种方法,这段代码不仅换了另外一种Landsat8数据集,还使用了计算年平均影像的方法,而不是按照云量来排序的方法,两段代码的细节都可以根据自己的需求来灵活组合。

猜你喜欢

转载自blog.csdn.net/weixin_44853840/article/details/143439537