基于 Google Earth Engine (GEE) 的土地利用变化监测

一、引言

土地利用变化是全球环境变化的重要组成部分,对生态系统、气候和人类社会产生深远影响。利用遥感技术可以快速、准确地获取土地利用信息,监测其变化情况。本文将详细介绍如何使用 GEE 对特定区域的 Landsat 影像进行处理,实现土地利用分类和(动态)变化监测。

二、代码实现

2.1 定义研究区域

// ------------ 1. 定义研究区(矩形范围)------------
var west = 117.50;   // 东经117°50′
var south = 30.49;   // 北纬30°49′
var east = 117.54;   // 东经117°54′
var north = 30.53;   // 北纬30°53′

// 创建研究区域
var studyArea = ee.Geometry.Rectangle([west, south, east, north]);

通过定义经纬度范围,创建了一个矩形的研究区域。

2.2 定义时间范围

// ------------ 2. 定义时间范围(约 5 年)------------
var startDate1 = '2015-01-01';
var endDate1 = '2015-12-31';
var startDate2 = '2020-01-01';
var endDate2 = '2020-12-31';

设置了两个时间范围,分别为 2015 年和 2020 年,用于对比不同时间的土地利用情况。

2.3 加载并筛选 Landsat 影像

// ------------ 3. 加载 Landsat 影像并筛选 ------------
function getLandsatImageCollection(startDate, endDate) {
  var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
    .filterBounds(studyArea)
    .filterDate(startDate, endDate)
    .median();
  return collection.clip(studyArea);
}

var image1 = getLandsatImageCollection(startDate1, endDate1);
var image2 = getLandsatImageCollection(startDate2, endDate2);

定义了一个函数 getLandsatImageCollection,用于加载并筛选指定时间范围和研究区域内的 Landsat 8 影像,并计算影像集合的中值,最后裁剪到研究区域。

2.4 选择用于分类的波段

// ------------ 4. 选择用于分类的波段 ------------
var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'];

选择了 Landsat 8 的 6 个波段用于后续的分类。

2.5 定义训练样本

// ------------ 5. 定义训练样本(示例,需要根据实际情况修改) ------------
// 假设我们有水体、植被、建设用地三类
var water = ee.Geometry.Point([117.51, 30.50]);
var vegetation = ee.Geometry.Point([117.52, 30.51]);
var builtup = ee.Geometry.Point([117.53, 30.52]);

var trainingPoints = ee.FeatureCollection([
  ee.Feature(water, {class: 0}),
  ee.Feature(vegetation, {class: 1}),
  ee.Feature(builtup, {class: 2})
]);

var training1 = image1.select(bands).sampleRegions({
  collection: trainingPoints,
  properties: ['class'],
  scale: 30
});

var training2 = image2.select(bands).sampleRegions({
  collection: trainingPoints,
  properties: ['class'],
  scale: 30
});

定义了三个训练样本点,分别代表水体、植被和建设用地,并将其存储在一个特征集合中。然后,从影像中提取这些样本点的波段值,用于训练分类器。

2.6 训练分类器

// ------------ 6. 训练分类器 ------------
var classifier1 = ee.Classifier.smileRandomForest(10).train({
  features: training1,
  classProperty: 'class',
  inputProperties: bands
});

var classifier2 = ee.Classifier.smileRandomForest(10).train({
  features: training2,
  classProperty: 'class',
  inputProperties: bands
});

使用随机森林分类器对两个时间的训练数据进行训练。

2.7 进行分类

// ------------ 7. 进行分类 ------------
var classifiedImage1 = image1.select(bands).classify(classifier1);
var classifiedImage2 = image2.select(bands).classify(classifier2);

对两个时间的影像进行分类,得到分类结果影像。

2.8 可视化结果

// ------------ 8. 可视化 ------------
Map.centerObject(studyArea, 12);
Map.addLayer(image1, {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3}, 'Landsat 2015');
Map.addLayer(image2, {bands: ['B4', 'B3', 'B2'], min: 0, max: 0.3}, 'Landsat 2020');
Map.addLayer(classifiedImage1, {min: 0, max: 2, palette: ['blue', 'green', 'red']}, 'Classification 2015');
Map.addLayer(classifiedImage2, {min: 0, max: 2, palette: ['blue', 'green', 'red']}, 'Classification 2020');

将原始影像和分类结果影像添加到地图上进行可视化。

2.9 计算土地利用变化

// ------------ 9. 计算土地利用变化 ------------
var changeImage = classifiedImage2.subtract(classifiedImage1);
Map.addLayer(changeImage, {min: -2, max: 2, palette: ['blue', 'white', 'red']}, 'Land Use Change');

结果展示(注意,实际上是可以动态展示的,可以自行尝试):

### GEE 土地利用分类代码示例 为了实现基于GEE土地利用分类,可以采用监督学习方法中的随机森林算法。下面展示了一个完整的Python脚本用于执行这一任务: ```python import ee ee.Initialize() # 定义研究区域 roi = ee.Geometry.Polygon( [[[107.8, 29], [107.8, 28], [108.5, 28], [108.5, 29]]]) # 加载Landsat 8 图像集合并过滤日期范围和地理位置 landsatCollection = (ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA') .filterDate('2020-01-01', '2020-12-31') .filterBounds(roi)) # 获取训练样本数据集 trainingDataset = ee.FeatureCollection([ ee.Feature(ee.Geometry.Point([108.0, 28.5]), {'class': 1}), # 类型1样点 ee.Feature(ee.Geometry.Point([108.2, 28.6]), {'class': 2}) # 类型2样点 ]) # 提取波段作为特征变量 bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'] # 训练模型 classifier = ee.Classifier.smileRandomForest(10).train({ 'features': trainingDataset, 'classProperty': 'class', 'inputProperties': bands}) # 应用分类器到图像上 classifiedImage = landsatCollection.mean().classify(classifier) # 可视化结果 palette = ['red', 'green'] mapIdDict = classifiedImage.getMapId({'min': 1, 'max': 2, 'palette': palette}) print(mapIdDict['tile_fetcher'].url_format) ``` 上述代码实现了以下功能: - 设置感兴趣区`roi`; - 过滤特定时间段内的 Landsat 8 影像; - 创建包含已知类别标签的位置点组成的训练样本集; - 使用这些位置处的光谱反射率值训练一个随机森林分类器; - 将该分类器应用于整个影像以获得土地覆盖类型的预测图层。 此过程能够有效地识别不同种类的地物,并生成对应的地图可视化输出[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

遥感AI实战

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

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

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

打赏作者

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

抵扣说明:

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

余额充值