GEE图表分析:利用Google Earth Engine(GEE)平台,分析地区的地表温度(LST)数据,并计算城市热岛(SUHI)效应

这段代码的主要功能是利用Google Earth Engine(GEE)平台,分析地区的地表温度(LST)数据,并计算城市热岛(SUHI)效应。以下是代码的主要功能和实现逻辑:

数据集

  • MODIS/061/MCD12Q1:提供全球土地覆盖类型数据,时间跨度为2001年至2020年。该数据集基于国际地球-生物圈计划(IGBP)、马里兰大学(UMD)等分类方案,提供多种土地覆盖类型。
  • MODIS/061/MOD11A2:提供8天平均地表温度(LST)数据,空间分辨率为1公里。该数据集包含白天和夜间的LST数据,并提供质量控制指标。

功能实现

  1. 区域设置

    • 定义了两个区域:aoi(分析区域)和g_urban(城市区域)。aoi用于整个分析区域,g_urban用于城市区域的分析。
  2. 时间范围

    • 分析的时间范围为2014年1月1日至2024年12月31日。
  3. 土地覆盖数据

    • 使用MODIS/061/MCD12Q1数据集,选择LC_Type1波段,获取土地覆盖类型。
  4. 地表温度数据

    • 使用MODIS/061/MOD11A2数据集,选择LST_Day_1kmLST_Night_1km波段,分别获取白天和夜间的地表温度。
    • 将温度单位从开尔文转换为摄氏度。
  5. 年度平均计算

    • 定义了一个函数annualMeanLST,用于计算每个年份的平均地表温度。
    • 对白天和夜间的地表温度分别计算年度平均值。
  6. 时间序列分析

    • 利用ui.Chart.image.series函数,绘制了2014年至2024年期间,白天和夜间地表温度的年度平均值的时间序列图。
    • 同时,生成了表格形式的数据,便于查看每年的具体数值。
  7. 城市与乡村对比

    • 对比了城市区域(g_urban)和乡村区域(g_cs)的白天和夜间地表温度。
    • 绘制了城市和乡村区域的年度平均温度对比图。
  8. 城市热岛(SUHI)效应

    • 计算了城市区域与乡村区域之间的地表温度差异(SUHI),分别计算了白天和夜间的SUHI。
    • 绘制了年度SUHI的时间序列图,并计算了2014年至2024年期间SUHI的平均值。

输出结果

  • 地图可视化:在GEE平台上,将分析区域(aoi)和城市区域(g_urban)显示在地图上。
  • 时间序列图:展示了2014年至2024年期间,白天和夜间地表温度的年度平均值,以及城市与乡村区域的对比。
  • SUHI分析:展示了城市热岛效应的年度变化,并计算了平均SUHI值。

总结

这段代码利用GEE平台,结合MODIS地表温度和土地覆盖数据,对墨西哥城地区的地表温度进行了详细的分析,并计算了城市热岛效应。通过年度平均温度的时间序列分析和城市与乡村区域的对比,可以更好地理解城市化对地表温度的影响。

全部代码

var aoi = 
    /* color: #d63000 */
    /* shown: false */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[-9.3603515625, 38.91703381047962],
          [-9.3603515625, 38.436734248948085],
          [-8.8330078125, 38.436734248948085],
          [-8.8330078125, 38.91703381047962]]], null, false),
    g_urban = 
    /* color: #98ff00 */
    /* displayProperties: [
      {
        "type": "rectangle"
      }
    ] */
    ee.Geometry.Polygon(
        [[[-8.90991210937524, 38.74323841549712],
          [-8.90991210937524, 38.6982376351335],
          [-8.848114013672115, 38.6982376351335],
          [-8.848114013672115, 38.74323841549712]]], null, false);Map.addLayer(aoi, {}, 'AOI - CDMX');
//Map.addLayer(g_cs, {}, 'g_cs - CDMX');
Map.addLayer(g_urban, {}, 'g_urban - CDMX');
Map.centerObject(aoi, 10);

// ----------------- PARTE 1: CONFIGURACIÓN -----------------
var startDate = '2014-01-01';
var endDate = '2024-12-31';

var lstPalette = [
  '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 -----------------
// ----------------- MODIS LAND COVER DATA -----------------

var modisLandCover = ee.ImageCollection("MODIS/061/MCD12Q1")
                       .mode()
                       .select('LC_Type1');
                       
// 4. Visualize Land Cover Data
var landCoverVisualization = {
  min: 11.0,
  max: 55.0,
  palette: lstPalette ,
};

// Función para agregar por año
function annualMeanLST(collection) {
  return ee.ImageCollection(
    ee.List.sequence(2014, 2024).map(function(year) {
      var start = ee.Date.fromYMD(year, 1, 1);
      var end = start.advance(1, 'year');
      
      var meanImage = collection
        .filterDate(start, end)
        .mean()
        .set('year', year)
        .set('system:time_start', start.millis()); // Para que el eje X funcione

      return meanImage;
    })
  );
}



var lstDay = ee.ImageCollection("MODIS/061/MOD11A2")
  .select('LST_Day_1km')
  .filterDate(startDate, endDate)
  .map(function(image) {
    return image.multiply(0.02).subtract(273.15)
      .copyProperties(image, image.propertyNames());
  });

var lstNight = ee.ImageCollection("MODIS/061/MOD11A2")
  .select('LST_Night_1km')
  .filterDate(startDate, endDate)
  .map(function(image) {
    return image.multiply(0.02).subtract(273.15)
      .copyProperties(image, image.propertyNames());
  });
  
var lstDayAnnual = annualMeanLST(lstDay);
var lstNightAnnual = annualMeanLST(lstNight);


// ----------------- PARTE 3: SERIES DE TIEMPO -----------------
// Gráfica para LST Diurna (promedio anual)
print(
  ui.Chart.image.series({
    imageCollection: lstDayAnnual,
    region: aoi,
    reducer: ee.Reducer.mean(),
    scale: 500,
    xProperty: 'system:time_start'
  }).setOptions({
    title: 'Average Annual Daytime LST in Mexico City (2014–2024)',
    hAxis: {title: 'Year', format: 'yyyy'},
    vAxis: {title: 'Temperature (°C)'},
    lineWidth: 2,
    pointSize: 4,
    colors: ['#d6662c']
  })
);
//
var lstDayTable = ui.Chart.image.series({
  imageCollection: lstDayAnnual,
  region: aoi,
  reducer: ee.Reducer.mean(),
  scale: 500,
  xProperty: 'system:time_start'
}).setChartType('Table')
  .setOptions({
    title: 'Valores de LST Diurna por Año',
    hAxis: {title: 'Year'},
    vAxis: {title: 'Temperatura (°C)'}
  });
  
print(lstDayTable);  
//
// Gráfica para LST Nocturna (promedio anual)
print(
  ui.Chart.image.series({
    imageCollection: lstNightAnnual,
    region: aoi,
    reducer: ee.Reducer.mean(),
    scale: 500,
    xProperty: 'system:time_start'
  }).setOptions({
    title: 'Average Annual Nighttime LST in Mexico City(2014–2024)',
    hAxis: {title: 'Year', format: 'yyyy'},
    vAxis: {title: 'Temperature (°C)'},
    lineWidth: 2,
    pointSize: 4,
    colors: ['#191970']
  })
);
/
var lstNightTable = ui.Chart.image.series({
  imageCollection: lstNightAnnual,
  region: aoi,
  reducer: ee.Reducer.mean(),
  scale: 500,
  xProperty: 'system:time_start'
}).setChartType('Table')
  .setOptions({
    title: 'Valores de LST Diurna por Año',
    hAxis: {title: 'Año'},
    vAxis: {title: 'Temperatura (°C)'}
  });

print(lstNightTable);
/ PARTE 4.- graficas urban zone and countryside ///
// Gráfica para LST Diurna (promedio anual)
print(
  ui.Chart.image.series({
    imageCollection: lstDayAnnual,
    region: g_urban,
    reducer: ee.Reducer.mean(),
    scale: 500,
    xProperty: 'system:time_start'
  }).setOptions({
    title: 'Average Annual Daytime LST (g_urban) in Mexico City (2014–2024)',
    hAxis: {title: 'Year', format: 'yyyy'},
    vAxis: {title: 'Temperature (°C)'},
    lineWidth: 2,
    pointSize: 4,
    colors: ['#e31a1c']
  })
);

print(
  ui.Chart.image.series({
    imageCollection: lstDayAnnual,
    region: g_cs,
    reducer: ee.Reducer.mean(),
    scale: 500,
    xProperty: 'system:time_start'
  }).setOptions({
    title: 'Average Annual Daytime LST (g_cs) in Mexico City (2014–2024)',
    hAxis: {title: 'Year', format: 'yyyy'},
    vAxis: {title: 'Temperature (°C)'},
    lineWidth: 2,
    pointSize: 4,
    colors: ['#191970']
  })
);

GRAFICA SUHI EARLY/



//
// Gráfica para LST Nocturna (promedio anual)
print(
  ui.Chart.image.series({
    imageCollection: lstNightAnnual,
    region: g_urban,
    reducer: ee.Reducer.mean(),
    scale: 500,
    xProperty: 'system:time_start'
  }).setOptions({
    title: 'Average Annual Nighttime LST(g_urban) in Mexico City(2014–2024)',
    hAxis: {title: 'Year', format: 'yyyy'},
    vAxis: {title: 'Temperature (°C)'},
    lineWidth: 2,
    pointSize: 4,
    colors: ['#e31a1c']
  })
);

print(
  ui.Chart.image.series({
    imageCollection: lstNightAnnual,
    region: g_cs,
    reducer: ee.Reducer.mean(),
    scale: 500,
    xProperty: 'system:time_start'
  }).setOptions({
    title: 'Average Annual Nighttime LST(g_cs) in Mexico City(2014–2024)',
    hAxis: {title: 'Year', format: 'yyyy'},
    vAxis: {title: 'Temperature (°C)'},
    lineWidth: 2,
    pointSize: 4,
    colors: ['#191970']
  })
);

/ PARTE 5.- graficas merge urban zone and countryside ///
// Extraer geometría si son FeatureCollections
var g_cs_geom = g_cs.geometry();
var g_urban_geom = g_urban.geometry();

// Crear FeatureCollection con etiquetas
var regionsList = ee.FeatureCollection([
  ee.Feature(g_cs_geom, {'label': 'Countryside'}),
  ee.Feature(g_urban_geom, {'label': 'Urban'})
]);

// Gráfica combinada para regiones
var annualChartLST_day = ui.Chart.image.seriesByRegion({
  imageCollection: lstDayAnnual,
  regions: regionsList,
  reducer: ee.Reducer.mean(),
  scale: 30,
  xProperty: 'system:time_start',
  seriesProperty: 'label'
})
.setChartType('ScatterChart')
.setOptions({
  title: 'Comparison between the annual daytime average of urban and rural LST - CDMX (2014-2024)',
  lineWidth: 2,
  pointSize: 5,
  interpolateNulls: true,
  vAxis: {title: 'Temperature (°C)'},
  hAxis: {
    title: 'Year',
    format: 'yyyy'
  },
  colors: ['#1f78b4', '#e31a1c']
});

print(annualChartLST_day);

/// Night Graph 

// Gráfica combinada para regiones
var annualChartLST_night = ui.Chart.image.seriesByRegion({
  imageCollection: lstNightAnnual,
  regions: regionsList,
  reducer: ee.Reducer.mean(),
  scale: 30,
  xProperty: 'system:time_start',
  seriesProperty: 'label'
})
.setChartType('ScatterChart')
.setOptions({
  title: 'Comparison between the annual nighttime average of urban and rural LST - CDMX (2014-2024)',
  lineWidth: 2,
  pointSize: 5,
  interpolateNulls: true,
  vAxis: {title: 'Temperature (°C)'},
  hAxis: {
    title: 'Year',
    format: 'yyyy'
  },
  colors: ['#1f78b4', '#e31a1c']
});

print(annualChartLST_night);





// Función para crear una FeatureCollection con SUHI diurno y nocturno
var suhiYearly = ee.FeatureCollection(
  ee.List.sequence(2014, 2024).map(function(year) {
    var date = ee.Date.fromYMD(year, 1, 1);

    var dayImage = lstDayAnnual.filter(ee.Filter.eq('year', year)).first();
    var nightImage = lstNightAnnual.filter(ee.Filter.eq('year', year)).first();

    // Reducir a promedios por región
    var urbanDay = dayImage.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: g_urban,
      scale: 1000,
      maxPixels: 1e13
    }).get('LST_Day_1km');  // Banda renombrada

    var ruralDay = dayImage.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: g_cs,
      scale: 1000,
      maxPixels: 1e13
    }).get('LST_Day_1km');

    var urbanNight = nightImage.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: g_urban,
      scale: 1000,
      maxPixels: 1e13
    }).get('LST_Night_1km');

    var ruralNight = nightImage.reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: g_cs,
      scale: 1000,
      maxPixels: 1e13
    }).get('LST_Night_1km');

    // Calcular SUHI
    var suhi_day = ee.Number(urbanDay).subtract(ee.Number(ruralDay));
    var suhi_night = ee.Number(urbanNight).subtract(ee.Number(ruralNight));

    return ee.Feature(null, {
      'year': year,
      'system:time_start': date.millis(),
      'SUHI_Day': suhi_day,
      'SUHI_Night': suhi_night
    });
  })
);

var suhiChart = ui.Chart.feature.byFeature({
  features: suhiYearly,
  xProperty: 'system:time_start',
  yProperties: ['SUHI_Day', 'SUHI_Night']
}).setOptions({
  title: 'Annual SUHI (Day vs Night) - CDMX (2014–2024)',
  hAxis: {title: 'Year', format: 'yyyy'},
  vAxis: {title: 'SUHI (°C)'},
  lineWidth: 2,
  pointSize: 5,
  colors: ['#e31a1c', '#1f78b4'],  // Rojo para día, azul para noche
  legend: {position: 'bottom'}
});

print(suhiChart);


// Calcular el promedio de todos los años para SUHI Día y Noche
var suhi_day_mean = suhiYearly.aggregate_mean('SUHI_Day');
var suhi_night_mean = suhiYearly.aggregate_mean('SUHI_Night');

// Evaluar e imprimir
ee.Dictionary({
  'Promedio SUHI Día (°C)': suhi_day_mean,
  'Promedio SUHI Noche (°C)': suhi_night_mean
}).evaluate(function(dict) {
  print('📊 Promedio SUHI (2014–2024):');
  print('SUHI Día promedio:', dict['Promedio SUHI Día (°C)'].toFixed(2), '°C');
  print('SUHI Noche promedio:', dict['Promedio SUHI Noche (°C)'].toFixed(2), '°C');
});


// Imprimir SUHI año por año
suhiYearly.evaluate(function(fc) {
  print('🟡 SUHI (°C) por año:');

  fc.features.forEach(function(f) {
    var year = f.properties.year;
    var suhi_day = f.properties.SUHI_Day;
    var suhi_night = f.properties.SUHI_Night;

    print('year ' + year + ': SUHI Day = ' + suhi_day.toFixed(2) + ' °C, SUHI Night = ' + suhi_night.toFixed(2) + ' °C');
  });
});

结果

LST的可视化分析

校园失物招领微信小程序源码, 失物招领小程序主要为解决大学生时常丢失物品而且很难找回以及归还过程繁琐不方便的问题, 与传统的失物招领方式不同,该款校园失误招领小程序拥有快捷发布寻物启事和失误找领功能, 快速查找、极速归还、高效沟通、防误领冒领等功能, 在开发校园失物招领小程序前与用户访谈发现有近40的同学校园内频繁丢失物品、证件、校园卡等, 数码产品、日用品等,丢失区域主要发生在教学楼、图书馆和食堂。 拾领校园失物招领小程序继承了寻物启事和失物招领,丢失物品或拾取物品都可发布帖子, 首页的横幅滚动公告展示通知公告等,banner图片化的方式更具有视觉吸引力, 最新信息可显示最近发布的招领信息或寻物信息,更加方便快捷的展示信息, 用户可通过首页的发布按钮发布帖子,发布者只需填写物品的相关信息,类别、地点等相关信息, 且可以填写手机号开启认领验证,可以一键生成二维码分享或分享至群聊和朋友圈。 列表内可以筛选物品类别或精确搜索,物品详情里可展示物品的相关信息, 确认是自己的物品后可点击认领,然后验证信息,需填写物品的关键信息以作辨认, 防止冒领误领,物品详情页可生成二维码海报分享,还有即时的消息联系功能以提高沟通效率, 发布者还可选择放置在代收处,双方还可以通过拨打电话紧急联系,用于紧急情况,让失物找到主人, 个人中心可以管理发布的物品帖子,管理个人信息,包括昵称、默认学校、手机号的修改、 编辑发布的物品帖子、获取帮助等。帮助用户流畅的使用该小程序。
Google Earth Engine (GEE) 平台上,你可以通过以下几个步骤来获取和分析海口市的水体面积数据: 1. **登录和初始化**: 首先,你需要在GEE官网上创建账号登录到GEE开发者控制台。然后,在Python Notebook或客户端中导入`ee`库,初始化它。 ```python import ee ee.Authenticate() # 登录授权 ee.Initialize() # 初始化GEE API ``` 2. **选择遥感数据源**: 使用GEE提供的卫星影像数据,如Sentinel-2或Landsat系列,它们包含对地表覆盖的详细信息。可以搜索特定时间范围内的水面反射率(例如,NDWI - 水体指数)来识别水体。 ```python # 查询海口市附近的时间窗口和数据集合 date_range = ee.DateRange('2020-01-01', '2020-12-31') landsat_dataset = ee.ImageCollection("LANDSAT/LC08/C01/T1_SR").filterDate(date_range) ``` 3. **计算水体面积**: 利用遥感数据中的水面指标,比如NDWI,结合阈值来提取水体区域。可以使用`select`和`reduceRegion`函数来计算每个像元的水体面积。 ```python def water_index(image): ndwi = image.select(['B4', 'B3']).normalizedDifference() return ndwi water_image = landsat_dataset.map(water_index).mosaic() water_mask = water_image.gt(0.25) # 这里是一个示例阈值,实际可能需要调整 water_area = water_mask.reduce(ee.Reducer.sum()) ``` 4. **分析数据**: 分析提取的水体面积时间序列,可能包括趋势分析、季节变化等。你可以使用统计方法或者可视化工具来呈现结果。 ```python # 计算平均每月水体面积 monthly_water_area = water_area.resample('month').mean().getInfo() ``` 5. **可视化**: 最后,你可以利用GEE的绘图功能展示海口市水体面积的变化情况。 ```python ee.Image(monthly_water_area).visualize(min=0, max=monthly_water_area.max(), palette=['blue']) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

此星光明

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

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

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

打赏作者

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

抵扣说明:

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

余额充值