从像素到海岸线:用GEE与Landsat重现30年沧海桑田的实战指南
作为一名长期与遥感数据打交道的开发者,我常常被问到一个问题:我们如何用代码“看见”时间的流逝?尤其是在海岸线这种动态变化的自然边界上。传统的GIS分析往往受限于数据获取、计算资源和处理流程的复杂性,让许多有趣的研究想法止步于门槛。直到我开始深入使用Google Earth Engine,才发现将30年的Landsat影像转化为直观的海岸线变迁故事,可以如此高效且富有创造性。这篇文章,我将抛开复杂的学术公式,从一个实践者的角度,带你一步步搭建属于自己的海岸线变迁分析流水线。无论你是想验证某个区域的填海造陆规模,还是评估红树林的消长,亦或是单纯想用动态地图讲述环境故事,这里提供的思路和完整代码都能成为你坚实的起点。
1. 理解我们的“画笔”与“画布”:GEE与Landsat数据基础
在开始编码之前,我们必须对手中的工具和材料有清晰的认识。Google Earth Engine不是一个简单的在线地图工具,它是一个行星级的地理空间分析云平台。其核心优势在于,它将PB级别的卫星影像数据集(如Landsat、Sentinel)与一个强大的、基于JavaScript或Python的云计算环境无缝集成。这意味着,我们无需下载动辄几十GB的原始影像,也无需配置昂贵的高性能服务器,就能直接在全球尺度上进行时序分析。这彻底改变了遥感研究的范式。
而Landsat系列卫星,则是我们描绘海岸线最可靠的“画笔”。自1972年以来,它提供了持续近半个世纪的中分辨率对地观测数据,是长时间序列分析的黄金标准。对于海岸线提取,我们主要关注其两个关键特性:
- 时间一致性:尽管传感器从TM更新到ETM+再到OLI,但NASA/USGS团队进行了严格的辐射定标和大气校正,确保了不同时期数据之间的可比性。这是我们进行30年变化分析的前提。
- 光谱波段:特别是短波红外(SWIR)和绿光波段,它们是构建水体识别指数的基石。
在GEE中调用Landsat数据极其简单。平台已经将各级数据产品(如地表反射率产品LANDSAT/LT05/C02/T1_L2, LANDSAT/LE07/C02/T1_L2, LANDSAT/LC08/C02/T1_L2)整理就绪。我们需要做的,就是定义一个时间、空间范围,然后像操作本地变量一样处理这些全球数据。例如,要获取1990年长三角区域的Landsat 5影像,只需几行代码:
// 定义研究区域(以上海崇明岛附近为例)
var roi = ee.Geometry.Rectangle([121.0, 31.0, 122.5, 32.0]);
// 加载1990年夏季的Landsat 5地表反射率数据
var landsat5_1990 = ee.ImageCollection('LANDSAT/LT05/C02/T1_L2')
.filterBounds(roi)
.filterDate('1990-06-01', '1990-09-30')
// 云掩膜是预处理的关键一步
.map(function(image) {
var cloudMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
return image.updateMask(cloudMask);
})
.median(); // 采用中值合成法获取该时段代表性影像
注意:直接使用原始影像集合中的单景影像可能会受云、气溶胶等因素干扰。通常我们会采用时间合成(如中值合成、百分位数合成)来获取一个时期内更干净、更具代表性的“典型”影像,这是进行年际对比的常用技巧。
2. 核心算法:如何让计算机识别水陆边界
海岸线在遥感影像上并非一条清晰的“线”,而是水体与陆地之间的过渡带。我们的任务,就是找到一个可靠的规则,让计算机自动将每个像素归类为“水”或“非水”,其边界即为海岸线。这里,改进的归一化差异水体指数与大津算法的组合,构成了我们方法的核心。
<
9478



被折叠的 条评论
为什么被折叠?



