Earth Engine 是強大的分析工具,但您可能需要匯出分析結果,才能將圖表、圖片、地圖等嵌入報表或出版品。在本節中,您將瞭解如何建立可匯出並在其他軟體中查看的圖表和圖片。請回想一下,在上一節中,您使用了類似下方的程式碼,將 NDVI 波段新增至集合中的每張圖片,其中 l8 變數參照 Landsat 8 TOA 反射率集合:
程式碼編輯器 (JavaScript)
// Import the Landsat 8 TOA image collection. var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); // Map a function over the Landsat 8 TOA collection to add an NDVI band. var withNDVI = l8.map(function(image) { var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); return image.addBands(ndvi); });
製作圖表
假設您實際上想要的是特定位置的 NDVI 隨時間變化圖表。如要製作這類圖表,第一步是選擇興趣點。取得點繪圖工具 (
) 並建立點,在感興趣的區域中建立單點幾何圖形。(如果已有匯入項目,請先將滑鼠游標懸停在「Geometry Imports」上,然後按一下「+ new layer」)。
找出農業區、落葉林、一年生草地或其他具有年度週期的土地覆蓋區中的點。將匯入作業命名為 roi。(如要瞭解如何透過程式輔助方式建立幾何圖形,請參閱這個頁面)。
現在,我們使用 roi 點,在該點下方的像素中,製作 NDVI 隨時間變化的圖表。在 Earth Engine 中製作圖表的方法是使用 ui.Chart 套件。(進一步瞭解如何在 Earth Engine 中製作圖表)。
具體來說,如要製作時間序列圖表,可以使用 ui.Chart.image.series() 方法:
程式碼編輯器 (JavaScript)
// Create a chart. var chart = ui.Chart.image.series({ imageCollection: withNDVI.select('NDVI'), region: roi, reducer: ee.Reducer.first(), scale: 30 }).setOptions({title: 'NDVI over time'}); // Display the chart in the console. print(chart);
針對 roi 幾何圖形,我們選擇了農業區中的一個點,產生的圖表看起來像圖 10。請注意,圖表建構函式的參數包含縮減器和比例,例如 reduceRegion()。由於我們提供的區域點只能與一個像素相交,因此使用「first」縮減器即可。如果區域較大,請使用「mean」或其他減速器,指定像素匯總方式。此外,如要以視覺化方式呈現圖表,只要列印即可。
離題:Landsat 的簡易雲遮罩
您可能已經注意到,這張圖表中的 NDVI 值時間序列看起來有點雜亂。這可能是雲層造成的。為改善這種情況,Earth Engine 針對具有熱波段的 Landsat 感測器提供雲遮罩演算法:ee.Algorithms.Landsat.simpleCloudScore()。這項演算法會將 Landsat TOA 反射率圖片做為輸入內容,並新增名為 cloud 的波段,這是像素雲量的索引,範圍從 0 到 100,分別代表雲量最少到最多。只要修改對應至集合的函式,即可在雲端指數上使用任意門檻 (20),讓圖表更清楚:
程式碼編輯器 (JavaScript)
var cloudlessNDVI = l8.map(function(image) { // Get a cloud score in [0, 100]. var cloud = ee.Algorithms.Landsat.simpleCloudScore(image).select('cloud'); // Create a mask of cloudy pixels from an arbitrary threshold. var mask = cloud.lte(20); // Compute NDVI. var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); // Return the masked image with an NDVI band. return image.addBands(ndvi).updateMask(mask); }); print(ui.Chart.image.series({ imageCollection: cloudlessNDVI.select('NDVI'), region: roi, reducer: ee.Reducer.first(), scale: 30 }).setOptions({title: 'Cloud-masked NDVI over time'}));
雲層遮蓋結果如圖 11 所示。請注意,時間序列看起來會稍微平滑一些,但仍可能包含受雲層影響的像素。調整雲端指數的門檻,並觀察圖表中的時間序列,瞭解這項門檻對結果的影響。
匯出映像檔
您已瞭解如何匯出 Earth Engine 計算的資料圖表,但如何匯出整張圖片呢?舉例來說,假設您已按照上一節所述,建構最綠像素合成圖:
程式碼編輯器 (JavaScript)
var greenest = cloudlessNDVI.qualityMosaic('NDVI');
這段程式碼與先前操作的唯一差異,在於現在使用的是雲端遮罩集合。您可以使用 Export 套件匯出這個資料集的子集 (由區域定義)。(進一步瞭解如何從 Earth Engine 匯出光柵和向量資料)。舉例來說,如要匯出可輕鬆嵌入其他文件的圖片,請按照先前做法建立視覺化圖片,然後匯出至 Google 雲端硬碟資料夾:
程式碼編輯器 (JavaScript)
// Create a 3-band, 8-bit, color-IR composite to export. var visualization = greenest.visualize({ bands: ['B5', 'B4', 'B3'], max: 0.4 }); // Create a task that you can launch from the Tasks tab. Export.image.toDrive({ image: visualization, description: 'Greenest_pixel_composite', scale: 30 });
執行這段程式碼時,請注意「Tasks」分頁中會建立新工作。如要啟動匯出設定對話方塊,請按一下「Tasks」分頁中的「RUN」按鈕。設定工作後,請按一下對話方塊中的「Run」(執行) 按鈕,開始匯出。不過,請注意:
在沒有 region 引數的情況下匯出時,請務必謹慎,因為如果您為 scale 設定相對較小的值,且地圖縮小至大區域,則可能會將「非常」大的圖片匯出至雲端硬碟資料夾。如需更多詳細資料和可能的設定參數清單,請參閱「文件」分頁中的 Export.image.toDrive() 文件。
Earth Engine API 簡介到此結束!您現在已瞭解大部分最常見的 Earth Engine 功能,應該可以自信地進行更複雜的分析。請務必閱讀文件,並搜尋論壇,尋找其他問題的答案。祝您編寫程式一切順利!