想知道如何用 GEE 随机森林回归模拟土壤氧化还原深度吗?

var VT_boundary = ee.FeatureCollection("projects/ee-yelu/assets/VT_boundary"),    VT_pedons = ee.FeatureCollection("projects/ee-yelu/assets/essex_pedons_all");

在步入高速数字化进程中,我们开辟了观览大地的全新视角——通过使用Sentinel空间卫星系统。该卫星阵列提供世界各地实时观测服务,揭示自然界各类奥秘。今日,让我们探讨如何对通过卫星获得的数据进行预处理和综合分析,直至呈现为用户手中感性的绿色画面。

Sentinel-1与Sentinel-2:地球的守护者

// 研究区var roi = VT_boundary.union(); Map.addLayer(roi, {}, 'shp', false);var crs = 'EPSG:4326'// EPSG number for output projection. 32618 = WGS84/UTM Zone 18N. For more info- http://spatialreference.org/ref/epsg/

function maskS2clouds(image) {  var qa = image.select('QA60');
// Bits 10 and 11 are clouds and cirrus, respectively. var cloudBitMask = 1 << 10; var cirrusBitMask = 1 << 11;
// Both flags should be set to zero, indicating clear conditions. var mask = qa.bitwiseAnd(cloudBitMask) .eq(0) .and(qa.bitwiseAnd(cirrusBitMask) .eq(0));
return image.updateMask(mask) .divide(10000);}

Sentinel系列卫星犹如宇宙守卫者,在广袤无垠的星空中洞察地球。Sentinel-1与Sentinel-2,仿佛承载特殊力量的超级英雄,前者不受气候干扰高效拍摄,后者专精捕捉地球多彩面貌。两颗卫星的独特能力相辅相成,为我们带来珍贵无比的地球图像,如同时光瓶罐,详实记录地球每时每刻。

// NDVIfunction NDVI(img) {  var ndvi = img.expression(    "(NIR-R)/(NIR+R)", {      "R": img.select("B4"),      "NIR": img.select("B8"),    });  return img.addBands(ndvi.rename("NDVI"));}
// NDWIfunction NDWI(img) { var ndwi = img.expression( "(G-MIR)/(G+MIR)", { "G": img.select("B3"), "MIR": img.select("B8"), }); return img.addBands(ndwi.rename("NDWI"));}
// NDBIfunction NDBI(img) { var ndbi = img.expression( "(SWIR-NIR)/(SWIR-NIR)", { "NIR": img.select("B8"), "SWIR": img.select("B12"), }); return img.addBands(ndbi.rename("NDBI"));}

//SAVIfunction SAVI(image) { var savi = image.expression('(NIR - RED) * (1 + 0.5)/(NIR + RED + 0.5)', { 'NIR': image.select('B8'), 'RED': image.select('B4') }) .float(); return image.addBands(savi.rename('SAVI'));}
//IBI function IBI(image) { // Add Index-Based Built-Up Index (IBI) var ibiA = image.expression('2 * SWIR1 / (SWIR1 + NIR)', { 'SWIR1': image.select('B6'), 'NIR': image.select('B5') }) .rename(['IBI_A']);
var ibiB = image.expression('(NIR / (NIR + RED)) + (GREEN / (GREEN + SWIR1))', { 'NIR': image.select('B8'), 'RED': image.select('B4'), 'GREEN': image.select('B3'), 'SWIR1': image.select('B11') }) .rename(['IBI_B']);
var ibiAB = ibiA.addBands(ibiB); var ibi = ibiAB.normalizedDifference(['IBI_A', 'IBI_B']); return image.addBands(ibi.rename(['IBI']));}

//RVIfunction RVI(image) { var rvi = image.expression('NIR/Red', { 'NIR': image.select('B8'), 'Red': image.select('B4') }); return image.addBands(rvi.rename('RVI'));}
//DVIfunction DVI(image) { var dvi = image.expression('NIR - Red', { 'NIR': image.select('B8'), 'Red': image.select('B4') }) .float(); return image.addBands(dvi.rename('DVI'));}

影像预处理:给地球拍照前的准备

// 创建
var inStack = ee.Image()for (var i = 0; i < 3; i += 1) { var start = ee.Date('2019-03-01') .advance(30 * i, 'day'); print(start) var end = start.advance(30, 'day');

var dataset = ee.ImageCollection('COPERNICUS/S2_SR') .filterDate(start, end) .filterBounds(roi) .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',75)) .map(maskS2clouds) .map(NDVI) .map(NDWI) .map(NDBI) .map(SAVI) .map(IBI) .map(RVI) .map(DVI);
var inStack_monthly = dataset.median() .clip(roi); // 可视化 var visualization = { min: 0.0, max: 0.3, bands: ['B4', 'B3', 'B2'], };
Map.addLayer(inStack_monthly, visualization, 'S2_' + i, false);

// // 纹理特征 var B8 = inStack_monthly.select('B8') .multiply(100) .toInt16(); var glcm = B8.glcmTexture({ size: 3 }); var contrast = glcm.select('B8_contrast'); var var_ = glcm.select('B8_var'); var savg = glcm.select('B8_savg'); var dvar = glcm.select('B8_dvar'); inStack_monthly = inStack_monthly.addBands([contrast, var_, savg, dvar])
// Sentinel-1 var imgVV = ee.ImageCollection('COPERNICUS/S1_GRD') .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV')) .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VH')) .filter(ee.Filter.eq('instrumentMode', 'IW')) .filterBounds(roi) .map(function(image) { var edge = image.lt(-30.0); var maskedImage = image.mask() .and(edge.not()); return image.updateMask(maskedImage); });
var img_S1_asc = imgVV.filter(ee.Filter.eq('orbitProperties_pass', 'ASCENDING')); var VV_img = img_S1_asc.filterDate(start, end) .select("VV") .median() .clip(roi); var VH_img = img_S1_asc.filterDate(start, end) .select("VH") .median() .clip(roi);

inStack_monthly = inStack_monthly.addBands([VV_img, VH_img])

print("img_S2_monthly", inStack_monthly)
inStack = inStack.addBands(inStack_monthly.select(inStack_monthly.bandNames()))}
inStack = inStack.select(inStack.bandNames().remove("constant"))print(inStack)

拍摄地球美景需经历一系列繁琐准备,即影像预处理环节,也被喻为是向公众展示地球唯美一面的“化妆”环节。此阶段涵盖多项复杂操作,如画面修正、噪音去除及对比度增强等流程,犹如细心雕琢艺术珍品,直至影像清晰且色彩浓郁,呈现完美效果。

print("Predictor Layers:", inStack);inStack.reproject(crs, null, 30);Map.centerObject(inStack)

上传矢量数据:数字化地球的纹理

接续投入任务如下,我们需把各类图像资料上传至地球工程(EarthEngine)——这一庞大的数字化地球引擎,能高效处理与解析海量地球观测数据。同时,此项操作亦须添加矢量数据,以作为地球纹理,详细描述诸如河流、森林及城市等地表特性。通过这些数据的复合与运用,使我们得以更加全面地洞察地球的每个细微之处。

EPSG代码_代码EPC是什么意思_代码EP080

逐月合成影像:时间的画卷

var trainingFeatureCollection = ee.FeatureCollection(VT_pedons, 'geometry');

关于逐日合成图像的神奇之处在于,犹如让时间凝固为摄影艺术的画卷,每月元素精妙组合成一个连贯的时间序列。该过程运用for循环技术完成,根据需求自动生成特定时段的图像。这些图像不仅美丽动人,更具有极高科研价值,有助于研究地球气候变迁、植被生长情况等自然现象。

ee.Image().select("波段名称")

计算植被指数:绿色的密码

var bands = inStack.bandNames(); //All bands on included here

在诸如此类的模拟图像中,最为引人深思的即是植被指数的精确计算。如绿色密码般的植被指数,能揭示出植被的健康程度及发展节奏等隐秘信息。借助此等指数,我们得以深度认识地球的生态体系,乃至预测未来环境变迁的走向。整个过程复杂缤纷,然而每一个计算都代表着对于地球绿色生命的一次震撼视界。

样本数据的加载与转换:回归的基础

var training = inStack.reduceRegions({  collection:trainingFeatureCollection,  reducer :ee.Reducer.mean(),  scale:100,  tileScale :5,  crs: crs});print(training)var trainging2 = training.filter(ee.Filter.notNull(bands));

在开展回归研究前的第一步是收集样本数据,这是回归分析的基石。首先,我们将具有资产价值的样本数据VT_pedons.shp从GEE上传至云端,并将其转化为可在GEE环境下调用的ee.FeatureCollection()格式。这样不仅能保证回归模型具有稳固的基础,也使得我们在后续的分析操作中能够更加精准和有效率。


// 在training要素集中增加一个random属性,值为0到1的随机数var withRandom = trainging2.randomColumn({ columnName:'random', seed:2, distribution: 'uniform',});

var split = 0.8; var trainingData = withRandom.filter(ee.Filter.lt('random', split));var validationData = withRandom.filter(ee.Filter.gte('random', split));

提取影像数据:寻找地球的脉络

// train the RF classification modelvar classifier = ee.Classifier.smileRandomForest(100, null, 1, 0.5, null, 0).setOutputMode('REGRESSION')    .train({      features: trainingData,       classProperty: 'REDOX_CM',       inputProperties: bands    });print(classifier);

接下来,需根据样本点坐标,从影像中抽取各层波段数据。此步骤如同探索地球奥秘,每个波段均揭示了地球独特面貌。透过数据提取,我们能更深入洞察地球动态,为后续回归预测提供丰富依据。

设置空间分辨率:精细化的视角

代码EP080_EPSG代码_代码EPC是什么意思

在进行回归分析前,正确地设定空间分辨率至关重要,此次设定的分辨率为30米,目的在于以精密化角度深入洞察地球。此分辨率的选取是出于与前期运用过的预测层重投影的一致性考虑,从而保障我们得到的分析结果具备极高精确度。

分类器的创建与应用:绿色的预测

// Classify the input imagery.var regression = inStack.classify(classifier, 'predicted');print(regression);

此刻,我们已做好创建分类器的准备,以先前准备的数据为依据,针对图像进行分类。此过程如同进行绿色前景预测,有助于我们深入了解地球未来状况,并借助分类器探知其各个角落及其变化情况。

回归模型的应用:绿色的魔法

接下来,我们将运用新构建的回归模型对影像进行划分。此过程宛如神奇的绿色魔法,将精准的预测数据转为生动的图像显示。这些画面精美且蕴含丰富科学信息,助我们深化理解地球生态系统。

var palettes = require('users/gena/packages:palettes');

调色板的定义:绿色的艺术

为了实现可视化功能,我们必须创建色调调节板。犹如绿色艺术的色调调节工具,可以运用预测数据生成美观的图片,让大地所有的变动和细微之处尽在眼底。

var palette = palettes.crameri.nuuk[25];

结果的添加与展示:绿色的画卷

终章,将所得成果融入至地图之中加以公示。此举犹如挥动画笔展现翠绿山水图景,切实将预测数据以最为直观精确之形式呈现。透过各式图像,使得全球各地之微妙变迁与详细信息皆一览无遗,尽收眼底。

// Display the input imagery and the regression classification.// get dictionaries of min & max predicted valuevar regressionMin = (regression.reduceRegion({  reducer: ee.Reducer.min(),  scale: 100,  crs: crs,  bestEffort: true,  tileScale: 5,  geometry: roi}));var regressionMax = (regression.reduceRegion({  reducer: ee.Reducer.max(),  scale: 100,  crs: crs,  bestEffort: true,  tileScale: 5,  geometry: roi}));
// Add to mapvar viz = { palette: palette, min: regressionMin.getNumber('predicted') .getInfo(), max: regressionMax.getNumber('predicted') .getInfo()};Map.addLayer(regression, viz, 'Regression');

直方图的制作:绿色的统计

除图像展示外,我们亦可利用直方图深入剖析模型拟合度。通过编制的绿色彩色图表,我们能精确洞察地球各项变更及其详细信息。

任务的导出:绿色的分享

最终,我们将任务成果导出,便于与公众共享我们的绿色魔法。此操作犹如一次绿色理念的传承,能以通俗易懂且易于理解的形式展现预测结果。借助这一共享平台,我们有望更为全面地洞悉地球生态体系,更加精准地捕捉地球上的微妙变化以及每一处细微之处。

代码EPC是什么意思_代码EP080_EPSG代码

发表评论