ক্লাউড জিওটিফ-ব্যাকড আর্থ ইঞ্জিন সম্পদ

আর্থ ইঞ্জিন ক্লাউড অপ্টিমাইজড জিওটিআইএফএফ (সিওজি) দ্বারা সমর্থিত সম্পদকে সমর্থন করে। COG-সমর্থিত সম্পদগুলির একটি সুবিধা হল যে চিত্রটির স্থানিক এবং মেটাডেটা ক্ষেত্রগুলি সম্পদ তৈরির সময় সূচিত করা হবে, যা চিত্রটিকে সংগ্রহে আরও কার্যকরী করে তুলবে৷ COG-সমর্থিত সম্পদের কর্মক্ষমতা সাধারণ ব্যবহারের ক্ষেত্রে ইনজেস্টেড সম্পদের সাথে তুলনীয়।

মনে রাখবেন যে একটি একক সম্পদ একাধিক COG দ্বারা ব্যাক করা যেতে পারে (উদাহরণস্বরূপ, প্রতি ব্যান্ডে একটি COG থাকতে পারে)। যাইহোক, একটি একক ব্যান্ডের জন্য অনেক COG টাইল ব্যবহার করা সমর্থিত নয়।

(বিকল্পভাবে, আর্থ ইঞ্জিন সরাসরি Google ক্লাউড স্টোরেজে COG থেকে ছবি লোড করতে পারে ( আরও জানুন )। যাইহোক, ee.Image.loadGeoTIFF এর মাধ্যমে লোড করা একটি চিত্র এবং একটি চিত্র সংগ্রহে যোগ করার জন্য সংগ্রহে ফিল্টারিং অপারেশনের জন্য জিওটিফ পড়ার প্রয়োজন হবে।)

একটি COG-সমর্থিত সম্পদ তৈরি করতে,

  1. আপনার COG ফাইলগুলিকে একটি GCS বালতিতে রাখুন (অনুমোদিত অঞ্চলগুলির জন্য নীচে দেখুন)।
  2. একটি ইমেজ আপলোড ম্যানিফেস্ট লিখুন
  3. আপলোড কমান্ড পাঠাতে earthengine কমান্ড-লাইন ইউটিলিটি ব্যবহার করুন:
earthengine upload external_image --manifest my_manifest.json

একটি Tileset সাথে নমুনা চিত্র প্রকাশ

সহজতম ImageManifest হল একটি একক Tileset সহ। যদি কোন ব্যান্ড নির্দিষ্ট করা না থাকে, তাহলে প্রাপ্ত সম্পদে জিওটিআইএফএফ-এ এনকোড করা ব্যান্ড নাম সহ জিওটিআইএফএফ-এর সমস্ত ব্যান্ড থাকবে (এই ক্ষেত্রে, "ভিস-লাল", "ভিস-সবুজ" এবং "ভিস-নীল")।

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

একাধিক Tileset সাথে একটি ImageManifest নির্দিষ্ট করা সম্ভব যেখানে tilesetId এবং tilesetBandIndex ক্ষেত্রগুলি ব্যবহার করে ফলাফলের প্রতিটি ব্যান্ড একটি Tileset ব্যান্ডগুলির একটি দ্বারা সমর্থিত। যখন বিভিন্ন ব্যান্ডের বিভিন্ন রেজোলিউশন বা ডেটা প্রকার থাকে তখন এটি কার্যকর। যেকোন উপলভ্য Tileset থেকে যেকোন ক্রমে ব্যান্ড তালিকাভুক্ত করা যেতে পারে। নীচের উদাহরণে:

  • "b4b3b2.tif" এর 10 m স্কেল আছে, যখন "b5b6b7" এর 20 m স্কেল আছে।
  • ফলস্বরূপ সম্পদের ব্যান্ড অর্ডার ইনপুট COGs থেকে মিশ্রিত হয় (যেমন আউটপুট ব্যান্ড 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)

COG-সমর্থিত সম্পদের বিশদ বিবরণ

অবস্থান

ক্লাউড স্টোরেজ বাকেটের অবস্থান অবশ্যই এর মধ্যে একটি হতে হবে:

  • মার্কিন বহু-অঞ্চল
  • US-CENTRAL1 অন্তর্ভুক্ত যেকোনো মার্কিন দ্বৈত-অঞ্চল
  • অঞ্চল US-সেন্ট্রাল1

স্টোরেজ ক্লাস

বালতির স্টোরেজ ক্লাস অবশ্যই "স্ট্যান্ডার্ড স্টোরেজ" হতে হবে।

ভাগ করার জন্য অনুমতি

COG-সমর্থিত আর্থ ইঞ্জিন সম্পদের ACL এবং অন্তর্নিহিত ডেটা আলাদাভাবে পরিচালিত হয়। পড়ার জন্য সহযোগীদের সাথে COG-সমর্থিত সম্পদগুলি ভাগ করার সময়, আর্থ ইঞ্জিন সম্পদ এবং অন্তর্নিহিত COG ফাইল উভয়কেই পড়ার অ্যাক্সেস দেওয়া হয়েছে তা নিশ্চিত করা মালিকের দায়িত্ব৷

1. পড়ার জন্য Google ক্লাউড স্টোরেজ বাকেট অনুমতি দিন

সহযোগীদের COG-সমর্থিত সম্পদগুলি পড়ার জন্য, তাদের অবশ্যই প্রথমে Google ক্লাউড স্টোরেজ বাকেটের অন্তর্নিহিত COG ফাইলগুলিতে পড়ার অ্যাক্সেস থাকতে হবে৷ এই অনুমতিগুলি ছাড়া, আর্থ ইঞ্জিন তাদের জন্য ডেটা পুনরুদ্ধার করতে সক্ষম হবে না। Google ক্লাউড স্টোরেজের ডেটা যদি আর্থ ইঞ্জিন ব্যবহারকারীর কাছে দৃশ্যমান না হয়, তাহলে আর্থ ইঞ্জিন " gs://my-bucket/my-object#123456 এ জিওটিআইএফএফ লোড করতে ব্যর্থ হয়েছে" ফর্মের একটি ত্রুটি ফিরিয়ে দেবে (যেখানে 123456 হল অবজেক্টের প্রজন্ম)।

বিশেষত, সহযোগীদের অবশ্যই নিম্নলিখিত অনুমতি থাকতে হবে:

  • storage.buckets.get বালতিতে যান (বালতি মেটাডেটা এবং অবস্থান পুনরুদ্ধার করতে, আর্থ ইঞ্জিনকে সম্পদের উত্স সঠিকভাবে সমাধান করতে দেয়)।
  • storage.objects.get বালতিতে (প্রকৃত COG-ব্যাকড অ্যাসেট ডেটা পড়তে)।

এই অনুমতিগুলি অন্যদের মধ্যে যথাক্রমে "স্টোরেজ লিগ্যাসি বাকেট রিডার" এবং "স্টোরেজ লিগ্যাসি অবজেক্ট রিডার" ভূমিকা দ্বারা প্রদান করা হয়৷

সহযোগীদের এই ভূমিকাগুলি অর্পণ করতে:

  1. বালতি অনুমতি পৃষ্ঠাতে যান: https://console.cloud.google.com/storage/browser/{MY-BUCKET};tab=permissions
  2. " অ্যাক্সেস মঞ্জুর করুন " এ ক্লিক করুন
  3. সমস্ত প্রধান (যেমন, ব্যবহারকারী, গোষ্ঠী, পরিষেবা অ্যাকাউন্ট) যুক্ত করুন যাদের পড়ার অ্যাক্সেস দেওয়া উচিত।
  4. নিম্নলিখিত ভূমিকা বরাদ্দ করুন:
    • "স্টোরেজ লিগ্যাসি বাকেট রিডার" ( storage.buckets.get এবং অন্যান্য বালতি-স্তরের পড়ার অনুমতি প্রদান করে)।
    • "স্টোরেজ লিগ্যাসি অবজেক্ট রিডার" ( storage.objects.get প্রদান করে)।
    • (বিকল্পভাবে, আপনি শুধুমাত্র storage.buckets.get এবং storage.objects.get পারমিশন দিয়ে একটি নতুন কাস্টম ভূমিকা তৈরি করতে পারেন এবং সেটি বরাদ্দ করতে পারেন।)
  5. সংরক্ষণ করুন

2. পড়ার জন্য আর্থ ইঞ্জিন সম্পদ শেয়ার করুন

আপনার সহযোগীদের অন্তর্নিহিত GCS বালতি এবং বস্তুর প্রয়োজনীয় অনুমতি আছে তা নিশ্চিত করার পরে, আপনাকে অবশ্যই আর্থ ইঞ্জিন সম্পদ ভাগ করতে হবে। আর্থ ইঞ্জিন সম্পদের অনুমতি সেট করার বিষয়ে আরও তথ্যের জন্য, আর্থ ইঞ্জিন সম্পদ ব্যবস্থাপনা নির্দেশিকা পড়ুন।

প্রজন্ম

যখন একটি COG-সমর্থিত সম্পদ তৈরি করা হয়, আর্থ ইঞ্জিন ম্যানিফেস্টে নির্দিষ্ট করা TIFF-এর মেটাডেটা পড়ে এবং একটি সম্পদ স্টোর এন্ট্রি তৈরি করে। সেই এন্ট্রির সাথে যুক্ত প্রতিটি URI-এর একটি প্রজন্ম থাকতে পারে। প্রজন্মের বিস্তারিত জানার জন্য অবজেক্ট ভার্সনিং ডক্স দেখুন। যদি একটি প্রজন্ম নির্দিষ্ট করা হয়, উদাহরণস্বরূপ gs://foo/bar#123 , আর্থ ইঞ্জিন সেই URI শব্দগুচ্ছ সংরক্ষণ করবে। যদি একটি জেনারেশন নির্দিষ্ট করা না থাকে, আর্থ ইঞ্জিন সেই URI-কে TIFF এর জেনারেশনের সাথে সংরক্ষণ করবে যখন ImportExternalImage কল করা হয়েছিল।

এর মানে হল যে যদি GCS-এ একটি বাহ্যিক সম্পদ সমন্বিত কোনো TIFF আপডেট করা হয় (অতএব এটির প্রজন্ম পরিবর্তন করা হয়), আর্থ ইঞ্জিন " gs://my-bucket/my-object#123456 এ জিওটিআইএফএফ লোড করতে ব্যর্থ" ত্রুটি ফিরিয়ে দেবে কারণ প্রত্যাশিত বস্তুটি আর বিদ্যমান নেই (যদি না বালতি একাধিক অবজেক্ট সংস্করণ সক্ষম করে)। এই নীতিটি সম্পদের মেটাডেটাকে বস্তুর মেটাডেটার সাথে সিঙ্কে রাখার জন্য ডিজাইন করা হয়েছে।

কনফিগারেশন

একটি COG কিভাবে কনফিগার করা উচিত তার পরিপ্রেক্ষিতে, TIFF অবশ্যই হতে হবে:

  • টাইল করা, যেখানে টাইলের মাত্রাগুলি হয়:

    • 256x256
    • 512x512
    • 1024x1024
    • 2048x2048
  • সাজানো যাতে সব IFD শুরুতে হয়।

সেরা পারফরম্যান্সের জন্য:

  • 512x512 বা উচ্চতর টাইলের মাত্রা ব্যবহার করুন।
  • 2 ওভারভিউ এর ক্ষমতা অন্তর্ভুক্ত করুন।

আপনার উদ্দেশ্যপ্রণোদিত ব্যবহারের ক্ষেত্রে নির্ভর করে, 'ইন্টারলিভ' তৈরির বিকল্পটি কর্মক্ষমতা প্রভাবিত করতে পারে। আমরা সব পরিস্থিতিতে BAND ইন্টারলিভ ব্যবহার করার পরামর্শ দিই।

একটি অপ্টিমাইজড কনফিগারেশন সম্পর্কে আরো বিস্তারিত জানার জন্য এই পৃষ্ঠাটি দেখুন।

নিম্নলিখিত gdal_translate কমান্ডটি একটি রাস্টারকে একটি ব্যান্ড-ইন্টারলিভড, zstd-কম্প্রেসড, ক্লাউড অপ্টিমাইজড জিওটিআইএফএফ-এ রূপান্তর করবে যা আর্থ ইঞ্জিনে ভাল কাজ করবে:

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 \

REST API ব্যবহার করে ক্লাউড জিওটিফ-ব্যাকড অ্যাসেট তৈরি করা

দ্রষ্টব্য: REST API-এ নতুন এবং উন্নত বৈশিষ্ট্য রয়েছে যা সমস্ত ব্যবহারকারীর জন্য উপযুক্ত নাও হতে পারে৷ আপনি যদি আর্থ ইঞ্জিনে নতুন হন, তাহলে আমরা জাভাস্ক্রিপ্ট নির্দেশিকা দিয়ে শুরু করার পরামর্শ দিই।

REST API ব্যবহার করে একটি COG-ব্যাকড সম্পদ তৈরি করতে, আর্থ ইঞ্জিন ImportExternalImage এন্ডপয়েন্টে একটি POST অনুরোধ করুন। নিম্নলিখিত হিসাবে দেখানো হয়েছে, এই অনুরোধটি আপনার ব্যবহারকারী ফোল্ডারে একটি সম্পদ তৈরি করার জন্য অনুমোদিত হতে হবে।

একটি অনুমোদিত অধিবেশন শুরু করুন

আপনার ব্যবহারকারী ফোল্ডারে একটি আর্থ ইঞ্জিন সম্পদ তৈরি করতে সক্ষম হওয়ার জন্য, আপনি যখন অনুরোধ করবেন তখন আপনাকে নিজের হিসাবে প্রমাণীকরণ করতে সক্ষম হতে হবে। আপনি একটি AuthorizedSession শুরু করতে আর্থ ইঞ্জিন প্রমাণীকরণকারী থেকে শংসাপত্র ব্যবহার করতে পারেন। তারপর আপনি আর্থ ইঞ্জিনে অনুরোধ পাঠাতে AuthorizedSession সেশন ব্যবহার করতে পারেন।

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 এর জন্য, প্রতি Tileset সর্বাধিক একটি ImageSource সমর্থিত।

COG রপ্তানি করার বিষয়ে বিস্তারিত জানার জন্য এই ডকটি দেখুন।

অনুরোধ পাঠান

Earth Engine projects.images.importExternal endpoint-এ POST অনুরোধ করুন।

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