划定矩形框然后计算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数据集,还使用了计算年平均影像的方法,而不是按照云量来排序的方法,两段代码的细节都可以根据自己的需求来灵活组合。