Earth Engine, Google Cloud Storage'da (GCS) depolanan Cloud Optimized GeoTIFF'ler (COG'ler) ile desteklenen öğeleri destekler.
COG destekli bir öğeyi kaydettiğinizde Earth Engine, oluşturma sırasında görüntünün uzamsal ve meta veri alanlarını dizine ekler. Bu sayede, koleksiyonlarda kullanıldığında görüntünün performansı, standart olarak beslenen öğelerle karşılaştırılabilir düzeyde olur (Bulut için optimize edilmiş GeoTIFF (COG) genel bakış bölümüne bakın).
Ön koşullar ve Cloud Storage kurulumu
COG kaydetmeden önce Google Cloud Storage kaynaklarınızı doğru şekilde ayarlamanız gerekir.
1. Paket konumu (kesin koşul)
Earth Engine'in Cloud Storage paketinize erişebilmesi için paketin aşağıdaki veri merkezi bölgelerinden veya çoklu bölgelerden birinde bulunması gerekir:
usçoklu bölgesius-central1içeren herhangi bir ABD çift bölgesius-central1bölgesi
Paketiniz başka bir bölgesel veri merkezine (ör. us-east4
veya europe-west1) yerleştirilirse Earth Engine, kayıt ve okuma isteklerini reddeder.
2. Depolama sınıfı ve faturalandırma
- Standart depolama sınıfını kullanmanızı öneririz. Standard Storage alanında minimum depolama süresi kuralı yoktur. Bu sayede, geçici dosyaları günceller veya değiştirirseniz erken silme faturalandırma cezalarından kaçınabilirsiniz.
- Earth Engine hesaplama döngüleri, Cloud Storage veri alma ek ücretlerine tabi olmasa da standart dışı depolama katmanlarına harici araçlardan (ör. masaüstü CBS yazılımı) erişmek, yüksek veri alma ücretlerine neden olur.
- GCS'yi kullanmak için Google Cloud projenizde faturalandırmayı etkinleştirmeniz gerekir. Başlamak için Google Cloud Storage hızlı başlangıç kılavuzunu inceleyin.
1. adım: COG'lerinizi hazırlayın
TIFF dosyalarınız bulut için optimize edilmiş olmalıdır. TIFF dosyası şu özelliklere sahip olmalıdır:
- Döşeme: 256x256, 512x512, 1024x1024 veya 2048x2048 boyutlarında döşeme. En iyi performans için 512x512 veya daha yüksek bir çözünürlük öneririz.
- Tüm resim dosyası dizinleri (IFD'ler) başlangıçta olacak şekilde düzenlenir.
- 2'nin kuvvetiyle ilgili genel bakışları dahil edin.
- BAND interleave'i kullanın.
Görüntülerinizi dönüştürmek için GDAL'yi kullanabilirsiniz.
GDAL COG sürücüsünü kullanma (GDAL >= 3.1 önerilir):
gdal_translate in.tif out.tif \
-of COG \
-co BIGTIFF=YES \
-co OVERVIEWS=IGNORE_EXISTING \
-co COMPRESS=ZSTD \
-co LEVEL=16 \
-co BLOCKSIZE=512 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS \
-co PREDICTOR=2 # 2 for integers, 3 for floating point
Standart GTiff sürücüsünü kullanma:
Öncelikle, dahili 2'nin kuvveti genel bakışlar oluşturun (gdal raster overview add veya gdaladdo kullanarak), ardından resmi ve genel bakışları parçalı bir COG düzenine kopyalayın:
gdaladdo -r nearest in.tif 2 4 8 16 32 # or -r cubic for continuous/float data
gdal_translate in.tif out.tif \
-co BIGTIFF=YES \
-co COPY_SRC_OVERVIEWS=YES \
-co TILED=YES \
-co BLOCKXSIZE=512 \
-co BLOCKYSIZE=512 \
-co COMPRESS=ZSTD \
-co ZSTD_LEVEL=16 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS \
-co PREDICTOR=2 # 2 for integers, 3 for floating point
2. adım: Manifest dosyasını oluşturun
Earth Engine Python istemci kitaplığını, earthengine komut satırı aracını veya Earth Engine REST API'yi kullanarak COG kaydederken, öğe hedefi, Google Cloud Storage URI'leri ve isteğe bağlı bant meta verilerini belirten bir görüntü yükleme manifestosu tanımlamanız gerekir.
Örnek: Tüm bantları destekleyen tek COG COG'niz tüm bantları (ör. RGB) içeriyorsa manifest için yalnızca tek bir döşeme seti gerekir:
{
"name": "projects/my-project/assets/my_cog_asset",
"tilesets": [
{
"id": "default_tileset",
"sources": [
{
"uris": [
"gs://google-sample-bucket/my_optimized_image.tif"
]
}
]
}
]
}
Örnek: Birden fazla COG (bant başına bir tane) Farklı bantlar için ayrı dosyalarınız varsa (ör. ayrı dosyalarda kırmızı, yeşil, mavi):
{
"name": "projects/my-project/assets/my_multi_band_cog",
"tilesets": [
{
"id": "red_tileset",
"sources": [ { "uris": [ "gs://google-sample-bucket/band_red.tif" ] } ]
},
{
"id": "green_tileset",
"sources": [ { "uris": [ "gs://google-sample-bucket/band_green.tif" ] } ]
}
],
"bands": [
{ "id": "R", "tilesetId": "red_tileset", "tilesetBandIndex": 0 },
{ "id": "G", "tilesetId": "green_tileset", "tilesetBandIndex": 0 }
]
}
3. adım: Kayıt isteğini gönderin
Manifestinizi Earth Engine Python istemci kitaplığı, earthengine komut satırı aracı veya Earth Engine REST API'yi kullanarak Earth Engine'e gönderebilirsiniz. İş akışınıza en uygun yöntemi seçin.
Python istemci kitaplığı
Python komut dosyasında veya Jupyter not defterinde, projenizi başlattıktan sonra Earth Engine Python istemci kitaplığını (ee.data) kullanın:
import ee # 1. Authenticate and initialize ee.Authenticate() ee.Initialize(project='your-project-id') # 2. Define the manifest as a Python dictionary manifest = { "name": "projects/your-project-id/assets/my_cog_asset", "tilesets": [ { "id": "default_tileset", "sources": [ { "uris": [ "gs://google-sample-bucket/my_optimized_image.tif" ] } ] } ] } # 3. Start the ingestion task (allow_overwrite=True corresponds to --force) result = ee.data.startExternalImageIngestion(manifest, allow_overwrite=True) print(f"Asset registered: {result['name']}")
Komut satırı aracı
Terminalinizde manifestinizi manifest.json adlı bir dosyaya kaydedin ve earthengine yükleme komutunu çalıştırın:
# 1. Verify your environment is authenticated earthengine authenticate # 2. Submit the external image upload task earthengine --project your-project-id \ upload external_image \ --manifest manifest.json
REST API (Python)
İstemci kitaplığı olmadan otomatikleştirilmiş iş akışları için yetkili bir POST isteğini doğrudan Earth Engine REST API uç noktasına
projects.image.importExternal gönderin (burada Python kullanılarak gösterilmiştir):
import json from pprint import pprint import ee from google.auth.transport.requests import AuthorizedSession # 1. Authenticate and start an authorized HTTP session ee.Authenticate() ee_project = 'your-project-id' session = AuthorizedSession( ee.data.get_persistent_credentials().with_quota_project(ee_project) ) # 2. Define the REST request body wrapping the manifest request = { 'imageManifest': { 'name': f'projects/{ee_project}/assets/my_cog_asset', 'tilesets': [ { 'id': 'default_tileset', 'sources': [ { 'uris': [ 'gs://google-sample-bucket/my_optimized_image.tif' ] } ] } ] } } # 3. Send the POST request url = ( 'https://earthengine.googleapis.com/v1alpha/' f'projects/{ee_project}/image:importExternal' ) response = session.post(url=url, data=json.dumps(request)) pprint(json.loads(response.content))
Kayıt isteği gönderildikten sonra basit bir meta veri dizine ekleme işlemi başlatılır. COG kaydı piksel verilerini kopyalamadığından bu işlem genellikle saniyeler içinde tamamlanır.
COG öğeleriyle ilgili manifest kısıtlamaları
COG destekli öğeler için manifest oluştururken aşağıdaki katı kısıtlamalara dikkat edin (Bunlar standart besleme manifestlerinden farklıdır.):
- Tek paket: Manifestteki tüm URI'ler aynı GCS paketinde bulunmalıdır.
- Kaynak başına bir URI: Her
ImageSourcetam olarak bir URI içermelidir. Birden fazla dosyayı tek bir karo grubu kaynağında birleştiremezsiniz. Birden fazla COG sahnesini mozaiklemek için her bir COG'yi öğe olarak kaydedin ve.mosaic()kullanarak bunları biree.ImageCollectioniçinde birleştirin. - Hayır
mask_bands: Üst düzeymask_bandsdesteklenmez. Manifest dosyasındamissingDatakullanın veya TIFF'inizin dahili bir nodata değeri olduğundan emin olun. - Karo grubunda
data_typeyok:tilesetsbölümündedata_typebelirtmeyin. Bu, otomatik olarak algılanır. - Kaynakta
dimensionsyok:ImageSourceiçindedimensionsbelirtmeyin. - Hayır
subdataset_prefix/subdataset_suffix. - Hayır
min_tile_area_ratioveyaskip_metadata_read.
4. adım: İzinleri yapılandırın (paylaşım için çok önemlidir)
Standart Earth Engine öğelerinin aksine, COG'un piksel verileri GCS'de kalır. COG destekli bir öğeyi başkalarıyla paylaşırken hem Earth Engine öğesine hem de GCS dosyalarına okuma erişimi vermeniz gerekir.
1. GCS paketi izinleri verme
Ortak çalışanların GCS'deki dosyaları okumak için izinlere ihtiyacı vardır.
Gerekli izinler:
storage.buckets.get(Paket meta verilerini ve konumunu almak için)storage.objects.get(piksel verilerini okumak için)
Bu izinleri aşağıdaki standart Cloud Storage rollerini kullanarak verebilirsiniz:
- Storage Bucket Viewer (paket meta verilerini ve konumunu okumak için
storage.buckets.getsağlar) - Storage Object Viewer (piksel verilerini okumak için
storage.objects.getsağlar)
Google Cloud Console'da yapılandırma adımları:
- Cloud Storage Tarayıcısı'na gidin.
- Paketinizin adını tıklayın.
- İzinler sekmesini seçin.
- ERİŞİM İZNİ VER'i tıklayın.
- Ortak çalışanlarınızın e-posta adreslerini (veya bir Google Grubu'nu ya da herkese açık erişim için
allUsers) ekleyin. - Storage Bucket Viewer (Depolama Paketi Görüntüleyici) ve Storage Object Viewer (Depolama Alanı Nesne Görüntüleyici) rollerini atayın.
- Kaydet'i tıklayın.
2. Earth Engine öğesini paylaşma
Earth Engine Asset Manager veya KSA'yı kullanarak öğenin kendisini paylaşın. Ayrıntılar için Öğe Yönetimi Kılavuzu'na bakın.
Nesne oluşturma işlemlerini yönetme
COG kaydettiğinizde Earth Engine, GCS nesnesinin belirli neslini (sürüm) depolar. Dosyayı GCS'de güncellerseniz nesil bilgisi değişir.
- Varsayılan olarak Earth Engine, öğeyi yükleyemez ve bir hata döndürür:
Failed to load the GeoTIFF at gs://google-sample-bucket/my-object#old-generation. - Bu, meta verilerin (projeksiyon veya ayak izi gibi) temel piksellerle senkronizasyonunun bozulmasını önlemek için tasarlanmıştır.
En iyi uygulama: Temel görüntü verilerini güncellemeniz gerekiyorsa dosyaların üzerine yazmak yerine yeni bir öğe olarak kaydedin veya yükleme komutunu
--forceişaretiyle yeniden çalıştırın:earthengine --project your-project-id upload external_image --force --manifest manifest.json
Kayıtlı öğeleri kullanma
Kayıtlı bir COG destekli öğeye, Earth Engine komut dosyalarında standart olarak alınan herhangi bir resim öğesi gibi erişilir:
JavaScript
var image = ee.Image('projects/your-project-id/assets/my_cog_asset');
Python
image = ee.Image('projects/your-project-id/assets/my_cog_asset')