GEE实战:一键获取与可视化多时相夜间灯光遥感影像

发布时间:2026/5/18 5:58:05

GEE实战:一键获取与可视化多时相夜间灯光遥感影像 1. 从零开始认识夜间灯光数据当你第一次听说夜间灯光数据这个概念时可能会觉得有些抽象。其实它就像是我们用卫星给地球拍了一张夜景照片。想象一下当你乘坐夜间航班时透过舷窗看到的城市灯光点点这就是夜间灯光数据最直观的体现。DMSP-OLSDefense Meteorological Satellite Programs Operational Linescan System是美国国防气象卫星计划搭载的线性扫描系统它从1992年开始持续收集全球夜间灯光数据。这些数据特别有价值因为灯光强度往往与人类活动强度正相关。我在分析长三角城市群发展时就发现1992年的灯光影像中上海还只是几个亮点而到了2013年已经连成一片。在GEEGoogle Earth Engine平台上我们可以直接调用这些数据而不用下载到本地。这解决了传统遥感分析中数据量大、下载慢的痛点。记得我第一次尝试用传统方法处理这些数据时光是下载一年的全球数据就花了半天时间现在通过GEE几行代码就能搞定。2. 快速上手GEE代码实战让我们直接进入实战环节。打开GEE的代码编辑器https://code.earthengine.google.com/你会看到一个类似Jupyter Notebook的界面。别被那些英文界面吓到跟着我的步骤操作就行。首先我们需要明确要分析的年份。假设我们要研究1992、2000、2008和2013这四年这是中国城市化进程中的几个关键时间节点。把这些年份存入一个数组var years [1992, 2000, 2008, 2013];接下来是关键的数据调用代码。GEE使用的是链式调用语法就像把多个操作串在一起。我们先获取整个夜间灯光数据集然后选择stable_lights这个波段这是经过校准的稳定灯光数据最后给每张图片添加年份属性var dataset ee.ImageCollection(NOAA/DMSP-OLS/NIGHTTIME_LIGHTS) .select(stable_lights) .map(function(img) { return img.set(year, ee.Image(img).date().get(year)) });这里有个小技巧map函数会给数据集中的每张图片执行相同的操作。我们通过date().get(year)获取每张图片的年份然后存储在图片属性中。这个步骤很重要因为后续我们要按年份筛选数据。3. 数据筛选与可视化技巧有了带年份标记的数据集现在我们可以按需筛选了。使用一个简单的循环就能完成这个工作for (var a 0; a years.length; a) { var filter dataset.filterMetadata(year, equals, years[a]); var style { bands: [stable_lights], max: 63, palette: [black, white, orange, yellow, red] }; Map.addLayer(filter, style, NOAA-YEAR: years[a], false); }这段代码有几个关键点需要注意filterMetadata方法让我们可以按照之前设置的year属性进行筛选style对象定义了可视化参数其中max值63是DMSP数据的最大值palette定义了颜色渐变从无灯光的黑色到强灯光的红色最后一个参数false表示图层初始不显示避免同时加载太多图层我在实际使用中发现默认的调色板可能不够直观。你可以尝试修改palette参数比如用[000000, 0000FF, 00FF00, FF0000]实现从黑到蓝到绿再到红的渐变这样不同发展阶段的区域会更明显。4. 高级技巧与常见问题解决当你熟悉基础操作后可以尝试一些进阶技巧。比如我们经常需要计算灯光面积变化。这里给出一个计算指定区域内灯光像素数量的方法// 首先定义一个区域这里以上海为例 var shanghai ee.FeatureCollection(users/yourusername/shanghai_boundary); // 计算1992年灯光像素数 var lights1992 dataset.filterMetadata(year, equals, 1992).first(); var stats1992 lights1992.reduceRegion({ reducer: ee.Reducer.sum(), geometry: shanghai, scale: 1000, maxPixels: 1e9 }); print(1992年上海灯光总值:, stats1992.get(stable_lights));常见问题1数据缺失或异常值。DMSP数据在某些年份存在传感器老化问题这时可以考虑使用插值方法填补。我在处理2006年数据时就遇到过这个问题。常见问题2跨传感器校准。不同卫星传感器获取的数据需要校准才能直接比较。GEE上的数据已经过初步处理但如果要做精确分析建议参考专业文献进行二次校准。5. 多时相对比分析方法有了各年份的数据如何系统性地分析变化趋势呢我推荐以下几种方法时间序列动画GEE支持生成动画可以直观展示灯光扩张过程var videoArgs { dimensions: 800, region: your_region, framesPerSecond: 1, bands: [stable_lights], min: 0, max: 63, palette: [black, white, orange, yellow, red] }; print(ui.Thumbnail(dataset, videoArgs));差值分析计算两个年份的灯光强度差var diff dataset.filterMetadata(year, equals, 2013).first() .subtract(dataset.filterMetadata(year, equals, 1992).first()); Map.addLayer(diff, {min: -10, max: 10, palette: [blue, black, red]}, 2013-1992);灯光重心迁移分析通过计算各年份灯光分布的质心可以分析城市扩张方向。这个方法在分析京津冀城市群发展时特别有用。6. 扩展应用与替代数据源除了DMSP-OLSGEE上还有其他夜间灯光数据值得关注VIIRS夜间灯光数据新一代的NPP-VIIRS数据分辨率更高约500米自2012年开始持续更新。调用代码类似var viirs ee.ImageCollection(NOAA/VIIRS/DNB/MONTHLY_V1/VCMSLCFG) .filterDate(2012-01-01, 2023-12-31);珞珈一号夜间灯光数据这是中国的商用夜间灯光数据分辨率达到130米。虽然目前GEE上还没有但可以通过其他途径获取。在实际研究中我发现结合日间遥感影像和夜间灯光数据往往能获得更全面的认识。比如用Landsat数据计算NDVI植被指数再与夜间灯光数据对比可以分析城市扩张对生态环境的影响。7. 项目实战长三角城市群发展分析让我们用一个完整案例来巩固所学知识。我们将分析1992-2013年长三角地区夜间灯光变化首先定义研究区域var yangtzeDelta ee.Geometry.Polygon( [[[115, 28], [115, 33], [123, 33], [123, 28]]], null, false); Map.centerObject(yangtzeDelta, 6);计算各年份区域总灯光值var yearlyStats years.map(function(year) { var img dataset.filterMetadata(year, equals, year).first(); var stats img.reduceRegion({ reducer: ee.Reducer.sum(), geometry: yangtzeDelta, scale: 1000, maxPixels: 1e9 }); return { year: year, lights: stats.get(stable_lights) }; }); print(年度灯光统计:, yearlyStats);导出结果到Google DriveExport.table.toDrive({ collection: ee.FeatureCollection(yearlyStats), description: YangtzeDelta_Lights_Export, fileFormat: CSV });通过这个案例我发现长三角地区在2000-2008年间灯光增长最为显著这与该地区经济快速发展期高度吻合。特别是苏州、无锡等城市灯光面积扩张了约3倍。

相关新闻