GEE图表:基于Google Earth Engine的2014-2024年墨西哥城(CDMX)植被指数与地表温度分析

以下是将您提供的代码转化为中文博客的内容:

基于Google Earth Engine的植被指数与地表温度分析

一、研究背景与目的

在城市化快速发展的今天,城市热岛效应和植被覆盖变化成为环境科学研究的热点。本文旨在利用Google Earth Engine平台,分析墨西哥城(CDMX)地区的植被指数(NDVI)和地表温度(LST)变化情况,以期为城市规划和生态环境保护提供科学依据。

二、数据与方法

(一)研究区域与数据

研究区域为墨西哥城(CDMX),其地理坐标范围大致为东经-99.24502375380841到-99.12966730849591,北纬19.419140119882353到19.553781536579162。数据来源于Google Earth Engine平台的Landsat 8卫星影像,时间跨度为2013年1月1日至2024年12月31日。

(二)数据处理与分析方法

1. 数据预处理

对Landsat 8影像数据进行了一系列预处理操作。首先,应用了缩放因子,将影像的光学波段和热波段数据转换为实际的反射率和亮度温度。其次,进行了云层掩膜处理,通过分析影像的质量评估(QA)波段,去除云层和云影干扰,确保数据的准确性。

2. 指数计算

计算了植被指数(NDVI)和地表温度(LST)。NDVI是通过归一化植被指数公式计算得到的,用于反映植被覆盖度和生长状况。LST则是基于热红外波段数据,结合植被覆盖度信息,通过物理模型反演得到的,用于表征地表温度状况。

3. 时间序列分析

对2014年至2024年的LST数据进行了年际平均计算,生成了时间序列数据。通过绘制时间序列图表,分析了LST随时间的变化趋势,并进行了线性回归分析,拟合了LST随年份变化的线性趋势线。

三、结果与分析

(一)植被指数(NDVI)分析

通过计算得到的平均NDVI影像显示,墨西哥城地区的植被覆盖存在明显的空间差异。NDVI值从-1到1不等,其中正值表示植被覆盖较好,负值则表示植被覆盖较差或为非植被区域。从影像中可以看出,城市中心区域的NDVI值相对较低,而周边山区和绿地的NDVI值较高,这表明城市化对植被覆盖产生了显著影响。

(二)地表温度(LST)分析

平均LST影像揭示了墨西哥城地区的地表温度分布特征。LST值范围为11℃到55℃,其中高温区域主要集中在城市中心和工业区,而低温区域则多分布在植被覆盖较好的山区和水域附近。这说明城市热岛效应在该地区较为明显,城市建筑和人类活动对地表温度产生了显著的提升作用。

(三)时间序列分析

LST年际平均时间序列图表显示,2014年至2024年间,墨西哥城地区的LST整体呈上升趋势。线性回归分析结果表明,LST与年份之间存在显著的正相关关系,斜率为正值,表明随着时间的推移,地表温度逐渐升高。这一趋势可能与城市化进程的加快、人口增长以及气候变化等因素有关。

四、结论与展望

本文利用Google Earth Engine平台,对墨西哥城地区的植被指数(NDVI)和地表温度(LST)进行了分析。结果表明,城市化对植被覆盖和地表温度产生了显著影响,城市中心区域植被覆盖减少,地表温度升高。未来的研究可以进一步探讨不同土地利用类型对NDVI和LST的影响,以及气候变化与城市热岛效应之间的相互作用。此外,还可以结合实地观测数据,对模型结果进行验证和改进。

:以上内容是根据您提供的代码进行的中文转化和解读,代码中的注释和变量名等信息为分析提供了重要依据。

全部代码

// 定义研究区域的几何多边形
var aoi = 
    /* color: #0b4a8b */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon( // 创建一个几何多边形对象,用于表示研究区域
        [[[-99.24502375380841, 19.553781536579162], // 多边形的顶点坐标
          [-99.24502375380841, 19.419140119882353],
          [-99.12966730849591, 19.419140119882353],
          [-99.12966730849591, 19.553781536579162]]], null, false);
          Map.addLayer(aoi, {}, 'AOI - CDMX'); // 将研究区域添加到地图上
Map.centerObject(aoi, 10); // 将地图中心定位到研究区域,并设置缩放级别

// ----------------- PARTE 1: CONFIGURACIÓN -----------------
// 定义时间范围
var startDate = '2013-01-01'; // 开始日期
var endDate = '2024-12-31'; // 结束日期

// 定义 NDVI 的颜色调色板
var ndviPalette = [
  '#800000', '#a52a2a', '#b22222', '#cd5c5c', '#e9967a',
  '#f08080', '#fa8072', '#f4a460', '#f0e68c', '#fffacd',
  '#ffffe0', '#d9f99d', '#bbf7d0', '#86efac', '#4ade80',
  '#22c55e', '#16a34a', '#15803d', '#166534', '#14532d',
  '#0f3d22'
];

// 定义 NDVI 的标签
var ndviLabels = [
  '-1.0', '-0.9', '-0.8', '-0.7', '-0.6',
  '-0.5', '-0.4', '-0.3', '-0.2', '-0.1',
  ' 0.0', ' 0.1', ' 0.2', ' 0.3', ' 0.4',
  ' 0.5', ' 0.6', ' 0.7', ' 0.8', ' 0.9',
  ' 1.0'
];

// 定义 LST 的颜色调色板
var lstPalette2 = [
  '0000ff', // Azul (frío) 冷色
  '00bfff', // Azul claro 浅蓝色
  '00ffbf', // Verde-azulado 青绿色
  '00ff00', // Verde 绿色
  'bfff00', // Verde amarillento 黄绿色
  'ffff00', // Amarillo 黄色
  'ffbf00', // Naranja claro 浅橙色
  'ff8000', // Naranja fuerte 深橙色
  'ff4000', // Naranja-rojo 橙红色
  'ff0000', // Rojo puro 纯红色
  'b30000', // Rojo oscuro 深红色
  '7f0000'  // Rojo muy oscuro (extremo calor) 极热深红色
];
  

// ----------------- PARTE 2: FUNCIONES -----------------
// 应用缩放因子的函数
function applyScaleFactors(image) {
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2); // 对光学波段应用缩放因子
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0); // 对热波段应用缩放因子
  return image.addBands(opticalBands, null, true) // 添加处理后的光学波段
              .addBands(thermalBands, null, true); // 添加处理后的热波段
}

// 云层掩膜函数
function cloudMask(image) {
  var cloudShadowBitmask = (1 << 3); // 定义云影掩膜位
  var cloudBitmask = (1 << 5); // 定义云掩膜位
  var qa = image.select('QA_PIXEL'); // 选择 QA_PIXEL 波段
  var mask = qa.bitwiseAnd(cloudShadowBitmask).eq(0) // 创建云影掩膜
                .and(qa.bitwiseAnd(cloudBitmask).eq(0)); // 创建云掩膜
  return image.updateMask(mask); // 更新图像掩膜
}

// 计算 NDVI 和 LST 的函数
function computeLST(image) {
  var ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('ndvi'); // 计算 NDVI

  // 固定的 NDVI 最小值和最大值(可根据需要调整)
  var ndviMin = -0.2;
  var ndviMax = 0.8;
  var fv = ((ndvi.subtract(ndviMin)).divide(ndviMax - ndviMin)).pow(2); // 计算植被分数
  var em = fv.multiply(0.004).add(0.986).rename('em'); // 计算发射率

  var thermal = image.select('ST_B10').rename('thermal'); // 选择热波段

  var lst = thermal.expression( // 计算 LST
    '(TB / (1 + (0.00115 * (TB / 1.438)) * log(em))) - 273.15',
    {
      'TB': thermal,
      'em': em
    }).rename('LST');

  return image.addBands(ndvi).addBands(lst).copyProperties(image, ['system:time_start']); // 添加 NDVI 和 LST 波段,并复制时间属性
}

// ----------------- PARTE 3: COLECCIÓN LANDSAT -----------------
// 创建 Landsat 图像集合
var landsatCollection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') // 选择 Landsat 8 数据集
                            .filterBounds(aoi) // 按研究区域过滤
                            .filterDate(startDate, endDate) // 按时间范围过滤
                            .map(applyScaleFactors) // 应用缩放因子
                            .map(cloudMask) // 应用云层掩膜
                            .map(computeLST); // 计算 NDVI 和 LST

// ----------------- PARTE 4: MEDIANAS PARA MAPA -----------------
// 计算 NDVI 和 LST 的平均值
var meanNdvi = landsatCollection.select('ndvi').mean().clip(aoi); // 计算 NDVI 平均值并裁剪到研究区域
var meanLst = landsatCollection.select('LST').mean().clip(aoi); // 计算 LST 平均值并裁剪到研究区域

// ----------------- PARTE 5: VISUALIZACIÓN EN MAPA -----------------
Map.centerObject(aoi, 10); // 将地图中心定位到研究区域
Map.addLayer(meanNdvi, {min: -1, max: 1, palette: ndviPalette}, 'NDVI 2024'); // 将 NDVI 平均值添加到地图
Map.addLayer(meanLst, {min: 11, max: 55, palette: lstPalette2}, 'LST 2024'); // 将 LST 平均值添加到地图

// ----------------- PARTE 6: SERIES DE TIEMPO -----------------
// ---------------- SERIE ANUAL DE LST (PROMEDIO POR AÑO) ----------------
var years = ee.List.sequence(2014, 2024); // 创建年份列表

// 计算每年 LST 平均值的函数
var annualLST = ee.ImageCollection.fromImages(
  years.map(function(year) {
    var start = ee.Date.fromYMD(year, 1, 1);
    var end = start.advance(1, 'year');

    var yearCollection = landsatCollection
      .filterDate(start, end)
      .select('LST');

    var meanImage = yearCollection.mean()
      .set('year', year)
      .set('system:time_start', start.millis());

    return meanImage;
  })
);

// Gráfica de LST anual
var annualChartLST = ui.Chart.image.seriesByRegion({
  imageCollection: annualLST,
  regions: aoi,
  reducer: ee.Reducer.mean(),
  scale: 30,
  xProperty: 'system:time_start'
})
.setChartType('ScatterChart')  // <-- IMPORTANTE: cambiar tipo de gráfico
.setOptions({
  title: 'LST Annual Average - CDMX (2014-2024)',
  lineWidth: 2,
  pointSize: 5,
  interpolateNulls: true,
  vAxis: {title: 'Temperature (°C)'},
  hAxis: {
    title: 'Año',
    format: 'yyyy',
    slantedText: false
  },
  colors: ['#e31a1c'],
  trendlines: {
    0: {
      type: 'linear',
      color: 'black',
      lineWidth: 2,
      opacity: 0.7,
      showR2: true,  // Muestra el R^2 en la gráfica
      visibleInLegend: true
    }
  }
});
print(annualChartLST);

// --- Calcular regresión lineal y mostrar ecuación de tendencia ---
var lstRegression = ee.FeatureCollection(
  annualLST.map(function(image) {
    var year = ee.Number(image.get('year'));
    var mean = image.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: aoi,
      scale: 30,
      maxPixels: 1e13
    }).get('LST');
    return ee.Feature(null, {'year': year, 'LST': mean});
  })
);

// Calcular regresión lineal (LST = m*año + b)
var regression = lstRegression.reduceColumns({
  reducer: ee.Reducer.linearFit(),
  selectors: ['year', 'LST']
});

// Obtener pendiente y ordenada al origen
var slope = regression.get('scale');
var intercept = regression.get('offset');

// Imprimir ecuación en consola
print('Ecuación de la línea de tendencia LST:', 
      'LST =', slope, '* año +', intercept);

Map.setOptions('SATELLITE');

结果

时序图表可视化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

此星光明

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

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

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

打赏作者

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

抵扣说明:

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

余额充值