تحميل بيان الصور

إذا كنت بحاجة إلى مرونة أكبر في تحميل الصور إلى Google Earth Engine (EE) مقارنةً بما توفّره واجهة مستخدم أداة تعديل الرموز أو الأمر upload في أداة سطر الأوامر "earthengine"، يمكنك إجراء ذلك من خلال وصف عملية تحميل الصور باستخدام ملف JSON يُعرف باسم "البيان" واستخدام الأمر upload image --manifest في أداة سطر الأوامر.

يمكنك الاطّلاع على مثال كامل في ورقة ملاحظات Colab هذه التي توضّح كيفية تحميل مربّعات الصور كمادة عرض واحدة باستخدام بيان.

إعداد لمرة واحدة

  1. لا تعمل عمليات تحميل ملفات البيان إلا مع الملفات المتوفّرة في Google Cloud Storage. لبدء استخدام Google Cloud Storage، أنشئ مشروعًا على Google Cloud، إذا لم يكن لديك مشروع حاليًا. يُرجى العِلم أنّ عملية الإعداد تتطلّب تحديد بطاقة ائتمان للفوترة. لا تفرض أداة EE نفسها أي رسوم على أي مستخدم في الوقت الحالي، ولكن نقل الملفات إلى Google Cloud Storage قبل تحميلها إلى EE سيتطلب تكلفة بسيطة. بالنسبة إلى أحجام بيانات التحميل العادية (عشرات أو مئات الغيغابايت)، ستكون التكلفة منخفضة جدًا.
  2. ضمن مشروعك، فعِّل Cloud Storage API و أنشئ حزمة.
  3. ثبِّت عميل Python في Earth Engine. وتتضمّن أداة سطر الأوامر earthengine التي سنستخدمها لتحميل البيانات.
  4. لعمليات التحميل المبرمَجة، يمكنك استخدام حساب خدمة Google Cloud مرتبط بمشروعك. لا تحتاج إلى حساب خدمة لإجراء الاختبار، ولكن عندما يكون لديك وقت، يُرجى البدء في التعرف على كيفية استخدامها.

قد يتم تحميل ملفات المصدر الكبيرة جدًا (100 غيغابايت أو أكثر) بشكل أسرع إذا تم تقسيمها إلى عدة مربّعات.

أرقام تعريف مواد العرض وأسماؤها

بالنسبة إلى مواد العرض المملوكة لمشروع على السحابة الإلكترونية، استخدِم هذه الصيغة لأسماء مواد العرض: projects/some-project-id/assets/some-asset-id.

التعرّف على أسماء مواد العرض للمشاريع القديمة ومواد العرض التي يملكها المستخدم

بالنسبة إلى المشاريع القديمة، يجب أن يكون اسم مادة العرض في البيان مختلفًا قليلاً عن رقم تعريف مادة العرض الظاهر في مكان آخر في Earth Engine. لتحميل مواد عرض تبدأ أرقام تعريفها بـ users/some_user أو projects/some_project، يجب أن يتضمّن اسم مادة العرض في البيان السلسلة projects/earthengine-legacy/assets/ قبل رقم تعريف مادة العرض. على سبيل المثال، يجب تحميل مادة عرض Earth Engine التي تحمل رقم تعريف مادة العرض users/username/my_geotiff باستخدام الاسم projects/earthengine-legacy/assets/users/username/my_geotiff.

نعم، هذا يعني أنّ المعرّفات مثل projects/some_projects/some_asset يتم تحويلها إلى أسماء يتم فيها ذكر projects مرتين: projects/earthengine-legacy/assets/projects/some_projects/some_asset. قد يكون هذا مربكًا، ولكنه ضروري للامتثال لمعايير Google Cloud API.

استخدام ملفات البيان

يتم عرض ملف بيان أساسي في مجموعة الرموز التالية. يتم تحميل ملف باسم small.tif من حزمة Google Cloud Storage باسم gs://earthengine-test.

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://earthengine-test/small.tif"
          ]
        }
      ]
    }
  ]
}

لاستخدامه، احفظه في ملف باسم manifest.json وشغِّل:

earthengine upload image --manifest /path/to/manifest.json

(الملف gs://earthengine-test/small.tif متوفّر ويمكن قراءته بشكل علني، ويمكنك استخدامه للاختبار).

مجموعات المربّعات

إنّ بنية البيان المعقّدة بعض الشيء في JSON ضرورية لتوفير مرونة كافية لمواجهة تحدٍّ شائع في التحميل، وهو كيفية وصف جميع الطرق الممكنة لدمج وحدات البكسل من ملفات مصدر متعددة في مادة عرض واحدة. على وجه التحديد، هناك طريقتان مستقلتان لتجميع الملفات معًا:

  • الفسيفساء في بعض الأحيان، تمثل ملفات متعددة بلاطات متعددة (على سبيل المثال، كل بلاطة عبارة عن مربع 1x1 درجة). يجب دمج هذه الملفات معًا في النطاق نفسه في مادة عرض على Earth Engine.
  • أساور منفصلة في بعض الأحيان، تمثّل الملفات المتعددة نطاقات متعددة. يجب تجميع هذه الملفات معًا كحزم في مادة عرض في Earth Engine.

(قد يلزم استخدام كلتا الطريقتين في الوقت نفسه، ولكن هذا نادر الحدوث).

لوصف هذه الخيارات، تقدّم ملفات البيان مفهوم مجموعة المربّعات. تتوافق مجموعة مربّعات واحدة مع مصدر GDAL واحد. لهذا السبب، يجب أن يكون لجميع المصادر في مجموعة مربّعات واحدة بنية GDAL نفسها (عدد النطاقات ونوعها، والإسقاط، والتحويل، والقيمة المفقودة). بما أنّ مصدر GDAL يمكن أن يتضمّن نطاقات متعددة، قد تحتوي مجموعة مربّعات واحدة على بيانات لنطاقات متعددة في Earth Engine.

بالنسبة إلى استيعاب الفسيفساء، سيظهر البيان على النحو التالي:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/N30W22.tif"
          ]
        },
        {
          "uris": [
            "gs://bucket/N31W22.tif"
          ]
        }
      ]
    }
  ]
}

بالنسبة إلى النطاقات المنفصلة، سيظهر ملف البيان على النحو التالي (عليك أيضًا إضافة قسم bands كما هو موضّح أدناه):

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "bands": ...,
  "tilesets": [
    {
      "id": "tileset_for_band1",
      "sources": [
        {
          "uris": [
            "gs://bucket/band1.tif"
          ]
        }
      ]
    },
    {
      "id": "tileset_for_band2",
      "sources": [
        {
          "uris": [
            "gs://bucket/band2.tif"
          ]
        }
      ]
    }
  ]
}

يُرجى العِلم أنّه في حال استخدام نطاقات منفصلة، يجب منح كل مجموعة مربّعات معرّفًا مختلفًا لمزيد من الوضوح. يمكن أن يكون معرّف مجموعة المربّعات سلسلة عشوائية، ولا يتم الاحتفاظ بهذه السلاسل في مادة العرض التي تم تحميلها. لا تُستخدَم معرّفات مجموعات المربّعات إلا في عملية نقل البيانات لتمييز مجموعات المربّعات المكدّسة عن بعضها.

النطاقات

المفهوم الثاني المهم هو مطابقة الملفات المصدر مع نطاقات مواد العرض في EE. ويتم ذلك باستخدام قسم bands في البيان.

يمكن حذف القسم bands، وفي هذه الحالة يتم إنشاء النطاقات أولاً من الملفات في مجموعة المربّعات الأولى، ثم من مجموعة المربّعات التالية، وهكذا. تتم تسمية النطاقات تلقائيًا باسم "b1" و"b2" وما إلى ذلك. لتجاوز أسماء النطاقات التلقائية، يجب تضمين قسم "bands" في النهاية، على النحو التالي:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/rgb.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "R",
      "tilesetBandIndex": 0
    },
    {
      "id": "G",
      "tilesetBandIndex": 1
    },
    {
      "id": "B",
      "tilesetBandIndex": 2
    }
  ]
}

يجب أن يكون عدد نطاقات EE مساويًا لإجمالي عدد النطاقات في جميع مجموعات المربّعات.

إذا كنت لا تريد نقل جميع النطاقات من ملف، يمكنك استخدام الحقل tilesetBandIndex للإشارة إلى نطاقات GDAL التي يجب نقلها. يحتوي النطاق الأول على tilesetBandIndex بقيمة 0.

مثال:

لنفترض أنّ الملف المصدر يحتوي على أربعة نطاقات: "tmin" و"tmin_error" و"tmax" و"tmax_error". نريد فقط استيعاب "tmin" و "tmax". ستبدو أقسام البيان ذات الصلة على النحو التالي:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "temperature",
      "sources": [
        {
          "uris": [
            "gs://bucket/temperature.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "tmin",
      "tilesetBandIndex": 0,
      "tilesetId": "temperature"
    },
    {
      "id": "tmax",
      "tilesetBandIndex": 2,
      "tilesetId": "temperature"
    }
  ]
}

أربطة الأقنعة

يتم التحكّم في حجب النطاق من خلال مكوّن maskBands في البيان. تتوفّر ثلاثة إعدادات ممكنة للقناع (ولكن يُفترض دائمًا أنّ نطاق القناع هو النطاق الأخير في ملف معيّن).

  1. قناع لجميع نطاقات البيانات في الملف نفسه
  2. قناع لجميع نطاقات البيانات الواردة من جميع الملفات الأخرى
  3. قناع لبعض نطاقات البيانات

1. الحالة الأكثر شيوعًا هي ملف GeoTIFF واحد يتم استخدام نطاقه الأخير كقناع للنطاقات الأخرى. لا يعمل هذا إلا مع ملفات GeoTIFF من النوع Byte. استخدِم ملف البيان التالي:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "data_tileset"
    }
  ]
}

2. لاستخدام ملف GeoTIFF كقناع لجميع النطاقات في ملف GeoTIFF آخر، استخدِم البيان التالي:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    },
    {
      "id": "mask_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/mask_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "mask_tileset"
    }
  ]
}

3- لاستخدام GeoTIFF كقناع لنطاق معيّن في ملف آخر، استخدِم البيان التالي (الفرق بينه وبين الحالة السابقة هو أنّه تم ضبط الحقل bandIds في maskBands):

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    },
    {
      "id": "mask_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/mask_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "mask_tileset",
      "bandIds": ["data_band"]
    }
  ]
}

في المثال الأخير، نعمل على نطاقَين من مجموعة مربعات data_tileset، ولكننا نطبّق قناعًا على نطاق واحد فقط (data_band)، كما هو محدّد في حقل bandIds لعنصر قائمة maskBands الوحيد المقدَّم.

يُرجى العِلم أنّه يتم استخدام النطاق الأخير فقط من مجموعة المربّعات المذكورة في maskBands كنطاق قناع.

سياسة التسويق الهرمي

عندما ينشئ Earth Engine أهرامات الصور أثناء نقل البيانات، عليه تقليل شبكات البكسل بحجم 2×2 بشكل متكرر إلى بكسل واحد، وتحويل قيمة البكسل بطريقة ما. يتم تلقائيًا حساب متوسّط قيم وحدات البكسل، وهو الإجراء المناسب في معظم الحالات عندما يمثّل نطاق البيانات النقطية بيانات مستمرة إلى حدّ ما. ومع ذلك، هناك حالتان يؤدي فيهما الاعتماد على الإعداد التلقائي إلى نتائج غير صحيحة، وفي هذه الحالة يجب ضبط الحقل pyramidingPolicy في تعريف النطاق (إذا لم يتم ضبطه، يتم افتراض أنّ قيمته هي "MEAN" تلقائيًا).

لتصنيف الصور النقطية (لتصنيف الغطاء الأرضي، على سبيل المثال)، فإن الطريقة الأكثر منطقية لتقسيم وحدات البكسل هي أخذ غالبية القيم الأربع لإنتاج القيمة التالية. يتم ذلك باستخدام سياسة التجميع الهرمي "MODE":

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/landcover.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "landcover",
      "pyramidingPolicy": "MODE"
    }
  ]
}

بالنسبة إلى نطاقات البيانات النقطية التي لا يكون فيها "MEAN" أو "MODE" منطقيًا (على سبيل المثال، وحدات البكسل المجمّعة)، يجب استخدام سياسة الهرم "SAMPLE". يأخذ "SAMPLE" دائمًا قيمة البكسل في أعلى يمين كل شبكة 2x2. يحدّد المثال التالي سياسة الهرمية "MEAN" لنطاق يمثّل متغيّرًا مستمرًا ("NDVI") و"SAMPLE" لنطاق "QA" الخاص بالبيانات.

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/ndvi.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "NDVI",
      "tilesetBandIndex": 0,
      "pyramidingPolicy": "MEAN"
    },
    {
      "id": "QA",
      "tilesetBandIndex": 1,
      "pyramidingPolicy": "SAMPLE"
    }
  ]
}

وقت البدء والانتهاء

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

يشير وقت البدء ووقت الانتهاء عادةً إلى وقت الملاحظة، وليس إلى وقت إنشاء الملف المصدر.

يتم التعامل مع وقت الانتهاء كحدّ حصري للتبسيط. على سبيل المثال، بالنسبة إلى مواد العرض التي تمتد ليوم واحد بالضبط، استخدِم منتصف الليل ليومين متتاليين (على سبيل المثال، ‎1980-01-31T00:00:00 و‎1980-02-01T00:00:00) لوقتَي البدء والانتهاء. إذا لم تكن مادة العرض تتضمّن مدة، اضبط وقت الانتهاء ليكون مماثلاً لوقت البدء. يجب تمثيل الأوقات في ملفات البيان كسلاسل ISO 8601. ننصحك بافتراض أنّ وقت الانتهاء حصري (على سبيل المثال، منتصف ليل اليوم التالي لمواد العرض اليومية) لتبسيط قيم التاريخ.

مثال:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/img_20190612.tif"
          ]
        }
      ]
    }
  ],
  "startTime": "1980-01-31T00:00:00Z",
  "endTime": "1980-02-01T00:00:00Z"
}

مرجع بنية البيان

تتضمّن بنية JSON التالية جميع حقول بيان تحميل الصور المحتملة. يمكنك العثور على تعريفات الحقول في قسم تعريفات حقول البيان التالي.

{
  "name": <string>,
  "tilesets": [
    {
      "dataType": <string>,
      "id": <string>,
      "crs": <string>,
      "sources": [
        {
          "uris": [
            <stringn>>
          ],
          "affineTransform": {
            "scaleX": <double>,
            "shearX": <double>,
            "translateX": <double>,
            "shearY": <double>,
            "scaleY": <double>,
            "translateY": <double>
          }
        }
      ]
    }
  ],
  "bands": [
    {
      "id": <string>,
      "tilesetId": <string>,
      "tilesetBandIndex": <int32>,
      "missingData": {
        "values": [<doublen>>]
      },
      "pyramindingPolicy": <string>
    }
  ],
  "maskBands": [
    {
      "tilesetId": <string>,
      "bandIds": [
        <stringn>>
      ]
    }
  ],
  "footprint": {
    "points": [
      {
        "x": <double>,
        "y": <doublen>>
      }
    ],
    "bandId": <string>
  },
  "missingData": {
     "values": [<double>]
  },
  "pyramidingPolicy": <string>,
  "uriPrefix": <string>,
  "startTime": {
    "seconds": <integer>
  },
  "endTime": {
    "seconds": <integer>
  },
  "properties": {
    <unspecified>
  }
}

تعريفات حقول البيان

الاسم

string

اسم مادة العرض المطلوب إنشاؤها ‫name هو بالتنسيق "projects/*/assets/**" (على سبيل المثال، "projects/earthengine-legacy/assets/users/USER/ASSET").

مجموعات المربّعات

list

قائمة بالقواميس التي تحدّد خصائص مجموعات المربّعات يُرجى الاطّلاع على حقول عناصر قاموس tilesets التالية للحصول على مزيد من المعلومات.

tilesets[i].dataType

string

تحدّد نوع البيانات الرقمية. النوع التلقائي هو النوع الذي تبلّغ عنه مكتبة GDAL، وفي هذه الحالة لا حاجة إلى تحديده.

نوع البيانات القيمة
غير محدّد "DATA_TYPE_UNSPECIFIED"
عدد صحيح موقَّع من 8 بت "INT8"
عدد صحيح غير موقَّع من 8 بت "UINT8"
عدد صحيح موقَّع من 16 بت "INT16"
عدد صحيح غير موقَّع من 16 بت "UINT16"
عدد صحيح موقَّع 32 بت "INT32"
عدد صحيح غير موقَّع 32 بت "UINT32"
‫32 بت بنقطة عائمة "FLOAT32"
عدد عشري 64 بت "FLOAT64"

tilesets[i].id

string

رقم تعريف مجموعة المربّعات يجب أن يكون فريدًا بين مجموعات المربّعات المحدّدة في بيان مواد العرض. يتم تجاهل هذا المعرّف أثناء خطوة المعالجة، ويُستخدم فقط لربط مجموعة مربعات بنطاق. السلسلة الفارغة هي معرّف صالح.

tilesets[i].crs

string

يشير هذا الحقل إلى نظام الإحداثيات المرجعي لشبكة وحدات البكسل، ويتم تحديده كرمز عادي حيثما أمكن (على سبيل المثال، رمز EPSG)، وبتنسيق WKT في الحالات الأخرى.

tilesets[i].sources

list

قائمة بالقواميس التي تحدّد خصائص ملف صورة وملفاته المصاحبة يُرجى الاطّلاع على حقول عناصر قاموس sources التالية للحصول على مزيد من المعلومات.

tilesets[i].sources[j].uris

list

قائمة بمعرّفات الموارد المنتظمة (URI) للبيانات المطلوب نقلها يُسمح فقط بمعرّفات الموارد المنتظمة (URI) لخدمة Google Cloud Storage. يجب تحديد كل معرّف موارد منتظم (URI) بالتنسيق التالي: gs://bucket-id/object-id. يجب أن يكون العنصر الأساسي هو العنصر الأول في القائمة، وأن يتم إدراج الصور المصاحبة بعده. تتم إضافة بادئة ImageManifest.uriPrefix إلى كل معرّف موارد منتظم (URI) في حال ضبطها.

tilesets[i].sources[j].affineTransform

dictionary

تحويل تآلفي اختياري يجب تحديد هذه السمة فقط إذا كانت البيانات من uris (بما في ذلك أي ملفات مصاحبة) غير كافية لوضع وحدات البكسل. يتم توفيرها كقاموس يتضمّن المفاتيح التالية: "scaleX" و"shearX" و"translateX" و"shearY" و"scaleY" و"translateY". لمزيد من المعلومات، يُرجى الاطّلاع على هذا المرجع.

أمثلة على المفاتيح والقيم:

{
  "scaleX": 0.1,
  "shearX": 0.0,
  "translateX": -180.0,
  "shearY": 0.0,
  "scaleY": -0.1,
  "translateY": 90.0
}

فرق موسيقية

list

قائمة بالقواميس التي تحدّد خصائص نطاق واحد مصدره مجموعة مربّعات يُرجى العِلم أنّ ترتيب النطاقات في مادة العرض هو نفسه ترتيب bands. راجِع حقول عناصر قاموس bands التالية لمزيد من المعلومات.

bands[i].id

string

رقم تعريف (اسم) النطاق

bands[i].tilesetId

string

رقم تعريف مجموعة المربّعات المقابلة للنطاق

bands[i].tilesetBandIndex

int32

فهرس النطاق الذي يبدأ من الصفر من مجموعة المربّعات المقابلة للنطاق.

bands[i].missingData.values

list

قائمة بالقيم (من النوع المزدوج) التي لا تمثّل أي بيانات في النطاق

bands[i].pyramidingPolicy

string

سياسة التراكم يمكنك الاطّلاع على هذا الرابط لمزيد من المعلومات. تتضمن الخيارات:

  • ‫"MEAN" (تلقائي)
  • "MODE"
  • "SAMPLE"

maskBands

list

قائمة بالقواميس التي تحدّد خصائص نطاق قناع واحد مصدره مجموعة مربّعات يمكن توفير شريط قناع واحد على الأكثر. راجِع حقول عناصر قاموس maskBands التالية لمزيد من المعلومات.

maskBands[i].tilesetId

string

رقم تعريف مجموعة المربّعات المقابلة لنطاق القناع يتم دائمًا استخدام النطاق الأخير من مجموعة المربّعات كنطاق قناع.

maskBands[i].bandIds

list of strings

قائمة بأرقام تعريف النطاقات التي ينطبق عليها نطاق القناع وفي حال تركها فارغة، يتم تطبيق نطاق القناع على جميع النطاقات في مادة العرض. يمكن أن يحتوي كل نطاق على نطاق قناع واحد مطابق فقط.

بصمة قدم

dictionary

قاموس يحدّد خصائص البصمة لجميع وحدات البكسل الصالحة في الصورة. إذا كان الحقل فارغًا، تكون البصمة التلقائية هي الصورة بأكملها. لمزيد من المعلومات، يُرجى الاطّلاع على حقول عناصر قاموس footprint التالية.

footprint.points

list

قائمة بالنقاط التي تحدّد مساحة جميع وحدات البكسل الصالحة في الصورة يتم تحديد النقطة من خلال قاموس يتضمّن مفتاحَي "x" و "y" بقيم عائمة. يجب أن تصف قائمة النقاط حلقة تشكّل الجزء الخارجي من مضلّع بسيط يجب أن يحتوي على مراكز جميع وحدات البكسل الصالحة في الصورة. يجب أن تكون هذه حلقة خطية: يجب أن تكون النقطة الأخيرة مساوية للنقطة الأولى. تكون الإحداثيات في إسقاط النطاق المحدّد بواسطة bandId.

ملاحظة: استخدِم إحداثيات غير صحيحة، مثل مركز كل بكسل، لأنّ footprint يتم استخدامه لتضمين بكسل إذا كان البكسل (مستطيل 1x1) يتقاطع مع المساحة. لتجنُّب اختيار وحدات بكسل مجاورة عن طريق الخطأ، لا تستخدِم إحداثيات ذات قيمة عددية صحيحة، لأنّها تمثّل الحدود بين وحدات البكسل. يؤدي رسم البصمة على طول مراكز وحدات البكسل إلى منع تضمين وحدات بكسل غير مقصودة، ما قد يتسبب في حدوث أخطاء عندما تكون وحدات البكسل المقصودة متاخمة لحدود الخريطة، مثل خط الزوال المقابل أو القطب.

على سبيل المثال، بالنسبة إلى صورة بحجم 2×2 بكسل تحتوي على أربع وحدات بكسل صالحة، إليك حلقة واحدة محتملة:

[
  {
    "x": 0.5,
    "y": 0.5
  },
  {
    "x": 0.5,
    "y": 1.5
  },
  {
    "x": 1.5,
    "y": 1.5
  },
  {
    "x": 1.5,
    "y": 0.5
  },
  {
    "x": 0.5,
    "y": 0.5
  }
]

footprint.bandId

string

رقم تعريف النطاق الذي يحدّد نظام الإحداثيات المرجعي (CRS) الخاص به إحداثيات البصمة إذا كانت فارغة، يتم استخدام النطاق الأول.

missingData.values

list

قائمة بالقيم (من النوع المزدوج) التي لا تمثّل أي بيانات في جميع نطاقات الصورة ينطبق ذلك على جميع الفرق الموسيقية التي لا تحدّد missingData الخاص بها.

pyramidingPolicy

string

سياسة التراكم وفي حال عدم تحديدها، يتم تطبيق السياسة "MEAN" تلقائيًا. ينطبق ذلك على جميع النطاقات التي لا تحدّد نطاقها الخاص. يمكنك الاطّلاع على هذا الرابط لمزيد من المعلومات. تتضمن الخيارات:

  • ‫"MEAN" (تلقائي)
  • "MODE"
  • "SAMPLE"

uriPrefix

string

بادئة اختيارية تتم إضافتها إلى جميع uris المحدّدة في البيان.

startTime

integer

الطابع الزمني المرتبط بمادة العرض، إن توفّر يتوافق هذا عادةً مع الوقت الذي تم فيه التقاط صورة من القمر الصناعي. بالنسبة إلى مواد العرض التي تتوافق مع فاصل زمني، مثل متوسط القيم على مدار شهر أو سنة، يتوافق هذا الطابع الزمني مع بداية ذلك الفاصل الزمني. يتم تحديدها بالثواني و(اختياريًا) بالنانو ثانية منذ بداية حقبة يونكس (1970-01-01). ويُفترض أن يكون بالتوقيت العالمي المنسّق (UTC).

endTime

integer

بالنسبة إلى مواد العرض التي تتوافق مع فاصل زمني، مثل متوسط القيم على مدار شهر أو سنة، يتوافق هذا الطابع الزمني مع نهاية ذلك الفاصل الزمني (حصريًا). يتم تحديدها بالثواني و(اختياريًا) بالنانو ثانية منذ بداية حقبة يونكس (1970-01-01). ويُفترض أن يكون بالتوقيت العالمي المنسّق (UTC).

أماكن الإقامة

dictionary

قاموس مسطّح عشوائي لأزواج المفتاح/القيمة يجب أن تكون المفاتيح سلاسل، ويمكن أن تكون القيم أرقامًا أو سلاسل. لا تتوفّر قيم القائمة بعد لمواد العرض التي يحمّلها المستخدمون.

القيود

حجم بيان JSON

الحدّ الأقصى لحجم ملف البيان بتنسيق JSON هو 10 ميغابايت. إذا كان لديك العديد من الملفات المطلوب تحميلها، ننصحك بالبحث عن طرق لتقليل عدد الأحرف اللازمة لوصف مجموعة البيانات. على سبيل المثال، استخدِم الحقل uriPrefix لتجنُّب الحاجة إلى تقديم مسار حزمة Google Cloud لكل معرّف موارد منتظم (URI) في قائمة uris. إذا كنت بحاجة إلى تصغير حجم الملفات أكثر، جرِّب اختصار أسمائها.

تنسيق ملف الصورة

يجب أن يكون كل ملف صورة بتنسيق TIFF. إذا لم يتم تحديد نظام الإحداثيات المرجعي في ملف البيان، يجب أن يكون الملف بتنسيق GeoTIFF يتضمّن نظام إحداثيات مرجعيًا.

يمكن ضغط ملفات TIFF باستخدام DEFLATE أو JPEG-XL/JXL أو LERC أو LERC_DEFLATE أو LERC_ZSTD أو LZMA أو LZW أو WEBP أو ZSTD.

في ما يلي اقتراحات للحصول على أفضل تجربة تحميل للملفات الكبيرة:

  • الخيار الأفضل: يوفّر ZSTD توازنًا جيدًا بين السرعة والضغط.
  • يُرجى تجنُّب: LZMA لأنّه قد يكون بطيئًا جدًا على الرغم من جودة الضغط.
  • الملفات غير المضغوطة: ستؤدي إلى ملفات أكبر حجمًا وأوقات تحميل أطول.
  • الضغط مع فقدان البيانات (مثل JPEG): قد يؤدي إلى تغيير قيم وحدات البكسل. استخدِم الضغط بدون فقدان البيانات (مثل DEFLATE وLZMA وLZW وZSTD) ما لم تكن على دراية بالتأثير المحتمل على بياناتك.