这段Google Earth Engine (GEE)代码的主要功能是从多个数据集中提取昆明市呈贡区的地理信息数据,并将其可视化或导出到Google Drive。代码可以分为多个功能模块,每个模块负责处理不同的数据类型。下面是对代码的详细拆分和注释:
1. 定义研究区域
var chengGongBounds = ee.Geometry.Rectangle([102.7, 24.8, 103.0, 25.0]);
Map.centerObject(chengGongBounds, 11);
Map.addLayer(chengGongBounds, {color: 'red'}, '呈贡区范围');
- 功能:定义昆明市呈贡区的地理范围,并将其显示在地图上。
- 注释:
chengGongBounds
是一个矩形区域,定义了呈贡区的经纬度范围。Map.centerObject
将地图中心定位到该区域,缩放级别为11。Map.addLayer
将该区域以红色边框的形式添加到地图上,并命名为“呈贡区范围”。
2. 获取建筑物数据
try {
var buildings = ee.FeatureCollection("GOOGLE/Research/open-buildings/v3/polygons")
.filterBounds(chengGongBounds);
Map.addLayer(buildings, {color: 'blue'}, '建筑物');
Export.table.toDrive({
collection: buildings,
description: 'ChengGong_Buildings',
fileFormat: 'SHP'
});
} catch (e) {
print('无法访问建筑数据集,请检查权限或使用其他数据集');
}
- 功能:从Google的开放建筑物数据集中提取呈贡区的建筑物数据,并将其导出到Google Drive。
- 注释:
ee.FeatureCollection
从Google的开放建筑物数据集中加载数据。filterBounds
过滤出位于呈贡区范围内的建筑物。Map.addLayer
将建筑物以蓝色显示在地图上。Export.table.toDrive
将建筑物数据导出为Shapefile格式到Google Drive。try-catch
用于捕获可能的错误,如数据访问权限问题。
3. 获取Landsat 8影像
var landsat = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(chengGongBounds)
.filterDate('2023-01-01', '2023-12-31')
.sort('CLOUD_COVER')
.first();
if (landsat === null || landsat === undefined) {
print('未找到Landsat最近一年的影像,扩大搜索范围');
landsat = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(chengGongBounds)
.filterDate('2020-01-01', '2023-12-31')
.sort('CLOUD_COVER')
.first();
}
if (landsat !== null && landsat !== undefined) {
var getReflectance = function(image) {
var opticalBands = image.select(['SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6', 'SR_B7'])
.multiply(0.0000275).add(-0.2);
return image.addBands(opticalBands, null, true);
};
landsat = getReflectance(landsat);
var visParams = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 0,
max: 0.3
};
var landsatClipped = landsat.clip(chengGongBounds);
Map.addLayer(landsatClipped, visParams, 'Landsat 8 影像');
Export.image.toDrive({
image: landsatClipped.select(['SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6', 'SR_B7']),
description: 'ChengGong_Landsat8',
scale: 30,
region: chengGongBounds,
maxPixels: 1e13
});
} else {
print('无法获取Landsat影像');
}
- 功能:获取并处理呈贡区的Landsat 8影像数据,并将其导出到Google Drive。
- 注释:
ee.ImageCollection
从Landsat 8数据集中加载影像。filterBounds
和filterDate
过滤出呈贡区范围内且时间在2023年的影像。sort('CLOUD_COVER')
按云量排序,选择云量最少的影像。getReflectance
函数用于计算反射率。Map.addLayer
将影像以指定的波段组合显示在地图上。Export.image.toDrive
将影像导出到Google Drive。
4. 获取土地利用分类数据
try {
var worldcover = ee.ImageCollection("ESA/WorldCover/v200").first();
if (worldcover !== null && worldcover !== undefined) {
var landCover = worldcover.clip(chengGongBounds);
Map.addLayer(landCover, {bands: ['Map']}, '土地利用分类');
Export.image.toDrive({
image: landCover,
description: 'ChengGong_LandCover_ESA',
scale: 10,
region: chengGongBounds,
maxPixels: 1e13
});
}
} catch (e) {
print('无法访问ESA WorldCover数据,尝试使用其他土地利用数据');
var modisLandCover = ee.ImageCollection('MODIS/006/MCD12Q1')
.filter(ee.Filter.date('2021-01-01', '2022-01-01'))
.first()
.select('LC_Type1')
.clip(chengGongBounds);
Map.addLayer(modisLandCover, {}, 'MODIS土地利用分类');
Export.image.toDrive({
image: modisLandCover,
description: 'ChengGong_LandCover_MODIS',
scale: 500,
region: chengGongBounds,
maxPixels: 1e13
});
}
- 功能:获取呈贡区的土地利用分类数据,并将其导出到Google Drive。
- 注释:
- 首先尝试使用ESA WorldCover数据集,如果无法访问,则使用MODIS土地利用分类数据。
Map.addLayer
将土地利用分类数据显示在地图上。Export.image.toDrive
将土地利用分类数据导出到Google Drive。
5. 获取DEM高程和坡度数据
var srtm = ee.Image("USGS/SRTMGL1_003");
var dem = srtm.clip(chengGongBounds);
var slope = ee.Terrain.slope(dem);
var aspect = ee.Terrain.aspect(dem);
Map.addLayer(dem, {min: 1500, max: 2500, palette: ['blue', 'green', 'yellow', 'red']}, '高程');
Map.addLayer(slope, {min: 0, max: 30, palette: ['green', 'yellow', 'red']}, '坡度');
Export.image.toDrive({
image: dem,
description: 'ChengGong_DEM',
scale: 30,
region: chengGongBounds,
maxPixels: 1e13
});
Export.image.toDrive({
image: slope,
description: 'ChengGong_Slope',
scale: 30,
region: chengGongBounds,
maxPixels: 1e13
});
- 功能:获取呈贡区的DEM高程和坡度数据,并将其导出到Google Drive。
- 注释:
ee.Image
从SRTM数据集中加载DEM数据。ee.Terrain.slope
和ee.Terrain.aspect
分别计算坡度和坡向。Map.addLayer
将高程和坡度数据显示在地图上。Export.image.toDrive
将DEM和坡度数据导出到Google Drive。
6. 获取Sentinel-2高分辨率影像
try {
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(chengGongBounds)
.filterDate('2023-01-01', '2023-12-31')
.sort('CLOUDY_PIXEL_PERCENTAGE')
.first();
if (sentinel !== null && sentinel !== undefined) {
var sentinelVis = {
bands: ['B4', 'B3', 'B2'],
min: 0,
max: 3000
};
var sentinelClipped = sentinel.clip(chengGongBounds);
Map.addLayer(sentinelClipped, sentinelVis, 'Sentinel-2 高分辨率影像');
Export.image.toDrive({
image: sentinelClipped.select(['B2', 'B3', 'B4', 'B8']),
description: 'ChengGong_Sentinel2',
scale: 10,
region: chengGongBounds,
maxPixels: 1e13
});
}
} catch (e) {
print('无法获取Sentinel-2影像');
}
- 功能:获取呈贡区的Sentinel-2高分辨率影像,并将其导出到Google Drive。
- 注释:
ee.ImageCollection
从Sentinel-2数据集中加载影像。filterBounds
和filterDate
过滤出呈贡区范围内且时间在2023年的影像。sort('CLOUDY_PIXEL_PERCENTAGE')
按云量排序,选择云量最少的影像。Map.addLayer
将影像以指定的波段组合显示在地图上。Export.image.toDrive
将影像导出到Google Drive。
7. 获取昆明市行政区划数据
try {
var gadm = ee.FeatureCollection("FAO/GAUL/2015/level2");
var kunming = gadm.filter(ee.Filter.and(
ee.Filter.eq('ADM1_NAME', 'Yunnan'),
ee.Filter.eq('ADM2_NAME', 'Kunming')
));
if (kunming.size().getInfo() > 0) {
Map.addLayer(kunming, {color: 'purple'}, '昆明市行政区划');
Export.table.toDrive({
collection: kunming,
description: 'Kunming_Administrative',
fileFormat: 'SHP'
});
}
} catch (e) {
print('无法获取行政区划数据');
}
- 功能:获取昆明市的行政区划数据,并将其导出到Google Drive。
- 注释:
ee.FeatureCollection
从GAUL数据集中加载行政区划数据。filter
过滤出云南省昆明市的行政区划。Map.addLayer
将行政区划以紫色显示在地图上。Export.table.toDrive
将行政区划数据导出为Shapefile格式到Google Drive。
8. 获取道路网络数据
try {
var roads = ee.FeatureCollection('GOOGLE/Research/open-buildings/v3/polygons')
.filterBounds(chengGongBounds);
Map.addLayer(roads, {color: 'yellow'}, '道路网络');
Export.table.toDrive({
collection: roads,
description: 'ChengGong_Roads',
fileFormat: 'SHP'
});
} catch (e) {
print('无法获取道路网络数据');
}
- 功能:获取呈贡区的道路网络数据,并将其导出到Google Drive。
- 注释:
ee.FeatureCollection
从Google的开放建筑物数据集中加载道路数据。filterBounds
过滤出位于呈贡区范围内的道路。Map.addLayer
将道路以黄色显示在地图上。Export.table.toDrive
将道路数据导出为Shapefile格式到Google Drive。
9. 打印处理信息
print('处理区域:昆明市呈贡区');
print('数据包括:建筑数据、Landsat 8影像、土地利用分类、DEM高程数据、坡度数据、Sentinel-2高分辨率影像');
print('注意:部分数据可能因访问限制而无法获取,代码已包含错误处理机制');
- 功能:打印处理区域和数据类型信息。
- 注释:
print
用于在控制台输出信息,提醒用户代码的处理内容和可能的限制。
Comments NOTHING