一般問題
我有問題,需要協助!
按照本指南發布問題,並盡可能提供詳細資訊 (請參閱 Stack Overflow 提問指南)。這通常表示:
傳送程式碼編輯器中的指令碼連結 (按一下「取得連結」按鈕即可取得)
如果是失敗的批次工作,請回報失敗工作的 ID。工作 ID 格式如下:
4C25GIJBMB52PXTEJTF4JLGL。您可以在程式碼編輯器的「工作」分頁中找到這些項目。瞭解詳情。
哪裡可以瞭解 Earth Engine 架構?
請參閱這篇論文: Gorelick et al. 2017。
是否有 Google 以外的 Earth Engine 推薦教學課程?
是否有任何建議的遙測教學課程?
請參閱 Ujaval Gandhi 的這門免費 EE 課程,其中包含介紹遙測技術的影片。
Earth Engine 程式設計
常見的編碼錯誤有哪些?
請參閱偵錯指南。
為什麼會收到「... is not a function」錯誤訊息?
如果 Earth Engine 找不到所呼叫的方法,就會發生這個錯誤。請檢查下列常見原因:
拼字或大小寫:方法會區分大小寫。根據 API 參考資料驗證拼字。
Error: img.normalizedDiff(...) -> Correct: img.normalizedDifference(...)
缺少型別轉換:從 .get() 等函式傳回的值是泛型 ee.ComputedObject 執行個體,必須明確轉換。請參閱「Unknown object type casting」。
Error: dict.get('val').add(5) -> Correct: ee.Number(dict.get('val')).add(5)
混合使用用戶端和伺服器方法:請勿在 Earth Engine 物件上使用標準 JavaScript 或 Python 方法 (例如 .push() 或 .append())。請參閱「避免混用用戶端和伺服器函式」。
Error: list.push(4) or list.append(4) -> Correct: list.add(4)
無法使用的方法:如果物件已正確輸入,且方法存在於文件中或先前可正常運作,但現在失敗,請回報錯誤。
為什麼我無法使用 ee.Image("image") * 2 等基本數學運算?
在 EE 中,您不應混用伺服器端和用戶端物件或作業。 EE 物件的所有作業都會在伺服器端執行。任何用戶端運算都無法達到預期效果。詳情請參閱這個頁面。
如何使用 for 迴圈或 if/else 陳述式?
Earth Engine 程式設計是使用函式語言完成,因此迴圈和條件運算應使用 map 或 filter 等同等概念表示。詳情請參閱這個頁面。
如何顯示圖片或影片中的文字標籤?
系統未內建文字標籤支援功能,但您可以:
- 使用第三方 JS 套件。 查看範例
- 使用第三方 Python 套件 geemap。
- 使用 QGIS,並透過 EE QGIS 外掛程式匯入 EE 圖片
我可以使用一些標準色調嗎?
如何建立使用 Earth Engine 的網站?
使用 Earth Engine 應用程式建立基本應用程式。在較複雜的情況下,您可以建構以 EE 為基礎的 App Engine 應用程式。
地圖 ID 的運作方式
地圖 ID (在整個 API 中稱為 mapid) 是金鑰,可供用戶端擷取地圖圖塊。每個 ID 都是雜湊值,是透過將圖片運算式提供給 getMapId 端點所建立。產生的 ID 是指向「圖片運算式」和「使用者憑證」的金鑰,可用於後續階段產生圖塊。
要求地圖圖塊時,需要指定圖塊位置 (x、y、zoom) 和 mapid (圖片和憑證的鍵)。您可以重複使用同一個 ID 載入多個地圖圖塊。mapid金鑰可重複使用,但會在幾小時後失效。我們不會公布 ID 的確切存續時間,但您編寫的任何程式碼都應能因應 ID 過期問題。
建立這些 ID 時,需要儲存少量資料並驗證憑證,因此最好盡可能重複使用。getMapId 端點沒有專屬的 API 配額,但如果工作流程建立 mapid 物件的速度接近擷取圖塊的速度,可能就是有問題。由於這些是暫時性資源,因此 Earth Engine 沒有 API 端點可移除、列出或管理這些 ID。
為什麼 ee.Algorithms.If() 會同時顯示 true 和 false 案例?
function a() { print("true"); }
function b() { print("false"); }
// Prints 'true' and 'false'.
ee.Algorithms.If(true, a(), b());
If() 演算法的運作方式與 Earth Engine 上的其他演算法相同,所有引數都必須先經過評估,演算法本身才能執行。演算法會取得 trueCase 和 falseCase 結果,然後根據 condition 引數挑選並傳回其中一個結果,但這兩個路徑都必須執行,才能將這些值傳遞至演算法。
我收到「Request payload size exceeds the limit」(要求酬載大小超過限制) 錯誤訊息
您嘗試傳送至 Earth Engine 的要求過大。如果程式碼使用大量用戶端「for」迴圈,或是從許多幾何物件建構 FeatureCollection,通常就會發生這種情況。在後者情況下,請產生包含這些幾何圖形的 CSV 檔案,並上傳至資料表資產,而不是在指令碼中建立這類幾何圖形。
ee.Image.clip() 和 ee.Filter.bounds() 有何不同?
請參閱這則 GIS Stack Exchange 討論串。
ee.Image.clip() 函式會遮蓋未與指定 ee.Geometry 或 ee.Feature 相交的像素,讓這些像素在視覺化呈現時變成透明,並在計算時排除。您可以將其視為從圖片剪下像素。
ee.Filter.bounds() 函式會根據圖片與 ee.Geometry 或 ee.Feature 的交集,從 ee.ImageCollection 中篩除 ee.Image 物件。這項功能可將分析範圍限制在與指定區域相交的圖片,有助於最佳化運算式。
如何將圖像像素轉換為特徵集合,每個像素對應一個特徵?
使用 ee.Image.sample() 函式。如需使用範例,請參閱函式的 API 參考頁面。
ee.ImageCollection.merge() 和 ee.ImageCollection.combine() 有何不同?
ee.ImageCollection.merge() 函式會將兩個集合中的所有圖片合併為一個集合,無論這些圖片是否具有重疊的頻帶、中繼資料、CRS 或比例。這是兩個集合的聯集。combine() 方法會將兩個集合中相符圖片的波段合併為單一集合。相符圖片會共用相同的 ID (system:index 屬性)。這是以圖片 ID 為依據的兩個集合的內部聯結,其中會合併相符圖片的波段。如需相符的圖片,次要圖片的波段會附加至主要圖片 (可選擇是否要覆寫)。如果沒有相符的圖片,則會傳回空集合。
如何依多個日期間隔篩選圖片集?
請參閱這則 GIS Stack Exchange 討論串。
您可以同時 merge()多個集合,也可以使用 ee.Filter.or()。
如何圍繞指定點建立定界框?
// Buffer the point by a chosen radius and then get the bounding box.
var LNG = -117.298;
var LAT = 45.162;
var point = ee.Geometry.Point([LNG, LAT]);
var buffer = point.buffer(30000); // half of box width as buffer input
var box = buffer.bounds(); // draw a bounding box around the buffered point
Map.centerObject(box);
Map.addLayer(point);
Map.addLayer(box);
// Map the buffer and bounds procedure over a point feature collection.
var pointCol = ee.FeatureCollection([
ee.Feature(ee.Geometry.Point([LNG + 1, LAT])),
ee.Feature(ee.Geometry.Point([LNG - 1, LAT]))
]);
var boxCol = pointCol.map(function(feature) {
var box = feature.buffer(30000).bounds();
return feature.setGeometry(box.geometry());
});
Map.addLayer(boxCol);
Data Catalog
可以新增資料集 X 嗎?
請按照資料集要求指南,提出資料集要求錯誤報告。
你也可以將資料上傳到 Earth Engine 主資料夾。請參閱「匯入格狀資料」和「匯入資料表資料」。
現有資料集有新版本
按照資料集要求指南提交資料集錯誤報告,並指出您要求更新資料集。
現有資料集未更新或缺少資產
回報問題前,請盡可能確認所選資產確實存在於資料集供應商的網站。詳情請參閱圖片遺失指南。
如要透過篩選 ImageCollection 尋找資產,請確保篩選條件不會過於嚴格。
請特別注意以下事項:
ESA 並未為早期第 1 級場景製作 Sentinel-2 SR (第 2 級資料)。
2000 年以前的 Landsat 影像並未涵蓋全球。
現有資料集的值有誤
在開發人員論壇上發布貼文。 加入可放大素材資源原始解析度的指令碼,清楚顯示錯誤的值。請說明您在何處觀察到替代值。
我還可以在哪裡詢問資料集相關問題?
如有 NASA 資料集相關問題,請參閱 NASA Earth Data 論壇。
如對在哥白尼資料集上運作的工具箱有任何疑問,請參閱 S1、S2 和 S3 論壇。
EE 目錄有多大?
截至 2023 年 10 月,目錄包含超過 1, 000 個資料集。(考量無損壓縮後) 占磁碟容量超過 90 PB。
EE 中的資料更新頻率為何?
一般來說,所有進行中的資料集每天至少會更新一次 (但並非所有這類資料集每天都有新資料)。部分資料集每天會更新數次。不過,沒有任何政策可確保目錄中包含最新資產。
如何以程式輔助方式查看 EE 目錄的內容?
資料集清單會以 STAC 格式匯出至 Google Cloud Storage bucket gs://earthengine-stac。項目檔案為 catalog.json。
我可以使用 Google 地圖資料或圖像進行分析嗎?
Google 不會授權或販售用於分析的基本地圖資料。
如何找出素材資源的擷取日期?
'system:version' 資產屬性是擷取時間戳記,格式為自 Unix Epoch 時間起算的微秒數。以下範例會將 Landsat 影像的擷取時間戳記轉換為人類可讀的格式。
var image = ee.Image('LANDSAT/LC08/C02/T1_L2/LC08_044034_20210508');
print('Ingest date', ee.Date(image.getNumber('system:version').divide(1000)));
Earth Engine 目錄是否含有 JSON-LD 中繼資料?
可以,JSON-LD 中繼資料會嵌入目錄 HTML 網頁。舉例來說,Sentinel-2 頁面包含下列區塊:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"name": "Earth Engine Data Catalog",
"item": "https://developers.google.com/earth-engine/datasets"
},{
"@type": "ListItem",
"position": 2,
"name": "Harmonized Sentinel-2 MSI: MultiSpectral Instrument, Level-1C",
"item": "https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S2_HARMONIZED"
}]
}
</script>
Landsat
simpleComposite 演算法的實作方式為何?
伺服器端導入方式等同於這段 JavaScript 程式碼。
如何使用 Landsat 地表反射率資料建立無雲複合影像?
Landsat Level 2 (地表反射率) 資料有數個品質波段,可用於遮蓋雲朵和其他不想要的影像構件。如需使用這些波段處理 Landsat 8 SR 影像,並建立中位數無雲複合影像的範例,請參閱這篇 GIS Stack Exchange 文章。在開發人員指南中,受監督分類範例會使用相同程序,建構無雲的合成影像。
是否需要跨感應器 Landsat 地表反射率協調?
Roy et al., 2016 年的論文,分析了 Landsat 7-8 大氣層頂端和地表反射率之間的差異。他們發布了 OLS 和 RMA 係數,讓讀者可以將一個感應器的資料反射率值轉換為另一個感應器的資料反射率值。該論文的最後一行指出:「雖然感應器差異很小,但視 Landsat 資料應用程式而定,可能會有顯著影響。」不過,這項分析是根據收集資料前的資料進行。
在「第 1 次收集」和「第 2 次收集」重新處理期間所做的改良,可能會影響感應器之間的關係,但據我們所知,目前尚未針對「第 1 次收集」或「第 2 次收集」資料進行類似 Roy 等人 (2016 年) 的分析。雖然沒有正式分析,但有影響力的 Landsat 使用者似乎普遍認為,第 2 集第 2 級 (地表反射率) 資料不需要修正。舉例來說,在回覆有關第 2 級第 2 集資料集協調作業必要性的問題時,Landsat 科學團隊的 Mike Wulder 指出,視感興趣的應用程式性質 (包括土地覆蓋地圖和變化偵測),第 2 集地表反射率產品非常適合且可靠,不需要跨感應器調整。
如何遮蓋 MSS 影像中的雲朵和雲影?
JavaScript 程式碼編輯器的第三方 msslib 模組包含 MSScvm 演算法的實作項目,以及其他有助於探索及準備 MSS 資料的實用函式。
資料管理
我上傳的資料歸誰所有?
根據 Earth Engine 服務條款,客戶擁有上傳至 Earth Engine 的資料。
我無法上傳資料!
在「程式碼編輯器」右上角的「工作」窗格中,查看上傳工作狀態。您也可以查看專屬工作頁面。
如果沒有任何工作,可能是因為你嘗試透過程式碼編輯器上傳檔案,但由於網路問題,檔案從未完成上傳,因此系統從未建立工作。改用其他瀏覽器或電腦。
如有工作失敗,請檢查顯示的錯誤。如果沒有特定錯誤訊息,請先執行 gdalinfo (點陣檔案) 或 ogr2ogr (向量檔案),確認檔案是否損毀。這些指令會嘗試讀取來源檔案中的所有資料,如果檔案損毀,就會顯示錯誤。
gdalinfo 呼叫範例:
gdalinfo -mm -stats -checksum file.tif
以下是 ogr2ogr 呼叫範例,可將 in.shp 轉換為 out.csv:
ogr2ogr -lco GEOMETRY=AS_WKT -f CSV out.csv in.shp
如果檔案看起來有效,請在開發人員郵寄清單上以文字形式 (而非螢幕截圖) 貼上失敗的工作 ID。工作 ID 的格式為 4C25GIJBMB52PXTEJTF4JLGL。盡可能將來源檔案設為可公開讀取。如果是私人檔案,請只與 earthengine@google.com 分享,方便 Earth Engine 團隊檢查。如果無法共用來源檔案,請至少提供 gdalinfo -mm -stats -checksum 的輸出內容。
如果 Earth Engine 不支援特定投影,您必須先重新投影資料,再使用 gdalwarp 等工具上傳。
如何上傳 NetCDF 或其他不支援的點陣格式檔案?
只有 GeoTIFF 檔案可以上傳至 Earth Engine。其他 GDAL 相容格式可使用 gdal_translate 轉換為 GeoTIFF。範例:
gdal_translate -co COMPRESS=DEFLATE file.nc file.tif
請注意,部分 NetCDF 或 HDF 檔案包含多個子資料集,可透過 gdalinfo 探索。在本例中,gdal_translate 指令如下所示 (請注意雙引號之間的路徑):
gdal_translate HDF4_EOS:EOS_GRID:"/tmp/MCD12Q1.A2001001.h00v08.005.2011055224312.hdf":MOD12Q1:Land_Cover_Type_1 file.tif
有時 NetCDF 檔案不會攜帶 GDAL 可辨識的投影。在這種情況下,您需要在 gdal_translate 指令列中設定投影和空間範圍。範例:
gdal_translate -a_srs EPSG:4326 -a_ullr -180 90 180 -90 file.nc file.tid
上傳 GeoTIFF 時,可以使用哪些壓縮演算法?
上傳時,GeoTIFF 可使用 DEFLATE、JPEG、JPEG-XL/JXL、LERC、LERC_DEFLATE、LERC_ZSTD、LZMA、LZW、WEBP 或 ZSTD 壓縮。如要即時讀取 COG,可以使用 DEFLATE、JPEG、LZW 或 ZSTD。ZSTD 是整體而言不錯的選擇,因為它能快速解壓縮,同時仍可有效壓縮大多數圖片。
如要在使用 gdal_translate 時套用 ZSTD 壓縮,請新增下列選項。如果資料有浮點值,請將 PREDICTOR 變更為 3。
gdal_translate in.tif out.tif \
-co COPY_SRC_OVERVIEWS=YES \
-co TILED=YES \
-co BLOCKXSIZE=512 \
-co BLOCKYSIZE=512 \
-co COMPRESS=ZSTD \
-co PREDICTOR=2 \
-co ZSTD_LEVEL=22 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS
我的點陣擷取作業已執行數天,但尚未完成。
使用 gdalinfo 檢查檔案是否已設定下列 GDAL 選項:
INTERLEAVE=PIXEL. 如果檔案包含這個選項和許多樂團,由於這類檔案的版面配置會大幅降低讀取速度,因此可能永遠無法完成擷取作業。
請先將這類檔案轉換為頻帶交錯式配置,再上傳:
gdal_translate -co "INTERLEAVE=BAND" src.tif dst.tif
我上傳的光柵與基本地圖不相符。
如果資料與底圖稍微偏移,可能是投影的基準面 (對地球形狀的假設) 不正確。最常見的情況是正弦投影無法完全編碼至 GDAL 中繼資料。如果您知道目標投影應為何 (例如使用 MODIS 正弦投影的檔案為 SR-ORG:6974),請在指令列上傳期間設定 --crs 旗標,或設定上傳資訊清單的 crs 欄位。
如果資料嚴重扭曲或完全錯置,可能是投影或仿射轉換有誤。
我的點陣圖只會顯示在東半球。
您可能上傳了涵蓋經度範圍 [0, 360] 的全域點陣圖。 不過,Earth Engine 規定點陣必須介於 [-180, 180] 之間。 在擷取點陣圖之前,先交換左右兩半。 請參閱這些 GIS Stack Exchange 建議。
為什麼我匯入的分類圖片看起來有斑點?
您可能使用了預設的 MEAN
金字塔式政策。分類圖片應使用 MODE 疊加政策,QA/位元遮罩圖片則應使用 SAMPLE 疊加政策。
我收到下列錯誤訊息:No data value -128.0 cannot be applied to band #0 of type Short<0, 255>。
GDAL 無法將單一位元組頻帶視為含有帶正負號的整數,因此會將這類頻帶讀取為不帶正負號的整數。這會與負的無資料值衝突。
如果值實際上是帶正負號的整數,請使用資訊清單上傳,並將此項目新增至包含檔案的圖塊集部分:data_type: "INT8"
如果值是不帶正負號的整數,檔案就會有錯誤的 nodata 值。您可以在上傳時使用正確的資料值 (或從未出現的值,如果有的話) 覆寫該值。你也可以使用 gdal_translate -a_nodata 變更 nodata 值,或使用 gdal_edit.py -unsetnodata 移除該值。
如何上傳 GeoJSON 或其他不支援的向量格式檔案?
使用 ogr2ogr 將 OGR 相容格式轉換為 CSV 或 SHP。範例:
or2ogr -f "ESRI Shapefile" file.shp file.kml
請注意,在 CSV 上傳作業中,幾何圖形資料欄可以包含 GeoJSON。
我想使用 Python 上傳資料,或一次上傳多個檔案。
使用指令列上傳。如要上傳這類檔案,必須先將來源檔案放入 GCS (Google Cloud Storage) bucket。只要不超過免費方案限制,使用 GCS 就不會產生任何費用,詳情請參閱定價頁面。
我想上傳分割成多個圖塊的大型點陣鑲嵌。
如果所有檔案的投影和像素大小都相同,只要將這些檔案一起上傳至同一個素材資源,系統就會自動將其拼接在一起。
如果檔案的投影或像素大小不同,就無法拼接成單一點陣資產。請改為將每個圖塊分別上傳至同一個 ImageCollection,並使用 ImageCollection.mosaic() 製作成馬賽克。
我嘗試上傳馬賽克,但收到有關圖塊不符的錯誤訊息。
Earth Engine 光柵鑲嵌的圖塊必須具有相同的投影和像素大小。此外,圖塊必須完全對齊像素邊界。
我嘗試從 GCS bucket 上傳檔案,但 Earth Engine 找不到該檔案。
您可能使用不同的 Google 帳戶上傳 GCS 資料,以及連結至 Earth Engine。請確認您用來連線至 Earth Engine 的帳戶可讀取 GCS 檔案。如果瀏覽器多重登入功能造成混淆,請在無痕瀏覽器視窗中連線至 Earth Engine。
我想一次匯出多項資產。
你必須分別匯出每張圖片。
我想使用單一指令移動或刪除 Folder 或 ImageCollection。
你必須先移動或刪除每個資產,然後移動或刪除父項資料夾或集合。如果子項資產數量眾多,請編寫 Shell 或 Python 迴圈來逐一疊代。
我想從 Earth Engine 外部直接存取資料。
QGIS 具有 Earth Engine 外掛程式。
GDAL 具有 Earth Engine 驅動程式。
其他系統可以使用 EE REST API。
我想更新部分 Earth Engine 資產,但不想重新完整擷取。
上傳至 EE 的點陣或向量資料無法更新。 只能更新資產中繼資料屬性。
我即將無法存取帳戶,如何使用資產?
如果原始帳戶的政策允許資料移轉,請與其他帳戶共用資產,然後將資產複製到新帳戶。如有大量資產要移動,請使用指令列複製公用程式。
帳戶刪除後,您就無法再存取該帳戶擁有的資產。
匯出的圖片儲存位置有誤。
對於正弦或圓錐等某些投影方式,GeoTIFF 檔案有時無法儲存所有必要的投影參數。這會導致匯出的檔案在電腦 GIS 工具中顯示在錯誤位置,或重新擷取至 EE 時發生錯誤。
如要修正這個問題,請指定已知可順利處理 GeoTIFF 檔案的匯出 crs 參數,例如使用包含感興趣區域的 UTM 區域 EPSG 代碼。
我應該使用哪個 Cloud Storage 值區位置來儲存 COG 資產?
答案取決於您要盡量爭取哪些轉換。如果您要盡量縮短運算存取延遲時間,建議將 COG 資產儲存在 US-CENTRAL* 的 GCS bucket。如要瞭解其他注意事項,請參閱值區位置頁面。
匯出的特徵集合資產不會保留我設定的屬性。
沒有任何 Export.table.* 函式會在輸出內容中保留資料表層級的屬性。
許多輸出格式 (例如 CSV、GeoJSON) 不支援這類中繼資料。Export.table.toAsset 函式可以支援表格層級的屬性,但目前不支援。
以 CSV 格式匯出至雲端硬碟的表格會轉換為 XLSX 格式。
視 Google 雲端硬碟設定而定,從 Earth Engine 匯出的 CSV 表格可能會轉換為 XLSX 檔案,並產生非預期的影響,例如資料類型轉換。如要修改後續匯出的行為,請按照下列步驟操作。
- 在 Google 雲端硬碟網頁版中,按一下右上方的「設定」齒輪圖示。
- 按一下 [設定]。
- 捲動至「將已上傳的檔案轉換成 Google 文件編輯器格式」,然後取消勾選。
程式碼編輯器
我無法登入程式碼編輯器,因為系統提示我使用錯誤的帳戶。
登出,在「選擇帳戶」頁面選取已註冊使用 Earth Engine 的帳戶,然後在第二個「選擇帳戶以繼續使用 Earth Engine Code Editor」頁面中重新選取相同帳戶 (確切措辭可能有所不同)。
我想擷取全球地圖的螢幕截圖,但我不喜歡 Web Mercator 投影。
程式碼編輯器使用的地圖投影是 Web Mercator (「EPSG:3857」)。這會使赤道以外的物體變大,導致高緯度地區看起來比實際大得多,相較之下,赤道附近的地區則顯得較小。您無法變更程式碼編輯器的地圖畫布投影,但可以使用 ee.Image.changeProj 方法,在所選投影的圖片中「繪製」圖片,然後投影到 Web Mercator 畫布。如要查看在 Robinson 投影中,將全球 DEM 顯示在程式碼編輯器地圖上的範例,請參閱該方法的 API 參考資料頁面。請注意,這項技術僅適用於視覺化用途,因為程式碼編輯器的檢查器和繪圖工具仍以 Web Mercator 運作。
我的指令碼無法儲存 (Script error: Unknown commit)。
如果在儲存指令碼時收到 Script error: Unknown commit 訊息,可能表示要儲存的存放區未同步。造成這種狀態的原因不一,難以判斷。如要解決問題,請使用「指令碼」分頁右上角的按鈕重新整理指令碼清單。如果問題仍未解決,請嘗試從「指令碼」分頁中的「新增」按鈕建立新的存放區,然後將指令碼儲存至該處 (您可能需要將指令碼從不同步的存放區移至新的存放區)。