天天看點

Google earth engine——初學者容易犯錯的地方(1)如果以上兩端代碼沒看懂的話,不重要,告訴你,最好别用FOR循環,謝謝!

一下要介紹的主要是一些代碼的練習,以此來最大的話讓你能成果完成更為複雜的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各無法顯示,是以,你可以通過篩選和限制多少個數來檢視。

繼續閱讀