Earth Engine REST API ile görüntü hesaplamaları

Not: REST API, tüm kullanıcılar için uygun olmayabilecek yeni ve gelişmiş özellikler içerir. Earth Engine'i ilk kez kullanıyorsanız lütfen JavaScript kılavuzu ile başlayın.

Earth Engine REST API hızlı başlangıç kılavuzunda, Earth Engine öğesindeki piksel bloklarına nasıl erişileceği gösterilmektedir. Sonucu almadan önce piksellere bir hesaplama uygulamak istediğinizi varsayalım. Bu kılavuzda, istemci kitaplıklarından biriyle bir hesaplamanın prototipinin nasıl oluşturulacağı, hesaplama grafiğinin nasıl serileştirileceği ve hesaplanan sonucu almak için REST API'nin nasıl kullanılacağı gösterilmektedir. REST API üzerinden işlem isteğinde bulunmak, işlem uç noktalarından birine (örneğin, computePixels, computeFeatures veya genel value.compute) POST isteğinde bulunmaya karşılık gelir. Bu örnekte, özellikle küçük bir bölgedeki Sentinel-2 görüntülerinin medyan bileşiğinin nasıl elde edileceği gösterilmektedir.

Başlamadan önce

Aşağıdaki işlemleri yapmak için bu talimatları uygulayın:

  1. Earth Engine'e başvurma
  2. Google Cloud projesi oluşturma
  3. Projede Earth Engine API'yi etkinleştirin.
  4. Hizmet hesabı oluşturma
  5. Hizmet hesabına, Earth Engine hesaplamaları yapması için proje düzeyinde izin verme

Not: Bu eğitimi tamamlamak için Earth Engine erişimi için kayıtlı bir hizmet hesabınızın olması gerekir. Devam etmeden önce hizmet hesabı kaydetmek için bu talimatlara bakın.

Google Cloud'da kimlik doğrulama

İlk olarak, Google Cloud'a kimliği doğrulanmış istekler gönderebilmek için oturum açmanız gerekir. Projeyi aynı anda ayarlarsınız. Oturum açma işlemini tamamlamak için çıkıştaki talimatları uygulayın.

# INSERT YOUR PROJECT HERE
PROJECT = 'your-project'

!gcloud auth login --project {PROJECT}

Hizmet hesabınız için özel anahtar dosyası edinme

Earth Engine'i kullanmak için kayıtlı bir hizmet hesabınız olmalıdır. Yoksa bu talimatları uygulayarak edinebilirsiniz. Hizmet hesabınızın e-posta adresini aşağıdaki hücreye kopyalayın. (Earth Engine'i kullanmak için hizmet hesabının önceden kaydedilmiş olması gerekir.) Aşağıdaki hücrede, hizmet hesabı için bir anahtar dosyası oluşturmak üzere gsutil komut satırı kullanılır. Anahtar dosyası, not defteri sanal makinesinde oluşturulur.

# INSERT YOUR SERVICE ACCOUNT HERE
SERVICE_ACCOUNT='your-service-account@your-project.iam.gserviceaccount.com'
KEY = 'key.json'

!gcloud iam service-accounts keys create {KEY} --iam-account {SERVICE_ACCOUNT}

AuthorizedSession başlatın ve kimlik bilgilerinizi test edin

Kimlik bilgilerini almak için özel anahtarı kullanarak özel anahtarı test edin. HTTP istekleri göndermek için yetkili bir oturum oluşturmak üzere kimlik bilgilerini kullanın. Kimlik bilgilerinin çalışıp çalışmadığını kontrol etmek için oturum üzerinden GET istekte bulunun.

from google.auth.transport.requests import AuthorizedSession
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file(KEY)
scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/cloud-platform'])

session = AuthorizedSession(scoped_credentials)

url = 'https://earthengine.googleapis.com/v1beta/projects/earthengine-public/assets/LANDSAT'

response = session.get(url)

from pprint import pprint
import json
pprint(json.loads(response.content))

Hesaplamayı serileştirme

Bir şeyi hesaplama isteği gönderebilmeniz için hesaplamanın Earth Engine ifade grafiği biçimine dönüştürülmesi gerekir. Aşağıda, ifade grafiğinin nasıl elde edileceği gösterilmektedir.

Earth Engine'de kimlik doğrulama

Hizmet hesabından Earth Engine kapsamlı kimlik bilgileri alın. Bunları kullanarak Earth Engine'i başlatın.

import ee

# Get some new credentials since the other ones are cloud scope.
ee_creds = ee.ServiceAccountCredentials(SERVICE_ACCOUNT, KEY)
ee.Initialize(ee_creds)

Hesaplama tanımlama

İstemci API'si ile basit bir hesaplama prototipi oluşturun. Hesaplamanın sonucunun Image olduğunu unutmayın.

coords = [
  -121.58626826832939,
  38.059141484827485,
]
region = ee.Geometry.Point(coords)

collection = ee.ImageCollection('COPERNICUS/S2')
collection = collection.filterBounds(region)
collection = collection.filterDate('2020-04-01', '2020-09-01')
image = collection.median()

İfade grafiğini serileştirme

Bu işlem, Earth Engine ifade grafiğini (özellikle bir Expression) temsil eden bir nesne oluşturur. Genellikle bunları istemci API'lerinden biriyle oluşturmanız gerekir.

serialized = ee.serializer.encode(image)

İstenen ölçekte (Sentinel-2 için 10 metre) istenen projeksiyonu (WGS84) oluşturun. Bu yalnızca projeksiyon birimleri olan derece cinsinden istenen ölçeği bulmak içindir. Bu ölçekler, istekteki afin dönüşümünü belirtmek için kullanılır.

# Make a projection to discover the scale in degrees.
proj = ee.Projection('EPSG:4326').atScale(10).getInfo()

# Get scales out of the transform.
scale_x = proj['transform'][0]
scale_y = -proj['transform'][4]

İsteği gönderin

computePixels uç noktasına bir POST isteği gönderin. İsteğin, serileştirilmiş hesaplama olan Expression içerdiğini unutmayın. Ayrıca PixelGrid de içerir. PixelGrid, istenen çıkış için dimensions ve istenen koordinat sisteminin birimlerinde bir AffineTransform içerir. Burada koordinat sistemi coğrafi olduğundan dönüşüm, derece cinsinden ölçekle ve istenen görüntü yamasının sol üst köşesinin coğrafi koordinatlarıyla belirtilir.

import json

url = 'https://earthengine.googleapis.com/v1beta/projects/{}/image:computePixels'
url = url.format(PROJECT)

response = session.post(
  url=url,
  data=json.dumps({
    'expression': serialized,
    'fileFormat': 'PNG',
    'bandIds': ['B4','B3','B2'],
    'grid': {
      'dimensions': {
        'width': 640,
        'height': 640
      },
      'affineTransform': {
        'scaleX': scale_x,
        'shearX': 0,
        'translateX': coords[0],
        'shearY': 0,
        'scaleY': scale_y,
        'translateY': coords[1]
      },
      'crsCode': 'EPSG:4326',
    },
    'visualizationOptions': {'ranges': [{'min': 0, 'max': 3000}]},
  })
)

image_content = response.content

Bu kodu bir not defterinde çalıştırıyorsanız sonuçları IPython resim görüntüleme widget'ını kullanarak gösterebilirsiniz.

# Import the Image function from the IPython.display module.
from IPython.display import Image
Image(image_content)