一、引言
本文以2015-2020年上海地区为研究区,基于GEE实现LUCC变化识别、驱动因子提取及重要性评估的完整流程,为LUCC驱动机制研究提供可复用的技术框架。
二、技术原理与数据基础
2.1 核心技术框架
LUCC驱动因子分析的核心逻辑是通过对比“变化区域”与“未变化区域”的环境与人文特征差异,识别对土地利用转换具有显著影响的因子。本研究采用“变化识别-因子提取-模型评估”三步框架:
- LUCC变化识别:通过两期土地覆盖数据对比,确定土地利用类型发生转换的空间范围;
- 驱动因子提取:选取与LUCC密切相关的自然与人文因子,构建因子数据集;
- 驱动机制评估:利用随机森林模型量化各因子对LUCC的贡献度(重要性),揭示主导驱动因子。
2.2 数据来源与预处理(实际上土地利用数据可以替换为前面发的内容中我们自己做的数据)
数据类型 | 数据源 | 空间分辨率 | 时间范围 | 预处理方法 |
---|---|---|---|---|
土地覆盖数据 | MODIS/MCD12Q1(LC_Type1) | 500m | 2015年、2020年 | 裁剪至研究区,提取主要地类代码 |
夜光数据 | NOAA/VIIRS/DNB(月度合成) | 500m | 2015-2020年 | 计算多年均值,反映人类活动强度 |
地表温度数据 | MODIS/MOD11A2(白天温度) | 1km | 2015-2020年 | 辐射定标(转换为℃),裁剪至研究区 |
植被指数数据 | MODIS/MOD13A2(NDVI) | 1km | 2015-2020年 | 辐射定标(转换为-1~1),计算均值 |
地形数据 | USGS/SRTMGL1_003(DEM) | 30m | 静态数据 | 重采样至500m,裁剪至研究区 |
三、代码实现与解析
3.1 研究区与参数设置
// 定义研究区(上海行政边界)
var roi = ee.FeatureCollection("projects/your/assets/SHANGHAI");
// 定义分析时段
var yearStart = 2015;
var yearEnd = 2020;
说明:研究区采用上海行政边界矢量数据,分析时段选取2015-2020年,该时段为上海城市化后期转型关键期,LUCC特征显著。
3.2 LUCC变化信息提取
// 函数:获取单年度MODIS土地覆盖数据
function getLUCC_MODIS(year) {
var img = ee.ImageCollection('MODIS/006/MCD12Q1')
.filter(ee.Filter.calendarRange(year, year, 'year')) // 按年份筛选
.first() // 获取该年度影像
.select('LC_Type1') // 选取土地覆盖类型波段
.clip(roi); // 裁剪至研究区
return img.rename('lc_' + year); // 重命名波段便于识别
}
// 获取起止年份土地覆盖数据
var lc_start = getLUCC_MODIS(yearStart);
var lc_end = getLUCC_MODIS(yearEnd);
// 识别变化区域(1=变化,0=未变化)
var lucc_change = lc_start.neq(lc_end).rename('lucc_change');
核心逻辑:通过对比2015年与2020年土地覆盖数据,利用neq
(不等于)运算识别类型转换区域,生成二值化变化图(变化=1,未变化=0)。
3.3 驱动因子数据集构建
// 1. 夜光强度(人类活动因子)
var night = ee.ImageCollection('NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG')
.filterDate(yearStart + '-01-01', yearEnd + '-12-31')
.mean() // 多年均值
.select('avg_rad').clip(roi).rename('night');
// 2. 地表温度(LST,环境因子)
var lst = ee.ImageCollection('MODIS/061/MOD11A2')
.filterDate(yearStart + '-01-01', yearEnd + '-12-31')
.select('LST_Day_1km')
.mean()
.multiply(0.02).subtract(273.15) // 辐射定标(K→℃)
.clip(roi).rename('lst');
// 3. 植被指数(NDVI,生态因子)
var ndvi = ee.ImageCollection('MODIS/061/MOD13A2')
.filterDate(yearStart + '-01-01', yearEnd + '-12-31')
.select('NDVI').mean().multiply(0.0001) // 辐射定标(0→10000→0→1)
.clip(roi).rename('ndvi');
// 4. 地形因子(DEM)
var dem = ee.Image('USGS/SRTMGL1_003').clip(roi).rename('dem');
数据处理说明:
- 夜光数据采用多年均值消除季节性波动,反映长期人类活动强度;
- 地表温度与NDVI均经过辐射定标,转换为物理意义明确的数值(℃、-1~1);
- 所有因子均裁剪至研究区,确保空间范围一致性。
3.4 特征栈合成与采样
// 合成特征栈(变化信息+驱动因子)
var featureStack = lucc_change.addBands([night, lst, ndvi, dem]);
var bands = ['night', 'lst', 'ndvi', 'dem']; // 驱动因子波段名
// 分层采样(确保变化/未变化样本均衡)
var samples = featureStack.stratifiedSample({
numPoints: 1000, // 总样本量
classBand: 'lucc_change', // 分类依据(变化/未变化)
region: roi,
scale: 500, // 采样分辨率(与土地覆盖数据一致)
geometries: true, // 保留采样点几何信息
seed: 2025, // 随机种子(保证结果可重复)
tileScale: 2 // 并行计算优化
});
采样设计:采用分层采样确保变化样本(lucc_change=1)与未变化样本(lucc_change=0)的比例均衡,避免因样本偏差影响模型精度。
3.5 驱动因子重要性评估(随机森林模型)
// 样本量检查(防错机制)
samples.size().evaluate(function(n){
if (n < 10) {
print('【警告】采样点数量不足10,无法建模,请扩大研究区或延长时间跨度');
} else {
// 随机森林建模
var classifier = ee.Classifier.smileRandomForest(50) // 50棵决策树
.train({
features: samples,
classProperty: 'lucc_change', // 因变量(变化/未变化)
inputProperties: bands // 自变量(驱动因子)
});
// 提取驱动因子重要性
var importances = ee.Dictionary(classifier.explain().get('importance'));
print('驱动因子重要性(数值越高影响越大):', importances);
// 变化预测(验证模型效果)
var prediction = featureStack.select(bands).classify(classifier);
}
});
模型原理:随机森林通过多棵决策树集成学习,计算各驱动因子在分类过程中的贡献度(重要性),数值越高表明该因子对LUCC的区分能力越强。
3.6 可视化与结果导出
// 基础可视化配置
Map.centerObject(roi, 9);
// LUCC变化空间分布
Map.addLayer(lucc_change, {min:0, max:1, palette:['#7fc97f','#beaed4']}, 'LUCC变化(0=未变,1=变化)');
// 预测结果可视化
Map.addLayer(prediction, {min:0, max:1, palette:['#e0ecf4','#8856a7']}, 'LUCC变化预测');
// 图例构建函数
function makeLegend(title, dict, position) {
var legend = ui.Panel({style: {position: position, padding: '8px 15px'}});
legend.add(ui.Label({value: title, style: {fontWeight: 'bold', fontSize: '14px'}}));
Object.keys(dict).forEach(function(key){
var entry = ui.Panel({layout: ui.Panel.Layout.Flow('horizontal')});
entry.add(ui.Label({style: {backgroundColor: dict[key], padding: '8px'}}));
entry.add(ui.Label(key));
legend.add(entry);
});
return legend;
}
// 添加图例
Map.add(makeLegend('LUCC变化类型', {'未变化':'#7fc97f','变化':'#beaed4'}, 'bottom-left'));
Map.add(makeLegend('预测变化类型', {'预测未变':'#e0ecf4','预测变化':'#8856a7'}, 'bottom-right'));
// 导出采样数据(用于本地验证)
Export.table.toDrive({
collection: samples,
description: 'LUCC_Driving_Factors_Samples',
fileFormat: 'CSV'
});
可视化设计:通过对比实际变化与预测变化的空间分布,直观评估模型效果;图例采用统一配色逻辑,确保变化/未变化类型的区分度。
可视化结果:
1. LUCC变化类型
2. 预测LUCC变化类型
四、结果分析与讨论
4.1 LUCC驱动因子重要性特征
以上海地区2015-2020年数据为例,驱动因子重要性通常表现为:
- 夜光强度(night):重要性最高,反映城市化进程中人类活动(如建设用地扩张)是LUCC的核心驱动;
- NDVI(ndvi):重要性次之,表明植被覆盖变化与土地利用转换(如耕地转建设用地)密切相关;
- 地表温度(lst):重要性中等,土地覆盖变化与热环境相互影响;
- DEM(dem):重要性最低,上海地形平坦,地形对LUCC的限制较弱。
1. 实际结果
4.2 方法优势与局限
优势:
- 全流程基于GEE实现,规避了海量遥感数据的本地存储与计算压力;
- 集成样本量检查、自动预警等防错机制,提升方法稳定性;
- 量化驱动因子重要性,为LUCC机制解析提供定量化依据。
局限:
- 未包含社会经济数据(如GDP、人口),人文驱动因子解析不够全面;
- MODIS数据分辨率(500m)较低,难以捕捉小尺度LUCC(如村级建设用地扩张)。
五、方法总结与应用展望
5.1 方法总结
本文提出的基于GEE的LUCC驱动因子分析方法,通过“数据-模型-可视化”全流程整合,实现了以下技术突破:
- 高效性:依托GEE云端计算能力,规避了传统方法中数据下载、预处理的繁琐流程,可在小时级完成大区域LUCC驱动因子分析;
- 鲁棒性:集成样本量自动检查、异常值预警等防错机制,确保模型在数据质量较差时仍能稳定输出结果或提示调整方案;
- 定量化:通过随机森林模型量化驱动因子重要性,突破了传统定性分析的局限,为LUCC机制解析提供可比较的数值依据。
5.2 应用展望
- 多尺度扩展:可将方法推广至区域(如长江三角洲)、全国乃至全球尺度,仅需替换研究区矢量数据并调整采样参数;
- 因子优化:后续可纳入社会经济数据(如夜间灯光数据细化至月度、POI兴趣点密度)和自然因子(如降水、土壤类型),提升驱动机制解析的全面性;
- 动态监测:通过逐年更新数据,构建LUCC驱动因子的时间序列,分析驱动机制的年际变化特征(如城市化后期人文因子影响力的衰减);
- 决策支持:基于驱动因子重要性结果,可为土地利用规划提供靶向建议(如针对夜光强度高的区域加强生态保护红线管控)。
欢迎关注下面的公众号获取更多内容!