GEE区域分析(生成时间序列 time series)

GEE官方文档

对于单个省(以内蒙古为例,内蒙古数据质量较好)生成时间序列

//单个省的时间序列
var neimeng = ee.FeatureCollection('users/peisipand/cn_province')
                    .filter(ee.Filter.eq('OBJECTID',5)).geometry();
Map.addLayer(neimeng)

var CH4_col = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_CH4')
                     .filter(ee.Filter.date('2020-01-01', '2021-01-01'))
                     .select('CH4_column_volume_mixing_ratio_dry_air');

// Define the chart and print it to the console.
var chart = ui.Chart.image
                .doySeries({
                  imageCollection: CH4_col,
                  region: neimeng,
                  regionReducer: ee.Reducer.mean(),
                  scale: 5000,
                  yearReducer: ee.Reducer.mean(),
                  startDay: 1,
                  endDay: 365
                })
                .setOptions({
                  title: 'Average CH4 for Neimeng',
                  hAxis: {
                    title: 'Day of year',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  vAxis: {
                    title: 'CH4(ppb)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  lineWidth: 5,
                  colors: ['39a8a7'],
                });
print(chart);

效果如图:
在这里插入图片描述
内蒙古甲烷一年的变化趋势,先降低再升高再降低。

TROPOMI的数据一天大概是13景左右,一年下来4000多景,如果时间范围继续扩大的话,imageCollection的数量会超过5000,这时候貌似就会报错,所以先把collection处理成日均的比较好,反正也不关心一天内的变化。

var china = ee.FeatureCollection('users/peisipand/cn_province');
var doy = ee.List.sequence(1,365)
var imgDay = doy.map(function(day){
  var startDay = ee.Date('2020-01-01').advance(day,"day")
  var image = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_CH4')
    .filterDate(startDay,startDay.advance(1,"day"))
    .select('CH4_column_volume_mixing_ratio_dry_air')
    .mean()
    .clip(china).set('system:time_start',startDay)
    return image
  })
var vegIndices = ee.ImageCollection(imgDay)
print(vegIndices)
Map.addLayer(vegIndices.first())

var neimeng = china.filter(ee.Filter.eq('OBJECTID',5)).geometry().bounds();
var neimeng = ee.Feature(neimeng,{name:'neimeng'})
print(neimeng)
var xinjiang = china.filter(ee.Filter.eq('OBJECTID',31)).geometry().bounds();
var xinjiang = ee.Feature(xinjiang,{name:'xinjiang'})
var ecoregions = ee.FeatureCollection([neimeng,xinjiang]);

var chart = ui.Chart.image
                .doySeriesByRegion({
                  imageCollection: vegIndices,
                  bandName: 'CH4_column_volume_mixing_ratio_dry_air',
                  regions: ecoregions,
                  regionReducer: ee.Reducer.mean(),
                  scale: 5000,
                  yearReducer: ee.Reducer.mean(),
                  seriesProperty: 'name',
                  startDay: 1,
                  endDay: 365
                })
                .setOptions({
                  title: 'Average CH4 by Day of Year',
                  hAxis: {
                    title: 'Day of year',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  vAxis: {
                    title: 'CH4 (ppb)',
                    titleTextStyle: {italic: false, bold: true}
                  },
                  lineWidth: 5,
                  colors: ['f0af07', '0f8755'],
                });
print(chart);
### 使用 GEE 计算和制作长时间序列 NDVI 数据 通过 Google Earth Engine (GEE),可以高效处理 MODIS 的 NDVI 数据集 `MODIS/061/MOD13Q1` 并生成时间序列的变化曲线。以下是实现这一目标的具体方法: #### 1. 加载数据并筛选时间范围 首先加载所需的数据集,并定义研究区域(AOI)。可以通过指定日期范围来获取长期的 NDVI 时间序列。 ```javascript // 定义感兴趣区域(AOI) var aoi = ee.Geometry.Rectangle([78, 19, 80, 21]); // 示例经纬度坐标 // 载入NDVI数据集 var dataset = ee.ImageCollection('MODIS/061/MOD13Q1') .filterDate('2000-01-01', '2023-01-01') // 设置时间范围 .select('NDVI'); // 只选择NDVI波段 ``` 此部分代码实现了对特定时间段内的 NDVI 波段的选择[^1]。 --- #### 2. 提取时间和空间平均值 为了生成时间序列,需提取 AOI 内的空间平均 NDVI 值,并将其按时间顺序排列。 ```javascript // 获取每张影像的时间戳及其对应的NDVI均值 var ndviTimeSeries = dataset.map(function(image) { var date = image.date().format('YYYY-MM-dd'); var meanNdvi = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: aoi, scale: 250, // MODIS分辨率() maxPixels: 1e9 }).get('NDVI'); return ee.Feature(null, {date: date, NDVI: meanNdvi}); }); // 将Feature集合转换为表格形式 ndviTimeSeries = ndviTimeSeries.filter(ee.Filter.notNull(['NDVI'])); print(ndviTimeSeries); ``` 上述代码片段展示了如何计算每个图像中的 NDVI 平均值以及对应的时间戳。 --- #### 3. 绘制 NDVI 长时间序列变化曲线 利用 Google Chart 工具库绘制 NDVI 曲线图。颜色配置可通过自定义设置完成。 ```javascript // 准备绘图数据 var chartData = ee.List(ndviTimeSeries.aggregate_array('date')) .zip(ndviTimeSeries.aggregate_array('NDVI')); // 创建图表对象 var chart = ui.Chart.array.values(chartData, 0, ['date', 'NDVI']) .setOptions({ title: 'NDVI Time Series', hAxis: {title: 'Date'}, vAxis: {title: 'NDVI Value'}, colors: ['#1c9099'], // 自定义颜色 lineWidth: 1, pointSize: 4 }); // 显示图表 print(chart); ``` 这段代码说明了如何基于之前提取的 NDVI 和时间信息创建可视化图形[^2]。 --- #### 4. 导出结果至本地文件 如果希望保存这些数据到 CSV 文件以便进一步分析,则可执行如下操作: ```javascript // 导出NDVI时间序列数据 Export.table.toDrive({ collection: ndviTimeSeries, description: 'NDVI_Time_Series', fileFormat: 'CSV' }); ``` 该命令允许用户将生成的结果存储于 Google Drive 中以供后续下载使用。 --- ### 总结 以上流程涵盖了从加载遥感数据、计算统计量直至最终呈现与导出的过程。借助 GEE 强大的云计算能力,能够轻松应对大规模时空数据分析需求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值