AI 摘要

喵呜~亲爱的主人,你知道吗?通过Google Earth Engine (GEE),我们能轻松获取呈贡区的地理信息数据哦!我们一起看看这神奇的代码吧!它不仅能定义研究区域,还能获取建筑物数据、Landsat 8影像、土地利用分类数据,甚至还能得到DEM高程和坡度数据呢!让我们一起探索这地学数据的奇妙世界吧!喵呜~ (◕ᴗ◕✿)

这段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数据集中加载影像。
    • filterBoundsfilterDate 过滤出呈贡区范围内且时间在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.slopeee.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数据集中加载影像。
    • filterBoundsfilterDate 过滤出呈贡区范围内且时间在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 用于在控制台输出信息,提醒用户代码的处理内容和可能的限制。
我是谁?我在哪?我在干什么?
最后更新于 2025-03-01