一般問題
我有問題,需要協助!
按照本指南的規定發布問題,並盡可能提供更多資訊 (請參閱 Stack Overflow 的問問題指南)。這通常表示:
在程式碼編輯器中傳送指令碼連結 (按一下「取得連結」按鈕即可取得)
針對失敗的批次工作,回報失敗工作 ID。工作 ID 如下所示:
4C25GIJBMB52PXTEJTF4JLGL
。您可以在程式碼編輯器的「工作」分頁中找到這些工作。瞭解詳情。
我可以在哪裡閱讀 Earth Engine 架構相關資訊?
請參閱這篇論文:Gorelick 等人,2017。
有沒有 Google 以外的推薦 Earth Engine 教學課程?
有推薦的遠端感應教學課程嗎?
請參閱 Ujaval Gandhi 提供的免費 EE 課程,其中包含介紹遙測的影片。
Earth Engine 程式設計
常見的程式碼錯誤有哪些?
請參閱偵錯指南。
為什麼我不能使用 ee.Image("image") * 2
等基本算式?
在 EE 中,請勿混用伺服器端和用戶端物件或作業。所有 EE 物件作業都是在伺服器端執行。任何用戶端運算都不會執行您預期的動作。請參閱這個頁面瞭解詳情。
如何使用 for
迴圈或 if/else
陳述式?
Earth Engine 程式設計是使用函數式語言完成,因此迴圈和條件運算應使用 map
或 filter
等等同概念來表示。詳情請參閱這個頁面。
如何在圖片或影片中顯示文字標籤?
系統並未內建文字標籤支援功能,但您可以:
- 使用第三方 JS 套件。查看示例
- 使用第三方 Python 套件 geemap。
- 使用 QGIS 搭配 EE QGIS 外掛程式匯入 EE 圖片
我可以使用一些標準色彩組合嗎?
使用第三方 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 到期。
建立這些 ID 需要儲存少量資料並驗證憑證,因此建議盡可能重複使用這些 ID。沒有與 getMapId
端點特別相關的 API 配額,但如果有任何工作流程涉及以與擷取圖塊相近的速度建立 mapid
物件,就可能有問題。由於這些是暫時性資源,Earth Engine 沒有可用來移除、列出或管理這些 ID 的 API 端點。
為什麼 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
來尋找資產,請確保篩選條件不會過於嚴格。
特別注意以下事項:
歐洲太空總署並未針對早期的第 1 級影像,產生 Sentinel-2 SR (第 2 級資料)。
Landsat 在 2000 年前沒有全球涵蓋範圍。
現有資料集中含有錯誤值
在開發人員論壇發布貼文。加入指令碼,讓系統放大素材資源的原始解析度,並清楚顯示哪些值有誤。說明您在何處觀察到替代值。
我還能向哪裡詢問資料集相關問題?
如有 NASA 資料集相關問題,請前往 NASA Earth Data 論壇。
如對在哥白尼資料集上運作的工具箱有任何疑問,請參閱 S1、S2 和 S3 論壇。
EE 目錄有多大?
截至 2023 年 10 月,目錄內含超過 1, 000 個資料集。磁碟上的大小超過 90 千兆位元組 (考量無損壓縮後)。
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 Level 2 (地表反射率) 資料有幾個品質頻帶,可用來遮蔽雲和其他不必要的圖像瑕疵。這篇 GIS Stack Exchange 文章提供了使用這些頻帶處理 Landsat 8 SR 影像,並建立無雲的中位數合成影像的範例。您可以使用相同程序建立無雲影的組合影像,用於開發人員指南中的監督分類範例。
是否需要跨感測器 Landsat 地表反射率調和?
Roy et al., 2016 年的研究則分析了 Landsat 7-8 TOA 與地表反射率之間的反射率差異。他們發布了 OLS 和 RMA 係數,方便讀者將一個感應器資料的反射率值轉換為另一個感應器的值。論文的最後一行指出:「雖然感應器之間的差異很小,但視 Landsat 資料應用方式而定,可能會造成重大影響。」不過,這項分析是根據收集前資料進行。
在收集 1 和收集 2 重新處理期間所做的改善可能會影響感應器之間的關係,但據我們所知,目前尚未針對收集 1 或收集 2 資料進行類似 Roy 等人 (2016 年) 的分析。雖然沒有正式分析,但影響力強大的 Landsat 使用者似乎普遍認為,Collection 2 的 Level 2 (地表反射率) 資料不需要修正。舉例來說,在回覆有關需要收集 2 級別 2 的調和作業問題時,Landsat 科學團隊的 Mike Wulder 指出,視應用程式性質而定 (包括土地覆蓋率地圖和變化偵測),收集 2 地表反射率產品非常適合且可靠,不需要跨感測器調整。
如何在 MSS 影像中遮蓋雲和雲影?
JavaScript 程式碼編輯器的第三方 msslib 模組包含 MSScvm 演算法的實作方式,以及其他用於探索及準備 MSS 資料的實用函式。
資料管理
我上傳的資料歸誰所有?
根據 Earth Engine 服務條款,客戶擁有上傳至 Earth Engine 的資料。
我無法上傳資料!
在「Code Editor」的右上角「工作」窗格中,查看上傳工作狀態。您也可以查看專屬工作頁面。
如果沒有任務,表示您可能嘗試透過程式碼編輯器上傳檔案,但由於網路問題,檔案未完成上傳,因此未建立任務。請嘗試使用其他瀏覽器或電腦。
如果有失敗的工作,請檢查顯示的錯誤。如果沒有特定的錯誤訊息,請先針對影像檔案執行 gdalinfo
,針對向量檔案執行 ogr2ogr
,確認檔案並未損毀。這些指令會嘗試讀取來源檔案的所有資料,並在檔案毀損時顯示錯誤。
gdalinfo 呼叫的範例:
gdalinfo -mm -stats -checksum file.tif
將 in.shp
轉換為 out.csv
的 ogr2ogr 呼叫範例:
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_translate
將其他與 GDAL 相容的格式轉換為 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 中繼資料中完整編碼的正弦投影時。當您知道目標預測值應為何 (例如SR-ORG:6974
適用於使用 MODIS 正弦投影的檔案),請在指令列上傳期間設定 --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 無法將單位元組頻帶視為含有帶正負號的整數,因此會將此類頻帶讀取為不帶正負號的整數。這會與負值的「no data」值相衝突。
如果您的值實際上是帶符號整數,請使用資訊清單上傳功能,並將以下內容新增至包含檔案的圖塊集區段: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) 值區。如果您未超過免費方案的限制,GCS 用量就不會產生任何費用,請參閱定價頁面。
我想上傳大型光柵馬賽克圖,並將其分割成多個圖塊。
如果所有檔案都具有相同的投影和像素大小,只要將它們一起上傳至同一個素材資源,系統就會自動將它們拼貼在一起。
如果檔案的投影或像素大小不同,就無法拼接成單一光柵素材資源。請改為將每個圖塊上傳為個別素材資源,並放入可使用 ImageCollection.mosaic()
拼貼的相同 ImageCollection
我嘗試上傳馬賽克圖時,收到不相符圖塊的錯誤訊息。
Earth Engine 光柵馬賽克的圖塊必須具有相同的投影和像素大小。此外,圖塊必須完全對齊像素邊界。
我嘗試從 GCS 值區上傳檔案,但 Earth Engine 找不到該檔案。
您可能使用不同的 Google 帳戶上傳 GCS 和連結至 Earth Engine。請確認 GCS 檔案可供您用來連線至 Earth Engine 的帳戶讀取。如果瀏覽器多重登入功能讓您感到困惑,請在無痕式瀏覽器視窗中連線至 Earth Engine。
我想一次匯出多個素材資源。
必須個別匯出每張圖片。
我想透過單一指令移動或刪除 Folder
或 ImageCollection
。
您必須先移動或刪除每個資產,然後再移動或刪除父項資料夾或集合。如果子項資產很多,請編寫 shell 或 Python 迴圈來逐一處理。
我想直接從 EE 外部存取 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 值區中。如要瞭解其他注意事項,請參閱「值區位置」頁面。
匯出的地圖集合素材資源不會保留我設定的屬性。
沒有任何 Export.table.*
函式會在輸出內容中保留資料表層級的屬性。許多輸出格式 (例如 CSV、GeoJSON) 不支援這類中繼資料。Export.table.toAsset
函式可支援表格層級的屬性,但目前不支援。
以 CSV 格式匯出至 Google 雲端硬碟的資料表會轉換為 XLSX 格式。
根據 Google 雲端硬碟設定,從 Earth Engine 匯出的 CSV 表格可能會轉換為 XLSX 檔案,並產生意外的效果,例如資料類型轉換。請按照下列步驟修改後續匯出作業的行為。
- 在 Google 雲端硬碟網頁版中,按一下右上方的「設定」齒輪圖示。
- 按一下 [設定]。
- 捲動至「將已上傳的檔案轉換成 Google 文件編輯器格式」並清除勾選。
程式碼編輯器
我無法登入程式碼編輯器,因為系統會提示我使用錯誤的帳戶。
請登出,然後在「選擇帳戶」頁面中選取註冊使用 Earth Engine 的帳戶,接著在第二個「選擇帳戶,繼續使用 Earth Engine 程式碼編輯器」頁面中重新選取相同帳戶 (確切用詞可能不同)。
我想擷取全球地圖的螢幕截圖,但不喜歡 Web Mercator 投影法。
程式碼編輯器使用的地圖投影方式為 Web Mercator (「EPSG:3857」)。它會將遠離赤道的物件放大,讓高緯度地區看起來比實際上大得多,您無法變更程式碼編輯器地圖畫布的投影方式,但可以使用 ee.Image.changeProj
方法,將圖片「繪製」至您選擇的投影方式,再繪製至 Web Mercator 畫布。如需API 參考頁面的範例,請參閱該方法的說明,瞭解如何在 Code Editor 地圖中以羅賓生投影法顯示全球 DEM。請注意,由於程式碼編輯器的檢查器和繪圖工具仍在 Web Mercator 中運作,因此此技巧應僅用於視覺化目的。
我的指令碼無法儲存 (Script error: Unknown commit
)。
如果在儲存指令碼時收到 Script error: Unknown commit
訊息,表示儲存的存放區可能未同步。導致此狀態的原因不盡相同,且難以識別。如要解決這個問題,請嘗試使用「Script」分頁右上角的按鈕,重新整理指令碼清單。如果這麼做仍無法解決問題,請嘗試透過「指令碼」分頁中的「新增」按鈕建立新的存放區,然後在該存放區中儲存指令碼 (您可能需要將指令碼從不同步的存放區移至新存放區)。