آپلود مانیفست تصویر

اگر به انعطاف‌پذیری بیشتری برای آپلود تصاویر در 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. کلاینت Earth Engine Python را نصب کنید . این شامل ابزار خط فرمان earthengine است که ما از آن برای آپلود داده ها استفاده خواهیم کرد.
  4. برای آپلودهای خودکار، ممکن است بخواهید از یک حساب سرویس Google Cloud مرتبط با پروژه خود استفاده کنید. برای تست کردن نیازی به حساب سرویس ندارید، اما زمانی که فرصت دارید، لطفاً با استفاده از آنها آشنا شوید.

فایل‌های منبع بسیار بزرگ (100 گیگابایت یا بیشتر) ممکن است سریع‌تر آپلود شوند اگر به چندین کاشی تقسیم شوند.

شناسه و نام دارایی

برای دارایی‌های متعلق به پروژه Cloud، از این قرارداد برای نام‌های دارایی استفاده کنید: projects/some-project-id/assets/some-asset-id .

درباره نام دارایی برای پروژه قدیمی و دارایی های متعلق به کاربر بیاموزید

برای پروژه‌های قدیمی‌تر، نام دارایی در مانیفست باید کمی متفاوت از شناسه دارایی قابل مشاهده در جاهای دیگر Earth Engine باشد. برای آپلود دارایی‌هایی که شناسه‌های دارایی آن‌ها با users/some_user یا projects/some_project شروع می‌شود، نام دارایی در مانیفست باید دارای رشته projects/earthengine-legacy/assets/ باشد که به شناسه اضافه شده است. برای مثال، شناسه دارایی EE 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 به نام 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 درجه است). چنین فایل هایی باید در یک باند در یک دارایی EE موزاییک شوند (با هم ادغام شوند) .
  • باندهای جدا گاهی اوقات، چندین فایل نشان دهنده چندین باند هستند. چنین فایل هایی باید به عنوان باند در یک دارایی EE کنار هم چیده شوند.

(ممکن است لازم باشد از هر دو راه به طور همزمان استفاده شود، اما این یک وضعیت نادر است.)

برای توصیف این گزینه ها، مانیفست ها مفهوم یک مجموعه کاشی را معرفی می کنند. یک مجموعه کاشی منفرد مربوط به یک منبع GDAL است. به همین دلیل، همه منابع در یک مجموعه کاشی باید ساختار GDAL یکسانی داشته باشند (تعداد و نوع باندها، طرح ریزی، تبدیل، مقدار از دست رفته). از آنجایی که یک منبع GDAL می تواند چندین باند داشته باشد، یک مجموعه کاشی ممکن است حاوی داده هایی برای چندین باند EE باشد.

برای بلع موزاییک ، مانیفست به این صورت خواهد بود:

{
  "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"
          ]
        }
      ]
    }
  ]
}

توجه داشته باشید که در مورد باندهای جداگانه، برای وضوح باید به هر مجموعه کاشی، شناسه کاشی متفاوتی بدهیم. شناسه tileset می‌تواند یک رشته دلخواه باشد - این رشته‌ها در دارایی آپلود شده نگهداری نمی‌شوند. شناسه‌های مجموعه کاشی‌ها فقط برای تشخیص کاشی‌های انباشته شده از یکدیگر استفاده می‌شوند.

باندها

دومین مفهوم مهم تطبیق فایل های منبع با باندهای دارایی EE است. این کار با استفاده از بخش bands مانیفست انجام می شود.

قسمت bands را می توان حذف کرد، در این صورت باندها ابتدا از فایل های اولین مجموعه کاشی و سپس از مجموعه کاشی بعدی و غیره ایجاد می شوند. به‌طور پیش‌فرض، باندها «b1»، «b2»، و غیره نام‌گذاری می‌شوند. برای لغو نام باندهای پیش‌فرض، یک بخش «باند» را در پایان قرار دهید، مانند این:

{
  "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"]
    }
  ]
}

در مثال آخر، ما با دو باند از مجموعه tileset data_tileset کار می کنیم، اما فقط یک ماسک را به یکی از باندها ( data_band ) اعمال می کنیم، همانطور که توسط فیلد bandIds تنها شی فهرست ارائه شده maskBands تعیین شده است.

توجه داشته باشید که تنها آخرین باند مجموعه کاشی ذکر شده در maskBands به عنوان نوار ماسک استفاده می شود.

سیاست هرمی

هنگامی که Earth Engine هرم های تصویری را در حین دریافت می سازد، باید شبکه های 2x2 پیکسل را به طور مکرر به یک پیکسل کاهش دهد و مقدار پیکسل را به نوعی تغییر دهد. به‌طور پیش‌فرض، مقادیر پیکسل میانگین می‌شوند، که در بیشتر موارد زمانی که باند شطرنجی داده‌های کم و بیش پیوسته را نشان می‌دهد، کار درستی است. با این حال، دو حالت وجود دارد که اتکا به پیش‌فرض نتایج نادرستی ایجاد می‌کند، در این صورت، فیلد 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 زیر شامل تمام فیلدهای مانیفست آپلود تصویر ممکن است. تعاریف فیلد را در قسمت تعاریف فیلد Manifest زیر بیابید.

{
  "name": <string>,
  "tilesets": [
    {
      "dataType": <string>,
      "id": <string>,
      "crs": <string>,
      "sources": [
        {
          "uris": [
            <string>
          ],
          "affineTransform": {
            "scaleX": <double>,
            "shearX": <double>,
            "translateX": <double>,
            "shearY": <double>,
            "scaleY": <double>,
            "translateY": <double>
          }
        }
      ]
    }
  ],
  "bands": [
    {
      "id": <string>,
      "tilesetId": <string>,
      "tilesetBandIndex": <int32>,
      "missingData": {
        "values": [<double>]
      },
      "pyramindingPolicy": <string>
    }
  ],
  "maskBands": [
    {
      "tilesetId": <string>,
      "bandIds": [
        <string>
      ]
    }
  ],
  "footprint": {
    "points": [
      {
        "x": <double>,
        "y": <double>
      }
    ],
    "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

شناسه tileset. باید در میان مجموعه‌های کاشی مشخص‌شده در مانیفست دارایی منحصربه‌فرد باشد. این شناسه در مرحله پردازش کنار گذاشته می شود. این فقط برای پیوند یک مجموعه کاشی به یک باند استفاده می شود. رشته خالی یک شناسه معتبر است.

tilesets[i].crs

string

سیستم مرجع مختصات شبکه پیکسلی که در صورت امکان به عنوان کد استاندارد (مثلا کد EPSG) و در غیر این صورت در قالب WKT مشخص شده است.

tilesets[i].منابع

list

فهرستی از فرهنگ لغت که ویژگی های یک فایل تصویری و حاشیه های آن را تعریف می کند. برای اطلاعات بیشتر به فیلدهای عنصر فرهنگ لغت sources زیر مراجعه کنید.

tilesets[i].sources[j].uris

list

فهرستی از URI های داده هایی که باید مصرف شوند. فقط URI های Google Cloud Storage پشتیبانی می شوند. هر URI باید در قالب زیر مشخص شود: gs://bucket-id/object-id . شی اصلی باید اولین عنصر لیست باشد، و پس از آن قسمت های فرعی فهرست شوند. هر URI در صورت تنظیم با ImageManifest.uriPrefix پیشوند می شود.

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

فهرستی از فرهنگ‌های لغت که ویژگی‌های یک باند منفرد را از یک مجموعه tileset تعریف می‌کنند. توجه داشته باشید که ترتیب باند دارایی با ترتیب bands یکسان است. برای اطلاعات بیشتر به فیلدهای عنصر فرهنگ لغت bands زیر مراجعه کنید.

bands[i].id

string

شناسه (نام) گروه.

bands[i].tilesetId

string

شناسه مجموعه کاشی مربوط به باند.

bands[i].tilesetBandIndex

int32

شاخص باند مبتنی بر صفر از مجموعه کاشی مربوط به باند.

باند[i].missingData.values

list

لیستی از مقادیر (نوع دوگانه) که هیچ داده ای را در باند نشان نمی دهد.

bands[i].pyramidingPolicy

string

سیاست هرمی برای اطلاعات بیشتر به این لینک مراجعه کنید. گزینه ها عبارتند از:

  • "MEAN" (پیش فرض)
  • "MODE"
  • "نمونه"

باندهای ماسک

list

فهرستی از فرهنگ‌های لغت که ویژگی‌های یک باند ماسک منفرد را که از یک مجموعه tileset منبع شده است، تعریف می‌کنند. حداکثر 1 ماسک باند ممکن است ارائه شود. برای اطلاعات بیشتر، فیلدهای عنصر دیکشنری maskBands زیر را ببینید.

maskBands[i].tilesetId

string

شناسه مجموعه کاشی مربوط به نوار ماسک. آخرین نوار مجموعه کاشی همیشه به عنوان نوار ماسک استفاده می شود.

maskBands[i].bandIds

list of strings

فهرست شناسه باندهایی که نوار ماسک روی آنها اعمال می شود. اگر خالی باشد، نوار ماسک به همه باندهای دارایی اعمال می شود. هر باند ممکن است فقط یک باند ماسک مربوطه داشته باشد.

رد پا

dictionary

دیکشنری که ویژگی های ردپای همه پیکسل های معتبر در یک تصویر را تعریف می کند. اگر خالی باشد، ردپای پیش‌فرض کل تصویر است. برای اطلاعات بیشتر به فیلدهای عنصر فرهنگ لغت footprint زیر مراجعه کنید.

ردپا.نقاط

list

لیستی از نقاطی که ردپایی از تمام پیکسل های معتبر در یک تصویر را مشخص می کند. یک نقطه توسط یک فرهنگ لغت با کلیدهای "x" و "y" دارای مقادیر شناور تعریف می شود. فهرستی از نقاط برای توصیف حلقه‌ای است که نمای بیرونی یک چندضلعی ساده را تشکیل می‌دهد که باید مرکز همه پیکسل‌های معتبر تصویر را در خود داشته باشد. این باید یک حلقه خطی باشد: آخرین نقطه باید برابر با اولین باشد. مختصات در طرح بندی باند مشخص شده توسط bandId هستند.

توجه: از مختصات غیر صحیح مانند مرکز هر پیکسل استفاده کنید زیرا اگر پیکسل (مستطیل 1×1) ردپای را قطع کند، footprint شامل یک پیکسل می شود. برای جلوگیری از انتخاب تصادفی پیکسل های همسایه، از مختصات با مقدار صحیح استفاده نکنید، زیرا آن ها مرزهای بین پیکسل ها هستند. ترسیم ردپای در امتداد مراکز پیکسل از اضافه کردن پیکسل‌های ناخواسته جلوگیری می‌کند، که می‌تواند باعث ایجاد خطا در زمانی که پیکسل‌های مورد نظر در کنار مرز نقشه مانند پادمریدین یا قطب قرار می‌گیرند.

به عنوان مثال، برای یک تصویر 2x2 با هر چهار پیکسل معتبر، یک حلقه ممکن زیر است:

[
  {
    "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 خود را مشخص نمی کنند.

pyramiding Policy

string

سیاست هرمی اگر مشخص نشده باشد، خط مشی "MEAN" به طور پیش فرض اعمال می شود. برای همه باندهایی که گروه خودشان را مشخص نمی کنند اعمال می شود. برای اطلاعات بیشتر به این لینک مراجعه کنید. گزینه ها عبارتند از:

  • "MEAN" (پیش فرض)
  • "MODE"
  • "نمونه"

uriPrefix

string

یک پیشوند اختیاری که به همه uris تعریف شده در مانیفست اضافه شده است.

زمان شروع

integer

مهر زمانی مرتبط با دارایی، در صورت وجود. این معمولاً مربوط به زمانی است که در آن یک تصویر ماهواره ای گرفته شده است. برای دارایی هایی که با یک بازه زمانی مطابقت دارند، مانند مقادیر متوسط ​​در طول یک ماه یا سال، این مهر زمانی با شروع آن بازه مطابقت دارد. به عنوان ثانیه و (اختیاری) نانوثانیه از دوران (01-01-1970) مشخص شده است. فرض بر این است که در منطقه زمانی UTC باشد.

پایان زمان

integer

برای دارایی هایی که با یک بازه زمانی مطابقت دارند، مانند مقادیر متوسط ​​در طول یک ماه یا سال، این مهر زمانی مربوط به پایان آن بازه زمانی (انحصاری) است. به عنوان ثانیه و (اختیاری) نانوثانیه از دوران (01-01-1970) مشخص شده است. فرض بر این است که در منطقه زمانی UTC باشد.

خواص

dictionary

فرهنگ لغت مسطح دلخواه از جفت های کلید-مقدار. کلیدها باید رشته ای باشند و مقادیر می توانند اعداد یا رشته باشند. مقادیر فهرست هنوز برای دارایی های بارگذاری شده توسط کاربر پشتیبانی نمی شود.

محدودیت ها

اندازه مانیفست JSON

محدودیت اندازه فایل مانیفست JSON 10 مگابایت است. اگر فایل های زیادی برای آپلود دارید، راه هایی را برای کاهش تعداد کاراکترهای مورد نیاز برای توصیف مجموعه داده در نظر بگیرید. به عنوان مثال، از فیلد uriPrefix استفاده کنید تا نیازی به ارائه مسیر سطل Google Cloud برای هر URI در لیست uris نباشد. در صورت نیاز به کاهش اندازه بیشتر، سعی کنید نام فایل ها را کوتاه کنید.

فرمت فایل تصویری

هر فایل تصویری باید یک تصویر TIFF باشد. اگر CRS در مانیفست مشخص نشده باشد، فایل باید GeoTIFF با CRS جاسازی شده باشد.

فایل های TIFF را می توان با DEFLATE، JPEG-XL/JXL، LERC، LERC_DEFLATE، LERC_ZSTD، LZMA، LZW، WEBP یا ZSTD فشرده کرد.

توصیه هایی برای بهترین تجربه آپلود برای فایل های حجیم:

  • بهترین انتخاب: ZSTD تعادل خوبی از سرعت و فشرده سازی ارائه می دهد.
  • اجتناب: LZMA با وجود فشرده سازی خوب می تواند بسیار کند باشد.
  • فایل های فشرده نشده: منجر به فایل های بزرگتر و زمان آپلود طولانی تر می شود.
  • فشرده سازی از دست رفته (به عنوان مثال، JPEG): ممکن است مقادیر پیکسل را تغییر دهد. از فشرده سازی بدون تلفات (به عنوان مثال، DEFLATE، LZMA، LZW، ZSTD) استفاده کنید، مگر اینکه تأثیر بالقوه روی داده های خود را درک کنید.