|||
第一幕:探索与构思 (The Idea)
你:我想学习用 GEE 开发高中教学资源。
我:很棒的想法!GEE 可以直观展示地球变化。我们可以先看看它能做什么。
你:GEE 能做什么?
我:它可以展示城市扩张、森林砍伐、湖泊萎缩等。例如,我们可以用它制作一个拉斯维加斯或迪拜城市扩张的动画。
你:我想试试城市扩张,以迪拜为例。
第二幕:第一个“配方”与第一个“厨房” (The Recipe & The Kitchen)
我:好的!我们的“配方”是:1. 定位迪拜,2. 筛选清晰的卫星照片,3. 制作动态影像。我们先从“定位”开始,最好的方法是在地图上画一个区域。
你:我该如何筛选呢?
我:我们可以按“云量要少”的标准来筛选。
你:我想把它做成一个动态时间序列动画。
我:没问题。接下来我们看看 GEE 的“厨房”——代码编辑器长什么样。它主要有“指令输入区”、“地图显示区”和“信息输出区”。
你:我想看看我们为迪拜设计的“配方”写成代码是什么样的。
第三幕:反复调试与深入理解 (Debugging & Deeper Learning)
我:(提供了第一版完整代码)
你:它不播放动画,只有一个图片,拖动滑块是变透明。
我:啊,这是一个常见问题。因为我们没有“每年合成一张最佳图片”。我们需要增加一个“年度合成”的步骤。
我:(提供了加入“年度合成”步骤的代码)
你:还是不行,只显示一张图片。
我:很抱歉,看来我们需要一个更强制的指令。我们直接命令 GEE 生成一个动画,而不是在地图上显示图层。
我:(提供了生成动画链接的代码)
你:(截图) 出现了错误: "Image is unbounded."
我:我的错,我忘了告诉动画要拍哪个“区域”。我们需要加入 region: aoi
这个参数。
你:(截图) 又出现了新错误: "forEach is not a function."
我:再次抱歉,我混淆了 GEE 的“云端”指令和常规的“浏览器”指令。我们需要用 GEE 专属的 .map()
。
你:(截图) 还是有错误: "A mapped function's arguments cannot be used in client-side operations."
我:您真是个出色的“侦探”!我们遇到了一个更深层的问题。在批量处理时,我们不能使用需要“跑回”浏览器的 .getInfo()
来创建文件名,必须用纯粹在服务器上运行的指令来拼接字符串。
第四幕:成功与定制化 (Success & Customization)
我:(提供了最终修正版的代码)
你:成功了!我想问一下怎么调整清晰度和范围,还有如何显示时间。
我:太棒了!我们可以通过修改 buffer()
的数值来调整范围,修改 dimensions
的数值来调整清晰度。而年份,则需要我们自己根据动画的播放顺序来对应。
你:我想能不能批量输出以年份为名字的图片供我下载呢?
我:当然可以,但这需要一个新流程:先导出到你的 Google Drive,再从 Drive 下载。这需要我们再次修改代码的最后一步,把它变成一个“批量导出”任务。
你:好的,我想看最终的代码。
我:(提供了最终的批量导出代码,并解释了如何使用右上角的 "Tasks" 选项卡来启动任务)。
这是我的作业:
/****************************************************************
* GEE教学案例:迪拜城市扩张 (V5 - 用户定制版)
*
* 用户定制版,实现了更大范围、更高分辨率的动画生成。
* 动画会显示在右侧的信息输出区(Console)。
****************************************************************/
// --- 第一步:定位 (已修改) ---
// 研究区域的半径扩大到了50公里 (50000米)
var aoi = ee.Geometry.Point(55.27, 25.20).buffer(50000);
Map.centerObject(aoi, 8); // 稍微缩小了地图级别以适应更大范围
// --- 第二步:创建年度合成影像集 (无变化) ---
var years = ee.List.sequence(2013, 2023);
var annualCollection = ee.ImageCollection.fromImages(
years.map(function(year) {
var annualImages = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(aoi)
.filter(ee.Filter.calendarRange(year, year, 'year'))
.filter(ee.Filter.lt('CLOUD_COVER', 10));
return annualImages.median().set('year', year);
})
);
// --- 第三步:直接生成并展示动画 (已修改) ---
// 将所有参数放在一个指令里,这是最可靠的方式
print('迪拜年度变化动画 (定制版):', annualCollection.getVideoThumbURL({
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 0.0,
max: 22000.0,
region: aoi,
dimensions: 1024, // 分辨率提升到了1024
framesPerSecond: 1
}));
|Archiver|小黑屋|星韵百科|星韵地理网
( 苏ICP备16002021号 )
GMT+8, 2025-8-11 11:25 , Processed in 0.068149 second(s), 20 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.