本教程需要访问 API。它还需要访问在 Google Earth Engine (GEE) 上运行 CCDC 算法所获得的任何结果。对于本教程,我们可以使用与 GUI 指南相同的结果。
// First load the API file
var utils = require('users/parevalo_bu/gee-ccdc-tools:ccdcUtilities/api')
// Load the results
var ccdc = ("projects/GLANCE/RESULTS/CHANGEDETECTION/SA/Rondonia_example")
获取CCDC系数和合成图像
该CCDC
模块提供了有助于获取结果范围内任何时间点的任何系数的功能。对于此处使用的示例结果,时间段对应于 1999 年至 2020 年。由于 CCDC 算法可以以三种不同的时间格式运行,因此了解使用哪种格式对结果进行编码很重要。这里使用的结果是使用小数年计算的,因此我们需要将我们想要获得系数的日期转换为该格式。这可以使用Dates
模块来完成 :
以正确的格式获取日期
var inputDate = '2001-12-30'
var dateParams = {inputFormat: 3, inputDate: inputDate, outputFormat: 1}
var formattedDate = (dateParams)
在上面的示例中,我们将输入日期转换为小数年份,对应于 outputFormat 1
。其他输出格式有:0
儒略日和2
Unix 时间。
以“常规”图像格式获取 CCDC 结果
CCDC 输出存储为数组图像,以便于存储算法计算的可变长度数组,因为事先不知道每个像素将获得多少时间段。但是,对这些数组进行操作并显示它们往往比使用常规()
. 出于这个原因,我们使用该函数将数组图像结果转换为常规图像 。该函数需要 CCDC 结果、我们要提取的段数以及光谱带的名称。
// Spectral band names. This list contains all possible bands in this dataset
var BANDS = ['BLUE', 'GREEN', 'RED', 'NIR', 'SWIR1', 'SWIR2', 'TEMP']
// Names of the temporal segments
var SEGS = ["S1", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "S10"]
// Obtain CCDC results in 'regular' format
var ccdImage = (ccdc, , BANDS)
获取系数
生成的图像将包含()
具有指定系数数量的结果版本。请求的段数较少将加快后续处理速度,但可能会导致高度动态区域(例如加利福尼亚的农田)丢失一些段。对于多个位置,10 个分段似乎是一个不错的折衷方案。使用此图像,我们可以请求我们上面选择的日期的任何波段和系数集。您可以阅读 API 文档来指定getMultiCoefs
函数的其他参数。
// Define bands to select.
var SELECT_BANDS = ['RED', 'NIR']
// Define coefficients to select. This list contains all possible segments
var SELECT_COEFS = ["INTP", "SLP", "COS", "SIN", "COS2", "SIN2", "COS3", "SIN3", "RMSE"]
// Obtain coefficients
var coefs = (ccdImage, formattedDate, SELECT_BANDS, SELECT_COEFS, true, SEGS, 'after')
计算合成图像
回归模型可用于计算数据时间范围内任何时间点的任何波段的表面反射率(即在我们的案例中为 1999 年至 2020 年)。这个图像称为合成图像,它是用getMultiSynthetic
函数计算的。
// Bands to get surface reflectance for
var SUB_BANDS = ['RED', 'NIR', 'SWIR1', 'SWIR2']
// Obtain synthetic image
var synt = (ccdImage, formattedDate, 1, BANDS, SEGS)
获取变更信息
最后,为了获取更改信息,我们可以使用该filterMag
函数。该函数需要regular
图像格式的 CCDC 结果、正确日期格式的开始和结束日期、获取信息的光谱带以及先前定义的段列表。
var changeStart = '2001-01-01'
var changeEnd = '2018-12-31'
var startParams = {inputFormat: 3, inputDate: changeStart, outputFormat: 1}
var endParams = {inputFormat: 3, inputDate: changeEnd, outputFormat: 1}
var formattedStart = (startParams)
var formattedEnd = (endParams)
var filteredChanges = (ccdImage, formattedStart, formattedEnd, 'SWIR1', SEGS)
图像filteredChanges
包含三个波段:
-
'MAG'
:代表指定时间范围和波段的最大变化幅度。 -
'tBreak'
:表示发生幅度最大的变化的日期。 -
'numTbreak'
:表示指定时间段内的总变化次数。