常見問題

一般問題

我有問題,需要協助!

按照這份指南發布問題,並盡可能提供詳細資訊 (請參閱 Stack Overflow 提問指南)。這通常表示:

  • 在程式碼編輯器中傳送指令碼連結 (點選「取得連結」按鈕即可取得)

  • 分享執行指令碼所需的任何素材資源

  • 如果是失敗的批次工作,請回報失敗工作的 ID。工作 ID 格式如下:4C25GIJBMB52PXTEJTF4JLGL。您可以在程式碼編輯器的「Task」(工作) 分頁中找到這些工作。瞭解詳情。

哪裡可以查看 Earth Engine 架構的相關資訊?

請參閱這篇論文:Gorelick et al. 2017。

請參閱「EDU」和「訓練資源」頁面。

請參閱 Ujaval Gandhi 的免費 EE 課程,其中包含遙測簡介影片。

Earth Engine 程式設計

常見的編碼錯誤有哪些?

請參閱偵錯指南。

為什麼會出現「... is not a function」錯誤?

如果 Earth Engine 找不到呼叫的方法,就會發生這個錯誤。請檢查下列常見原因:

拼寫或區分大小寫:方法會區分大小寫。請根據 API 參考資料驗證拼寫。

Error: img.normalizedDiff(...) -> Correct: img.normalizedDifference(...)

缺少類型轉換:從 .get() 等函式傳回的值是泛型 ee.ComputedObject 執行個體,必須明確轉換。請參閱「未知物件類型轉換」。

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 套件 ee-palettes。

如何建立使用 Earth Engine 的網站?

基本應用程式請使用 Earth Engine 應用程式。在較複雜的情況下,您可以建構採用 EE 的 App Engine 應用程式。

地圖 ID 的運作方式

地圖 ID (在 API 中稱為 mapid) 是金鑰,可讓用戶端擷取地圖圖塊。每個 ID 都是雜湊,建立方式是將圖片運算式提供給 getMapId 端點。產生的 ID 是指向圖片運算式和使用者憑證的金鑰,用於在後續階段產生圖塊。

要求地圖圖塊時,必須指定圖塊的位置 (x、y、zoom) 和 mapid (圖片和憑證的金鑰)。同一個 ID 可重複用於載入多個地圖圖塊。mapid 金鑰的重複使用次數沒有限制,但會在幾小時後失效。我們不會公布具體的保留時間,但您編寫的任何程式碼都應能彈性因應 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 引數挑選並傳回其中一個結果,但必須先執行這兩個路徑,才能將這些值傳遞至演算法。

收到「要求酬載大小超過上限」錯誤訊息

您嘗試傳送給 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 並未針對早期 Level 1 景象產生 Sentinel-2 SR (Level 2 資料)。

  • Landsat 在 2000 年以前並未涵蓋全球。

現有資料集的值有誤

在開發人員論壇上發文。 加入指令碼,放大素材資源的原始解析度,清楚顯示錯誤的值。請說明您是在哪裡觀察到替代值。

我還能到哪裡詢問資料集相關問題?

如對 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 紀元起算的微秒數。以下範例會將 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 第 2 級 (地表反射率) 資料有多個品質波段,可用來遮蓋雲層和其他不必要的影像構件。這篇 GIS Stack Exchange 文章提供範例,說明如何使用這些波段處理 Landsat 8 SR 影像,並建立中位數無雲合成影像。開發人員指南中的監督式分類範例,也是使用相同程序建構無雲合成影像。

是否需要跨感測器 Landsat 地表反射率協調?

Roy et al., 2016 包含 Landsat 7-8 TOA 與地表反射率之間的反射率差異分析。他們發布了 OLS 和 RMA 係數,讓讀者可以將一個感測器資料的反射率值轉換為另一個感測器資料。論文的最後一行指出:「雖然感測器差異相當小,但可能會對 Landsat 資料應用產生重大影響。」不過,這項分析是根據預先收集的資料。

Collection 1 和 Collection 2 重新處理期間所做的改善,可能會影響感應器之間的關係,但據我們所知,目前尚未有類似 Roy 等人 (2016) 對 Collection 1 或 Collection 2 資料進行的分析。雖然沒有正式分析,但有影響力的 Landsat 使用者似乎普遍認為,Collection 2、Level 2 (地表反射率) 資料不需要校正。舉例來說,Landsat 科學團隊的 Mike Wulder 在回答有關 Collection 2、Level 2 協調需求的問題時指出,根據感興趣的應用性質 (包括土地覆蓋圖和變化偵測),Collection 2 地表反射率產品非常適合且可靠,不需要跨感測器調整。

如何遮蓋 MSS 圖像中的雲和雲影?

JavaScript 程式碼編輯器的第三方 msslib 模組包含 MSScvm 演算法的實作,以及其他用於探索和準備 MSS 資料的實用函式。

資料管理

我上傳的資料歸誰所有?

根據 Earth Engine 服務條款,客戶上傳至 Earth Engine 的資料歸客戶所有。

我無法上傳資料!

在程式碼編輯器右上方的「Tasks」窗格中,查看上傳工作狀態。您也可以查看專屬工作頁面。

如果沒有工作,可能是您嘗試透過程式碼編輯器上傳檔案,但因網路問題而未完成上傳,因此未建立工作。請改用其他瀏覽器或電腦。

如果工作失敗,請查看顯示的錯誤。如果沒有特定錯誤訊息,請先確認檔案未損毀,方法是針對光柵檔案執行 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 壓縮。Earth Engine 就地讀取的 COG (使用 ee.Image.loadGeoTIFF() 或做為 COG 支援的資產) 可使用 DEFLATE、JPEG、LZW、PACKBITS、ZSTD 或不壓縮 (請參閱 COG 最佳做法)。ZSTD 是不錯的整體選擇,因為解壓縮速度快,且對大多數圖片仍能提供良好的壓縮效果。

如要在使用 gdal_translate 時套用 ZSTD 壓縮,請新增下列選項。如果資料有浮點值,請將 PREDICTOR 變更為 3。(如要將檔案註冊為 COG,而非上傳,請參閱 COG 註冊指南)。

gdal_translate in.tif out.tif \
  -co BIGTIFF=YES \
  -co TILED=YES \
  -co BLOCKXSIZE=512 \
  -co BLOCKYSIZE=512 \
  -co COMPRESS=ZSTD \
  -co PREDICTOR=2 \
  -co ZSTD_LEVEL=16 \
  -co INTERLEAVE=BAND \
  -co NUM_THREADS=ALL_CPUS

我的光柵擷取作業已執行多天,但尚未完成。

使用 gdalinfo 檢查檔案是否已設定下列 GDAL 選項:INTERLEAVE=PIXEL。如果檔案採用這個選項且包含多個波段,則可能永遠無法完成擷取,因為這類檔案的版面配置會導致讀取速度非常慢。

上傳前,請先將這類檔案轉換為波段交錯式版面配置:

gdal_translate -co "INTERLEAVE=BAND" src.tif dst.tif

這適用於擷取作業;COG 支援的資產支援兩種交錯方式 (請參閱單頻與多頻檔案)。

我上傳的光柵與基本地圖不符。

如果資料與底圖略有偏移,投影可能含有不正確的基準 (對地球形狀的假設)。這種情況最常發生在正弦投影,因為這類投影無法在 GDAL 中繼資料中完整編碼。當您知道目標投影應為何時 (例如,使用 MODIS 正弦投影的檔案為 SR-ORG:6974),請在指令列上傳期間設定 --crs 旗標,或設定上傳資訊清單的 crs 欄位。

如果資料嚴重扭曲或位置完全錯誤,則投影或仿射轉換可能有誤。

我的光柵只顯示在東半球。

您可能上傳了經度範圍為 [0, 360] 的全球光柵。不過,Earth Engine 要求光柵必須介於 [-180, 180] 範圍內。在擷取前,將光柵的左右兩半對調。 請參閱這些 GIS Stack Exchange 建議。

為什麼擷取的分類圖片看起來有斑點?

您可能使用了預設的 MEAN 金字塔政策。分類圖片應使用 MODE 金字塔政策,品質確保/位元遮罩圖片則應使用 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。

earthengine rm -r 會刪除資料夾或集合及其中的所有內容,但一次只能刪除一項資產,因此大型集合可能需要數小時才能刪除。如要加快速度,請透過指令碼平行刪除子項,然後刪除父項 (請參閱「處理大型集合」);相同的方法適用於任何平面集合或資料夾。如果資料夾含有其他資料夾或集合,必須由下而上清空,因為容器必須清空才能刪除。如要移動,請以相同方式使用 mv。

我想直接從 EE 外部存取 Earth Engine 資料。

QGIS 有 Earth Engine 外掛程式。

GDAL 具有 Earth Engine 驅動程式。

其他系統則可使用 EE REST API。

我想更新部分 Earth Engine 資產,但不想完全重新擷取。

上傳至 EE 的光柵或向量資料無法更新。只能更新資產中繼資料屬性。例外狀況是 COG 支援的資產,您可以重新註冊並啟用覆寫功能,將資產指向更新後的 Cloud Storage 檔案。

我無法再存取帳戶。如何處理素材資源?

如果原始帳戶的政策允許資料移轉,請將資產共用給其他帳戶,然後複製資產,讓新帳戶擁有這些資產。如要移動大量資產,請使用指令列複製公用程式。

帳戶刪除後,就無法再存取該帳戶擁有的資產。

匯出的映像檔位置不正確。

對於某些投影 (例如正弦或圓錐),GeoTIFF 檔案有時無法儲存所有必要的投影參數。這會導致匯出的檔案在電腦 GIS 工具中查看或重新擷取至 EE 時,顯示在錯誤的位置。

如要修正這個問題,請指定已知可與 GeoTIFF 檔案搭配使用的匯出 crs 參數,例如使用包含感興趣區域的 UTM 區域 EPSG 代碼。

匯出的特徵集合資產不會保留我設定的屬性。

沒有任何 Export.table.* 函式會在輸出內容中保留資料表層級屬性。許多輸出格式 (例如 CSV、GeoJSON) 都不支援這類中繼資料。Export.table.toAsset 函式可支援資料表層級屬性,但目前不支援。

以 CSV 格式匯出至雲端硬碟的表格會轉換為 XLSX 格式。

視 Google 雲端硬碟設定而定,從 Earth Engine 匯出的 CSV 表格可能會轉換為 XLSX 檔案,並產生非預期的效果,例如資料類型轉換。請按照下列步驟,修改後續匯出的行為。

  1. 在 Google 雲端硬碟網頁版中,按一下右上方的「設定」齒輪圖示。
  2. 按一下 [設定]。
  3. 捲動至「將已上傳的檔案轉換成 Google 文件編輯器格式」,然後取消勾選。

雲端最佳化 GeoTIFF (COG)

如需背景資訊,請參閱 COG 總覽和 COG 註冊指南。

我分享了 COG 支援的資產,但協作者收到權限錯誤訊息。

COG 支援的資產是指向 Cloud Storage bucket 中檔案的指標,因此協作者需要具備 Earth Engine 資產和 bucket 的讀取權限。在 bucket 上,授予他們 Storage 物件檢視者和 Storage bucket 檢視者角色;如果他們原本可以查看某項資產,但發生權限錯誤,通常表示缺少其中一個角色。請參閱「設定權限」。

我應該使用哪個 Cloud Storage bucket 位置來儲存 COG 資產?

目前僅支援少數美國位置,Earth Engine 會拒絕其他位置值區的註冊和讀取要求。請參閱支援的值區位置。

我更換了 Cloud Storage 中的 COG 檔案,為什麼素材資源無法載入,或仍顯示舊資料?

註冊 COG 時,Earth Engine 會固定檔案的物件產生 (版本),因此覆寫檔案不會更新資產。請以相同名稱重新註冊素材資源,並啟用覆寫功能,不必先刪除素材資源。請參閱「更新、取代及刪除 COG 支援的資產」。

如何判斷 COG 支援的資產指向哪個檔案版本?

資產的中繼資料 (ee.data.getAsset()) 會將固定的世代顯示為檔案 URI 的後置字串。請參閱「物件世代」。

如果我刪除 Cloud Storage 中的 COG 檔案,但未刪除 Earth Engine 資產,或反之,會發生什麼情況?

他們獨立自主,刪除 Earth Engine 資產後,Cloud Storage 中的檔案會保持不變;刪除檔案後,資產會保留在原處,但通常會無法讀取像素。請參閱獨立生命週期。

如何以最快速度刪除或取代大型 COG 支援的 ImageCollection?

Earth Engine API 沒有批次或遞迴刪除功能,earthengine rm -r 一次只能刪除一項資產。如要更換圖片,請重新註冊並啟用覆寫功能,不要刪除圖片;如要刪除圖片,請透過指令碼平行處理。如需方法和指令碼,請參閱「處理大型集合」。

為什麼「工作」分頁中沒有顯示我的 COG 註冊資訊?

註冊 COG 是同步 API 呼叫,只會為檔案的中繼資料建立索引,而非批次擷取工作,因此不會建立工作。呼叫傳回後,資產就會顯示在「Assets」(資產) 分頁中。請參閱「提交註冊要求」一節。

我可以將多個 COG 檔案合併為一個 Earth Engine 資產嗎?

只有在每個檔案都包含相同場景的不同波段時,才在資訊清單中將每個檔案列為獨立圖塊集,並將波段對應至圖塊集。您無法將空間相鄰的檔案拼接成一個 COG 支援的資產;請在 ee.ImageCollection 中將每個檔案註冊為自己的圖片,並呼叫 mosaic()。請參閱資訊清單限制。

COG 支援的資產可以使用哪些壓縮配置、圖塊大小和像素類型?

如要瞭解支援的壓縮配置、圖塊大小和像素資料類型,請參閱準備外部 COG 的最佳做法。如果檔案的壓縮格式無法由 Earth Engine 直接讀取為 COG,仍可上傳為標準資產。

我收到「無法在前 10000000 個位元組中讀取 TIFF 的中繼資料」錯誤訊息。

Earth Engine 在載入或註冊檔案時,只會讀取檔案的開頭;含有多個圖塊的大型圖片和截斷的檔案會超出這個限制。請參閱選擇檔案尺寸,瞭解限制和如何避免超過限制。

檔案變更時,ee.Image.loadGeoTIFF() 與已註冊資產有何不同?

ee.Image.loadGeoTIFF() 會在每次運算或地圖圖塊要求時,讀取檔案的最新版本,因此會挑選替換項目 (地圖上的替換項目不平均,因為轉譯的地圖圖塊會保留在快取中)。已註冊的資產一律會固定註冊時的版本,必須重新註冊才能看到新檔案,但其足跡和中繼資料會建立索引,因此可在大型集合中使用。請參閱「從 Cloud Storage 讀取 COG」。

程式碼編輯器

我無法登入程式碼編輯器,因為系統提示我使用錯誤的帳戶。

登出,在「選擇帳戶」頁面選取已註冊使用 Earth Engine 的帳戶,然後在第二個「選擇帳戶以繼續前往 Earth Engine 程式碼編輯器」頁面 (確切用語可能不同) 重新選取相同帳戶。

我想擷取全球地圖的螢幕截圖,但不喜歡網路麥卡托投影。

程式碼編輯器使用的地圖投影是網路麥卡托 ('EPSG:3857')。這種投影法會放大遠離赤道的物體,使高緯度地區看起來比實際大得多,您無法變更程式碼編輯器地圖畫布的投影,但可以使用 ee.Image.changeProj 方法,將所選投影的圖片「繪製」到 Web Mercator 畫布。如需在羅賓森投影中,向程式碼編輯器地圖顯示全球 DEM 的範例,請參閱該方法的 API 參考資料頁面。請注意,這項技術僅適用於視覺化,因為程式碼編輯器的檢查器和繪圖工具仍會在 Web Mercator 中運作。

無法儲存指令碼 (Script error: Unknown commit)。

如果儲存指令碼時收到 Script error: Unknown commit 訊息,可能表示儲存目標存放區未同步。造成這種狀態的原因不一,且難以判斷。如要解決這個問題,請使用「Script」分頁右上角的按鈕重新整理指令碼清單。如果無效,請嘗試在「Script」分頁中使用「New」按鈕建立新的存放區,並將指令碼儲存在該處 (您可能需要將指令碼從未同步的存放區移至新的存放區)。

為什麼程式碼編輯器中重複出現 400 錯誤?

如果程式碼編輯器重複顯示 400 錯誤,請前往 https://myaccount.google.com/connections,在應用程式和服務清單中找到「Earth Engine Code Editor」,選取該項目,然後選取「刪除你與 Earth Engine Code Editor 之間的所有連結」並確認。接著開啟程式碼編輯器,重新驗證。

如何復原刪除的腳本和資料夾?

如果不小心刪除現有存放區中的指令碼或資料夾,完整的修訂版本記錄仍會保留在我們伺服器的 Git 記錄中。如要還原已刪除的指令碼或資料夾,請使用標準 Git 指令列工具,在本機複製存放區。

不過,刪除整個存放區 (users/username/repository) 會永久移除存放區及其在 earthengine.googlesource.com 中的修訂版本記錄,且無法復原或復原。

如需產生 Git 憑證、複製存放區,以及還原已刪除檔案或資料夾的逐步操作說明,請參閱指令碼復原和存放區遷移指南。

如何重新命名指令碼存放區根目錄?

指令碼根目錄 (users/username) 會繫結至原始 Earth Engine 帳戶註冊。您無法直接在後端重新命名,因為這樣會破壞任何使用 require('users/username/repository:...') 路徑匯入模組化程式碼的外部指令碼或協作者專案。

如需新的命名空間,建議您將工作遷移至新帳戶:

  1. 使用新的 Google Identity 註冊新的 Earth Engine 帳戶 (這會產生乾淨的 users/new_username 根目錄)。
  2. 請按照存放區遷移操作說明複製舊存放區,並將完整記錄推送至新的空白存放區。

重要注意事項:

  • 公開模組:如果您有其他人依賴的公開模組,強烈建議您保留舊帳戶和存放區,以免中斷他們的工作流程。
  • 私人指令碼:如果指令碼完全不公開,可以更新 require() 匯入陳述式,參照新的存放區路徑,然後安全地刪除舊存放區。