??本文介紹在谷歌地球引擎GEE中,提取多年遙感影像多個不同波段的反射率數(shù)據(jù),在GEE內(nèi)繪制各波段的長時間序列走勢曲線圖,并將各波段的反射率數(shù)據(jù)與其對應(yīng)的成像日期一起導(dǎo)出為.csv文件的方法。
??本文是谷歌地球引擎(Google Earth Engine,GEE)系列教學(xué)文章的第十六篇,更多GEE文章請參考專欄:GEE學(xué)習(xí)與應(yīng)用。
??首先,我們來看一下本文需要實現(xiàn)的需求。我們現(xiàn)在希望獲取某一個點位置上,Landsat 7遙感影像數(shù)據(jù)的可見光與近紅外共4個波段的反射率數(shù)據(jù),時間跨度是從2013年到2022年。其中,我們在提取出來指定波段、指定空間區(qū)域、指定時間范圍的數(shù)據(jù)后,為了保證數(shù)據(jù)大致無誤,因此希望首先可以在GEE內(nèi)繪制一張包含了上述各波段在這一段時間內(nèi)反射率數(shù)據(jù)的走勢圖,隨后將反射率數(shù)據(jù)導(dǎo)出為.csv文件。
??知道了需求,我們即可開始代碼的撰寫。本文需要用到的代碼如下。
var point = ee.Geometry.Point([-95.363271, 38.640067]);
var startDate = "2013-01-01";
var endDate = "2022-12-31";
var rCollection = ee.ImageCollection("LANDSAT/LE07/C02/T1_L2")
.select(["SR_B1", "SR_B2", "SR_B3", "SR_B4"])
.filterBounds(point)
.filterDate(startDate, endDate);
print(rCollection)
var trueCollection = rCollection.map(function(image) {
var trueImage = image.multiply(0.0000275).subtract(0.2);
var trueImageP = image.addBands(trueImage, null, true)
return trueImageP;
});
print(ui.Chart.image.series({
imageCollection: trueCollection,
region: point,
reducer: ee.Reducer.mean(),
scale: 250,
}));
var rTable = ee.FeatureCollection(trueCollection.map(function(image) {
var date = image.date().format("yyyy-MM-dd");
var BValue = image.reduceRegion(ee.Reducer.mean(), point, 500).get("SR_B1");
var GValue = image.reduceRegion(ee.Reducer.mean(), point, 500).get("SR_B2");
var RValue = image.reduceRegion(ee.Reducer.mean(), point, 500).get("SR_B3");
var NValue = image.reduceRegion(ee.Reducer.mean(), point, 500).get("SR_B4");
return ee.Feature(null, {date: date, Blue: BValue, Green: GValue, Red: RValue, NIR: NValue});
}));
Export.table.toDrive({
collection: rTable,
description: "data_table_5",
folder: "GEE_Export",
fileFormat: "CSV"
});
??上述代碼的具體含義如下。
??首先,我們通過var point = ee.Geometry.Point([-95.363271, 38.640067]);定義一個點位point,也就是我們希望提取數(shù)據(jù)的點。隨后,通過var startDate = "2013-01-01";定義起始日期startDate,表示數(shù)據(jù)獲取的起始日期;var endDate = "2022-12-31";則是定義結(jié)束日期endDate,表示數(shù)據(jù)獲取的結(jié)束日期。緊接著,我這里是選擇通過var rCollection = ee.ImageCollection("LANDSAT/LE07/C02/T1_L2"),獲取LANDSAT 7的Level-2表面反射率數(shù)據(jù)集LANDSAT/LE07/C02/T1_L2。
??隨后,基于.select(["SR_B1", "SR_B2", "SR_B3", "SR_B4"])選擇感興趣的波段,我們這里是選擇了Blue、Green、Red等3個可見光波段,和NIR這一近紅外波段;這里我們需要用4個波段在遙感影像數(shù)據(jù)產(chǎn)品中的名稱(也就是上述"SR_B1"這種),來獲取對應(yīng)的數(shù)據(jù)。接下來,我們對數(shù)據(jù)集進(jìn)行空間、時間過濾,保留包含指定點位、處于指定時間范圍的數(shù)據(jù)。
??其次,我們在var trueCollection = rCollection.map(function(image) { ... });這里,使用map函數(shù)對rCollection中的每個圖像應(yīng)用函數(shù),并將結(jié)果保存在trueCollection中。這里的函數(shù)就是對原始的遙感影像加以輻射定標(biāo),將每個像素值乘以0.0000275,并減去0.2,得到新的圖像trueImage。隨后,注意需要將原始圖像image和處理后的圖像trueImage連接起來,形成新的圖像trueImageP——這樣使得我們定標(biāo)后的遙感影像數(shù)據(jù)集包含有原始圖像的各項屬性信息(例如開始、結(jié)束時間等),才可以進(jìn)行后續(xù)的繪圖、導(dǎo)出工作。在這里,我選擇通過設(shè)置image.addBands(trueImage, null, true)中第3個參數(shù)為true,直接將輻射定標(biāo)的圖像覆蓋原有的圖像,避免不必要的數(shù)據(jù)冗余。
??接下來,我們ui.Chart.image.series函數(shù)繪制時間序列圖;隨后使用map函數(shù)對trueCollection中的每個圖像應(yīng)用函數(shù),并將結(jié)果保存在rTable中。這個函數(shù)計算了每個圖像的日期和各個波段的具體數(shù)值,并將這些值作為屬性添加到rTable中的每個要素。
??最后,我們即可將rTable導(dǎo)出為.csv文件,保存在Google Drive的指定文件夾中。
??運行上述代碼,首先我們可以在GEE中看到具體的長時間序列曲線走勢圖;如下圖所示。可以看到,走勢圖中的數(shù)據(jù)都已經(jīng)是做過了輻射定標(biāo)之后的了。

??隨后,我們打開導(dǎo)出的.csv文件,可以看到其中具體的數(shù)據(jù)信息如下——包括了我們需要導(dǎo)出的4個波段與日期信息,以及其他2個系統(tǒng)默認(rèn)導(dǎo)出的圖像信息。

??至此,大功告成。
歡迎關(guān)注:瘋狂學(xué)習(xí)GIS