Cloud GeoTiff Destekli Earth Engine Öğeleri

Earth Engine, Cloud Optimized GeoTIFF'ler (COG'ler) tarafından desteklenen öğeleri destekler. COG destekli öğelerin avantajlarından biri, resmin uzamsal ve meta veri alanlarının öğe oluşturulurken dizine eklenmesidir. Bu sayede resim, koleksiyonlarda daha iyi performans gösterir. COG destekli öğelerin performansı, tipik kullanım alanlarındaki beslenen öğelerin performansıyla benzerdir.

Tek bir öğenin birden fazla COG tarafından desteklenebileceğini unutmayın (ör. bant başına bir COG olabilir). Ancak tek bir bant için çok sayıda COG karosu kullanılması desteklenmez.

(Alternatif olarak Earth Engine, görüntüleri doğrudan Google Cloud Storage'daki COG'lardan da yükleyebilir (daha fazla bilgi edinin). Ancak ee.Image.loadGeoTIFF aracılığıyla yüklenen ve bir resim koleksiyonuna eklenen bir resim için koleksiyondaki filtreleme işlemlerinin yapılması amacıyla GeoTiff'in okunması gerekir.)

COG destekli bir öğe oluşturmak için:

  1. COG dosyalarınızı bir GCS paketine yerleştirin (izin verilen bölgeler için aşağıya bakın).
  2. Resim yükleme manifesti yazma
  3. Yükleme komutu göndermek için earthengine komut satırı yardımcı programını kullanın:
earthengine upload external_image --manifest my_manifest.json

Bir Tileset içeren örnek resim manifesti

En basit ImageManifest, tek bir Tileset içerendir. Hiçbir bant belirtilmezse ortaya çıkan öğe, GeoTIFF'te kodlanmış bant adlarıyla (bu durumda "vis-red", "vis-green" ve "vis-blue") GeoTIFF'in tüm bantlarını içerir.

request = {
  'imageManifest': {
    'name': f'projects/{ee_project}/assets/cogdemo1',
    'tilesets': [
      { 'id': '0', 'sources': [ { 'uris': ['gs://ee-docs-demos/COG_demo.tif'] } ] }
    ],
    'properties': {
      'version': '1.1'
    },
    'startTime': '2016-01-01T00:00:00.000000000Z',
    'endTime': '2016-12-31T15:01:23.000000000Z',
  },
}

pprint(request)

Birden fazla Tileset

tilesetId ve tilesetBandIndex alanları kullanılarak elde edilen öğenin her bandının bir Tileset bandından destekleneceği birden fazla Tileset içeren bir ImageManifest belirtmek mümkündür. Bu, farklı bantların farklı çözünürlükleri veya veri türleri olduğunda kullanışlıdır. Bantlar, mevcut Tileset'lerden herhangi birinde herhangi bir sırada listelenebilir. Aşağıdaki örnekte:

  • "b4b3b2.tif" dosyasının ölçeği 10 m, "b5b6b7" dosyasının ölçeği ise 20 m'dir.
  • Ortaya çıkan öğenin bant sırası, giriş COG'lerinden karıştırılır (ör. çıkış bandı 0, Tileset 0'dan, çıkış bandı 1 ise Tileset 1'den gelir).
request = {
  'imageManifest': {
    'name': f'projects/{ee_project}/assets/cogdemo2',
    'uriPrefix': 'gs://ee-docs-demos/external_image_demo/',
    'tilesets': [
      { 'id': '0', 'sources': [ { 'uris': ['b4b3b2.tif'] } ] },
      { 'id': '1', 'sources': [ { 'uris': ['b5b6b7.tif'] } ] },
    ],
    'bands': [
      { 'id': 'red', 'tilesetId': '0', 'tilesetBandIndex': 0 },
      { 'id': 'rededge3', 'tilesetId': '1', 'tilesetBandIndex': 2 },
      { 'id': 'rededge2', 'tilesetId': '1', 'tilesetBandIndex': 1 },
      { 'id': 'green', 'tilesetId': '0', 'tilesetBandIndex': 1 },
      { 'id': 'blue', 'tilesetId': '1', 'tilesetBandIndex': 0 },
      { 'id': 'rededge1', 'tilesetId': '0', 'tilesetBandIndex': 2 },
    ],
  },
}

pprint(request)

COG destekli öğelerle ilgili ayrıntılar

Konum

Cloud Storage paketi konumu aşağıdakilerden biri olmalıdır:

  • ABD çoklu bölgesi
  • US-CENTRAL1 içeren herhangi bir ABD çift bölgesi
  • US-CENTRAL1 bölgesi

Depolama sınıfı

Paketin depolama sınıfı "Standart depolama" olmalıdır.

Paylaşım izinleri

COG destekli Earth Engine öğelerinin ve temel verilerin ACL'leri ayrı olarak yönetilir. COG destekli öğeleri ortak çalışanlarla okumak için paylaşırken hem Earth Engine öğesine hem de temel COG dosyalarına okuma erişimi verilmesini sağlamak, öğenin sahibinin sorumluluğundadır.

1. Google Cloud Storage paketine okuma izni verme

Ortak çalışanların COG destekli öğeleri okuyabilmesi için öncelikle Google Cloud Storage paketindeki temel COG dosyalarına okuma erişimi olması gerekir. Bu izinler olmadan Earth Engine, ilgili verileri alamaz. Google Cloud Storage'daki veriler bir Earth Engine kullanıcısı tarafından görülemiyorsa Earth Engine, "gs://my-bucket/my-object#123456 adresindeki GeoTIFF yüklenemedi" biçiminde bir hata döndürür (burada 123456, nesnenin neslidir).

Özellikle, ortak çalışanların aşağıdaki izinlere sahip olması gerekir:

  • storage.buckets.get (paket meta verilerini ve konumunu almak için, Earth Engine'ın öğenin kaynağını doğru şekilde çözmesine olanak tanır).
  • storage.objects.get (COG destekli gerçek öğe verilerini okumak için).

Bu izinler, "Storage Eski Nesne Okuyucu" ve "Storage Eski Paket Okuyucu" rolleri tarafından diğerlerinin yanı sıra sağlanır.

Bu rolleri ortak çalışanlara atamak için:

  1. Paket izni sayfasına gidin: https://console.cloud.google.com/storage/browser/{MY-BUCKET};tab=permissions
  2. "ERİŞİM İZNİ VER"i tıklayın.
  3. Okuma erişimi verilmesi gereken tüm ana hesapları (ör. kullanıcılar, gruplar, hizmet hesapları) ekleyin.
  4. Aşağıdaki rolleri atayın:
    • "Storage Eski Paket Okuyucu" (storage.buckets.get ve diğer paket düzeyinde okuma izinlerini sağlar).
    • "Storage Eski Nesne Okuyucu" (storage.objects.get sağlar).
    • (Alternatif olarak, yalnızca storage.buckets.get ve storage.objects.get izinlerine sahip yeni bir özel rol oluşturabilir ve bu rolü atayabilirsiniz.)
  5. Kaydet

2. Earth Engine öğesini okumak için paylaşma

Ortak çalışanlarınızın temel GCS paketi ve nesneleri üzerinde gerekli izinlere sahip olduğundan emin olduktan sonra Earth Engine öğesini de paylaşmanız gerekir. Earth Engine öğe izinlerini ayarlama hakkında daha fazla bilgi için Earth Engine öğe yönetimi kılavuzuna bakın.

Nesiller

COG destekli bir öğe oluşturulduğunda Earth Engine, manifest dosyasında belirtilen TIFF'lerin meta verilerini okur ve bir öğe mağazası girişi oluşturur. Bu girişle ilişkili her URI'nin bir nesli olabilir. Nesil oluşturma hakkında ayrıntılı bilgi için nesne sürümlendirme belgelerine bakın. Bir nesil belirtilirse (ör. gs://foo/bar#123), Earth Engine bu URI'yi olduğu gibi depolar. Bir oluşturma belirtilmezse Earth Engine, bu URI'yi ImportExternalImage çağrıldığı sıradaki TIFF oluşturma işlemiyle birlikte depolar.

Diğer bir deyişle, GCS'de harici bir öğe içeren TIFF güncellenirse (bu nedenle nesnenin oluşturulması değişirse) Earth Engine, beklenen nesne artık mevcut olmadığı için (pakette birden fazla nesne sürümü etkinleştirilmediği sürece) "gs://my-bucket/my-object#123456 adresindeki GeoTIFF yüklenemedi" hatası döndürür. Bu politika, öğenin meta verilerini nesnenin meta verileriyle senkronize tutacak şekilde tasarlanmıştır.

Yapılandırma

Bir COG'un nasıl yapılandırılması gerektiği açısından TIFF ŞUNLARDA OLMALIDIR:

  • Karo boyutları aşağıdakilerden biri olan karo:

    • 256x256
    • 512x512
    • 1024x1024
    • 2048x2048
  • Tüm IFD'lerin başta olacak şekilde düzenlenir.

En iyi performans için:

  • 512x512 veya daha yüksek karo boyutları kullanın.
  • 2 genel bakışın gücünü ekleyin.

Amacınıza bağlı olarak, 'INTERLEAVE' oluşturma seçeneği performansı etkileyebilir. BAND kanal içi aralığını her durumda kullanmanızı öneririz.

Optimize edilmiş yapılandırma hakkında daha fazla bilgi için bu sayfaya bakın.

Aşağıdaki gdal_translate komutu, bir rasteri Earth Engine'da iyi performans gösterecek bant içi çakıştırılmış, zstd sıkıştırılmış, Cloud Optimized GeoTIFF'e dönüştürür:

gdal_translate in.tif out.tif \
  -co COPY_SRC_OVERVIEWS=YES \
  -co TILED=YES \
  -co BLOCKXSIZE=512 \
  -co BLOCKYSIZE=512 \
  -co COMPRESS=ZSTD \
  -co ZSTD_LEVEL=22 \
  -co INTERLEAVE=BAND \
  -co NUM_THREADS=ALL_CPUS

Tahmin aracı (tam sayı veri türleri için -co PREDICTOR=2 ve kayan nokta veri türleri için -co PREDICTOR=3) belirterek çıkış dosyası boyutunu daha da küçültmek mümkün olabilir.

GDAL >= 3.11 sürümüne sahip kullanıcılar, COG sürücüsü ile genel bakış oluşturma ve koruma konusunda endişelenmeden dosya oluşturabilir.

gdal_translate in.tif out.tif \
  -of COG \
  -co OVERVIEWS=IGNORE_EXISTING \
  -co COMPRESS=ZSTD \
  -co LEVEL=22 \
  -co PREDICTOR=2 \
  -co INTERLEAVE=BAND \
  -co NUM_THREADS=ALL_CPUS \

REST API'yi kullanarak Cloud GeoTiff destekli öğeler oluşturma

Not: REST API, tüm kullanıcılar için uygun olmayabilecek yeni ve gelişmiş özellikler içerir. Earth Engine'da yeniyseniz JavaScript kılavuzundan başlamanızı öneririz.

REST API'yi kullanarak COG destekli bir öğe oluşturmak için Earth Engine ImportExternalImage uç noktasına POST isteği gönderin. Aşağıda gösterildiği gibi, bu istek kullanıcı klasörünüzde öğe oluşturmak için yetkilendirilmiş olmalıdır.

Yetkili oturum başlatma

Kullanıcı klasörünüzde Earth Engine öğesi oluşturabilmek için isteği gönderirken kimliğinizi doğrulayabilmeniz gerekir. AuthorizedSession başlatmak için Earth Engine kimlik doğrulayıcısından kimlik bilgilerini kullanabilirsiniz. Ardından, Earth Engine'a istek göndermek için AuthorizedSession öğesini kullanabilirsiniz.

import ee
import json
from pprint import pprint
from google.auth.transport.requests import AuthorizedSession

ee.Authenticate()  #  or !earthengine authenticate --auth_mode=gcloud

# Specify the cloud project you want associated with Earth Engine requests.
ee_project = 'your-project'

session = AuthorizedSession(
    ee.data.get_persistent_credentials().with_quota_project(ee_project)
)

İstek içeriği

İstek metni, ImageManifest öğesinin bir örneğidir. Burada, diğer yararlı özelliklerle birlikte COG'nin yolu belirtilir.

ImageManifest'nin nasıl yapılandırılacağı hakkında ayrıntılı bilgi için bu kılavuza bakın. Her biri bir veya daha fazla bandı destekleyen bir veya daha fazla Tileset tanımlayabilirsiniz. ImportExternalImage için Tileset başına en fazla bir ImageSource desteklenir.

COG'ları dışa aktarma hakkında ayrıntılı bilgi için bu dokümana bakın.

İsteği gönderme

Earth Engine projects.images.importExternal uç noktasına POST isteği gönderin.

url = f'https://earthengine.googleapis.com/v1alpha/projects/{ee_project}/image:importExternal'

response = session.post(
  url = url,
  data = json.dumps(request)
)

pprint(json.loads(response.content))