一下要介紹的主要是一些代碼的練習,以此來最大的話讓你能成果完成更為複雜的GEE計算,說白了就是讓你避免入坑環節的一些案例介紹。
避免将用戶端函數和對象與伺服器函數和對象混合
Earth Engine 伺服器對象是具有以ee (例如ee.Image,ee.Reducer)開頭的構造函數的對象,并且此類對象上的任何方法都是伺服器功能。任何不是以這種方式構造的對象都是用戶端對象。用戶端對象可能來自代碼編輯器(例如Map、Chart)或 JavaScript 語言(例如Date、Math、[]、 {})。
為避免意外行為,請勿在腳本中混合使用用戶端和伺服器功能,如此處、 此處和此處讨論的那樣。有關 地球引擎中用戶端與伺服器的深入解釋,請參閱此頁面和/或本教程。以下示例說明了混合用戶端和伺服器功能的危險:
Error — This code doesn't work!
var table = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');
// Won't work.
for(var i=0; i<table.size(); i++) {
print('No!');
}
C你能發現錯誤嗎?請注意,這table.size()是伺服器對象上的伺服器方法,不能與用戶端功能(如<條件)一起使用。
您可能希望使用 for 循環的一種情況是 UI 設定,因為代碼編輯器ui對象和方法是用戶端。 (Learn more about creating user interfaces in Earth Engine). For example:
Good — Use client functions for UI setup.
var panel = ui.Panel();
for(var i=1; i<8; i++) {
panel.widgets().set(i, ui.Button('button ' + i))
}
print(panel);
如果以上兩端代碼沒看懂的話,不重要,告訴你,最好别用FOR循環,謝謝!
Conversely, map() is a server function and client functionality won't work inside the function passed to map(). For example:
Error — This code doesn't work!
var table = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');
// Error:
var foobar = table.map(function(f) {
print(f); // Can't use a client function here.這裡一般隻要涉及function 都會涉及到return否則就會報錯
// Can't Export, either.
});
相反,map()是一個伺服器功能,用戶端功能在傳遞給map().例如:
Good — Use map() set().
var table = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');
//僅僅加載第一景影像
print(table.first());
// Do something to every element of a collection.用了一個map來周遊函數F
var withMoreProperties = table.map(function(f) {
// Set a property.加入 一個屬性,括号内是屬性名稱和屬性面積
return f.set('area_sq_meters', f.area())
});
print(withMoreProperties.first());
您還可以filter()基于計算或現有屬性和print()結果的集合。請注意,您無法列印包含超過 5000 個元素的集合。如果您收到“累積超過 5000 個元素後集合查詢中止”錯誤,filter()或limit()列印前集合。這種情況比較多,特别是在研究大區域的影像集合,你要一下輸出的話,那麼比較卡頓,而且同時會提示你超過5000各無法顯示,是以,你可以通過篩選和限制多少個數來檢視。