مواد عرض Earth Engine المستندة إلى ملفات GeoTiff في السحابة الإلكترونية

يتوافق Earth Engine مع مواد العرض المستندة إلى ملفات Cloud Optimized GeoTIFFs (COG). من مزايا مواد العرض المستندة إلى COG أنّ حقول البيانات الوصفية والمكانية الخاصة بالصورة ستتم فهرستها عند إنشاء مادة العرض، ما يجعل الصورة أكثر فعالية في المجموعات. يكون أداء مواد العرض التي يتم الاحتفاظ بنسخة احتياطية منها في COG مشابهًا لأداء مواد العرض التي يتم استيعابها في حالات الاستخدام النموذجية.

يُرجى العِلم أنّه يمكن أن تكون مادة العرض الواحدة مدعومة بعدة رموز COG (على سبيل المثال، يمكن أن يكون هناك رمز COG واحد لكل نطاق). ومع ذلك، لا يُسمح باستخدام العديد من مربّعات COG لنطاق واحد.

(بدلاً من ذلك، يمكن لـ Earth Engine تحميل الصور مباشرةً من ملفات COG في Google Cloud Storage (مزيد من المعلومات). ومع ذلك، فإنّ الصورة التي يتم تحميلها من خلال ee.Image.loadGeoTIFF وإضافتها إلى مجموعة صور ستتطلّب قراءة ملف GeoTiff لإجراء عمليات الفلترة على المجموعة.)

لإنشاء مادة عرض مدعومة من COG، اتّبِع الخطوات التالية:

  1. ضَع ملفات COG في حزمة GCS (راجِع الموقع الجغرافي لمعرفة المناطق المسموح بها).
  2. كتابة بيان تحميل الصور
  3. استخدِم أداة سطر الأوامر earthengine لإرسال أمر تحميل:
earthengine upload external_image --manifest my_manifest.json

نموذج لبيان صورة يتضمّن Tileset واحدًا

أبسط ImageManifest هو الذي يحتوي على Tileset واحد. في حال عدم تحديد أي نطاقات، سيحتوي عنصر العرض الناتج على جميع نطاقات GeoTIFF مع ترميز أسماء النطاقات في GeoTIFF (في هذه الحالة، "vis-red" و"vis-green" و"vis-blue").

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)

أكثر من Tileset واحد

من الممكن تحديد ImageManifest مع أكثر من Tileset، حيث يتم دعم كل نطاق من مادة العرض الناتجة بنطاق واحد من Tileset باستخدام الحقلين tilesetId وtilesetBandIndex. ويكون ذلك مفيدًا في حال كانت النطاقات المختلفة تتضمّن درجات دقة أو أنواع بيانات مختلفة. يمكن إدراج النطاقات بأي ترتيب من أي Tileset متاح. في المثال التالي:

  • يحتوي الملف "b4b3b2.tif" على مقياس 10 أمتار، بينما يحتوي الملف "b5b6b7" على مقياس 20 مترًا.
  • يكون ترتيب النطاقات في مادة العرض الناتجة مختلطًا من ملفات COG المدخلة (على سبيل المثال، يكون نطاق الإخراج 0 من Tileset 0، بينما يكون نطاق الإخراج 1 من Tileset 1).
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)

تفاصيل حول مواد العرض المستندة إلى المحتوى من إنشاء المستخدمين

الموقع الجغرافي

يجب أن يكون موقع حزمة Cloud Storage أحد المواقع التالية:

  • المنطقة المتعددة في الولايات المتحدة
  • أي منطقة مزدوجة في الولايات المتحدة تشمل US-CENTRAL1
  • المنطقة US-CENTRAL1

فئة التخزين

يجب أن تكون فئة التخزين الخاصة بالحزمة هي "التخزين العادي".

أذونات المشاركة

تتم إدارة قوائم التحكّم بالوصول الخاصة بمواد عرض Earth Engine المستندة إلى COG والبيانات الأساسية بشكل منفصل. عند مشاركة مواد عرض تستند إلى COG مع المتعاونين للقراءة، يتحمّل المالك مسؤولية التأكّد من منح إذن القراءة لكل من مادة عرض Earth Engine وملفات COG الأساسية.

1. منح أذونات قراءة حزمة Google Cloud Storage

لكي يتمكّن المتعاونون من قراءة مواد العرض المستندة إلى COG، يجب أن يكون لديهم أولاً إذن قراءة ملفات COG الأساسية في حزمة Google Cloud Storage. وبدون هذه الأذونات، لن يتمكّن Earth Engine من استرداد البيانات الخاصة بها. إذا لم تكن البيانات في Google Cloud Storage مرئية لمستخدم Earth Engine، ستعرض Earth Engine رسالة خطأ بالتنسيق "تعذّر تحميل GeoTIFF في gs://my-bucket/my-object#123456" (حيث 123456 هو جيل العنصر).

على وجه التحديد، يجب أن يحصل المتعاونون على الأذونات التالية:

  • storage.buckets.get على الحزمة (لاسترداد البيانات الوصفية للحزمة وموقعها الجغرافي، ما يتيح لـ Earth Engine تحديد مصدر مادة العرض بشكل صحيح).
  • storage.objects.get على الحزمة (لقراءة بيانات مواد العرض الفعلية التي تستخدم COG).

يتم توفير هذه الأذونات من خلال الدورَين "قارئ الحِزم القديمة في Cloud Storage" و"قارئ العناصر القديمة في Cloud Storage" على التوالي، من بين أدوار أخرى.

لمنح هذه الأدوار للمتعاونين، اتّبِع الخطوات التالية:

  1. انتقِل إلى صفحة أذونات الحزمة: https://console.cloud.google.com/storage/browser/{MY-BUCKET};tab=permissions
  2. انقر على منح الوصول.
  3. أضِف جميع الجهات الرئيسية (مثل المستخدمين والمجموعات وحسابات الخدمة) التي يجب منحها إذن الوصول للقراءة.
  4. امنح الأدوار التالية:
    • "Storage Legacy Bucket Reader" (يوفّر إذن القراءة storage.buckets.get وأذونات أخرى على مستوى الحزمة).
    • "Storage Legacy Object Reader" (يوفّر storage.objects.get)
    • (يمكنك بدلاً من ذلك إنشاء دور مخصّص جديد يتضمّن الإذنَين storage.buckets.get وstorage.objects.get فقط ومنح هذا الدور للمستخدم).
  5. حفظ

2. مشاركة مادة عرض Earth Engine للقراءة

بعد التأكّد من أنّ المتعاونين لديهم الأذونات اللازمة للوصول إلى حزمة GCS الأساسية والعناصر، يجب أيضًا مشاركة عنصر Earth Engine نفسه. لمزيد من المعلومات حول إعداد أذونات مواد عرض Earth Engine، يُرجى الرجوع إلى دليل إدارة مواد عرض Earth Engine.

طرازات

عند إنشاء مادة عرض مستندة إلى COG، يقرأ Earth Engine البيانات الوصفية لملفات TIFF المحدّدة في ملف البيان وينشئ إدخالاً في مستودع مواد العرض. يمكن أن يتضمّن كل معرّف URI مرتبط بهذا الإدخال جيلًا. راجِع مستندات تحديد إصدارات العناصر للحصول على تفاصيل حول الأجيال. في حال تحديد جيل، مثلاً gs://foo/bar#123، سيخزّن Earth Engine معرّف الموارد المنتظم هذا كما هو. في حال عدم تحديد جيل، سيخزّن Earth Engine معرّف الموارد المنتظم هذا مع جيل ملف TIFF في الوقت الذي تم فيه استدعاء ImportExternalImage.

وهذا يعني أنّه في حال تعديل أي ملف TIFF يتضمّن مصدر بيانات خارجيًا في "خدمة التخزين السحابي من Google" (وبالتالي تغيير جيله)، ستعرض Earth Engine الخطأ "تعذّر تحميل GeoTIFF في gs://my-bucket/my-object#123456" لأنّ العنصر المتوقّع لم يعُد متوفّرًا (إلا إذا كان الحِزمة تتيح إصدارات متعددة من العناصر). تم تصميم هذه السياسة للحفاظ على مزامنة البيانات الوصفية لمادة العرض مع البيانات الوصفية للكائن.

التهيئة

في ما يتعلق بطريقة إعداد COG، يجب أن يكون ملف TIFF:

  • تجانب، حيث تكون أبعاد المربّع إما:

    • ‫256x256
    • ‫512×512
    • 1024x1024
    • 2048x2048
  • يتم ترتيبها بحيث تكون جميع IFD في البداية.

للحصول على أفضل أداء:

  • استخدِم أبعاد مربّعات 512x512 أو أعلى.
  • تضمين نظرات عامة على أساس القوة 2

استنادًا إلى حالات الاستخدام المقصودة، قد يؤثّر خيار إنشاء 'INTERLEAVE' في الأداء. ننصح باستخدام BAND interleave في جميع الحالات.

يمكنك الاطّلاع على هذه الصفحة للحصول على مزيد من التفاصيل حول الإعدادات المحسّنة.

سيحوّل الأمر gdal_translate التالي صورة نقطية إلى ملف Cloud Optimized GeoTIFF مضغوط بتنسيق zstd ومقسّم إلى نطاقات، وسيعمل بشكل جيد في Earth Engine:

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

قد يكون من الممكن تقليل حجم ملف الإخراج بشكل أكبر من خلال تحديد متوقّع (-co PREDICTOR=2 لأنواع بيانات الأعداد الصحيحة و-co PREDICTOR=3 لأنواع بيانات الأعداد العشرية).

بالنسبة إلى المستخدمين الذين لديهم GDAL >= 3.11، يمكن لمشغّل COG إنشاء ملفات بدون الحاجة إلى القلق بشأن إنشاء معاينات وحفظها.

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 \

إنشاء مواد عرض مستندة إلى Cloud GeoTiff باستخدام REST API

ملاحظة: تحتوي واجهة REST API على ميزات جديدة ومتقدّمة قد لا تكون مناسبة لجميع المستخدمين. إذا كنت حديث العهد بـ Earth Engine، ننصحك بالبدء باستخدام دليل JavaScript.

لإنشاء عنصر مستند إلى COG باستخدام REST API، أرسِل طلب POST إلى نقطة نهاية ImportExternalImage Earth Engine. كما هو موضّح أدناه، يجب منح الإذن لهذا الطلب لإنشاء أصل في مجلد المستخدم.

بدء جلسة معتمَدة

لكي تتمكّن من إنشاء عنصر Earth Engine في مجلد المستخدم الخاص بك، يجب أن تكون قادرًا على إثبات هويتك عند تقديم الطلب. يمكنك استخدام بيانات الاعتماد من أداة مصادقة Earth Engine لبدء AuthorizedSession. يمكنك بعد ذلك استخدام AuthorizedSession لإرسال طلبات إلى Earth Engine.

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)
)

نص الطلب

نص الطلب هو مثال على ImageManifest. يتم في هذا القسم تحديد مسار ملف COG، بالإضافة إلى خصائص أخرى مفيدة.

يمكنك الاطّلاع على هذا الدليل لمعرفة تفاصيل حول كيفية إعداد ImageManifest. يمكن تحديد Tileset واحد أو أكثر، مع دعم كل منها لنطاق واحد أو أكثر. بالنسبة إلى ImportExternalImage، يُسمح بـ ImageSource واحد كحد أقصى لكل Tileset.

راجِع هذا المستند لمعرفة تفاصيل حول تصدير تكلفة السلع المُباعة.

إرسال الطلب

أرسِل طلب POST إلى نقطة نهاية projects.images.importExternal في Earth Engine.

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))