بارگذاری مانیفست جدول

اگر به انعطاف‌پذیری بیشتری برای آپلود جداول در Google Earth Engine (EE) نسبت به رابط کاربری ویرایشگر کد یا دستور upload ابزار خط فرمان «Earthengine» نیاز دارید، می‌توانید این کار را با توصیف آپلود جدول با استفاده از یک فایل JSON معروف به «مانیفست» و استفاده از دستور upload table --manifest از ابزار خط فرمان انجام دهید.

راه اندازی یک بار

  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 مرتبط با پروژه خود استفاده کنید. برای تست کردن نیازی به حساب سرویس ندارید، اما زمانی که فرصت دارید، لطفاً با استفاده از آنها آشنا شوید.

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

برای دارایی‌های پروژه‌های Cloud، projects/my_cloud_project/assets/my_asset استفاده کنید.

برای پروژه‌های قدیمی‌تر، نام دارایی در مانیفست باید کمی متفاوت از شناسه دارایی قابل مشاهده در جاهای دیگر Earth Engine باشد. برای آپلود دارایی‌هایی که شناسه‌های دارایی آن‌ها با users/some_user یا projects/some_project شروع می‌شود، نام دارایی در مانیفست باید دارای رشته projects/earthengine-legacy/assets/ باشد که به شناسه اضافه شده است. برای مثال، شناسه دارایی EE users/username/my_table باید با استفاده از نام projects/earthengine-legacy/assets/users/username/my_table آپلود شود.

بله، این بدان معناست که شناسه‌هایی مانند projects/some_projects/some_asset به نام‌هایی تبدیل می‌شوند که در آن projects دو بار ذکر شده است: projects/earthengine-legacy/assets/projects/some_projects/some_asset . این گیج کننده است اما برای مطابقت با استانداردهای Google Cloud API ضروری است.

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

ساده ترین مانیفست ممکن در زیر نشان داده شده است. فایلی به نام small.csv را از یک سطل فضای ذخیره‌سازی ابری Google به نام gs://earthengine-test آپلود می‌کند.

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

برای استفاده از آن، آن را در فایلی به نام manifest.json ذخیره کنید و اجرا کنید:

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

(فایل gs://earthengine-test/small.csv وجود دارد و برای عموم قابل خواندن است - می توانید از آن برای آزمایش استفاده کنید.)

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

منابع متعدد

می توان چندین منبع CSV یا shapefile را با یک فایل در هر منبع مشخص کرد. در این حالت، هر فایل CSV باید ساختار یکسانی داشته باشد. به عنوان مثال، ما دو فایل CSV داریم، region1.csv و region2.csv :

شناسه شکل
1 {"type":"Point","Coordinates":[-119,36]}
2 {"type":"Point","Coordinates":[-118,37]}
3 {"type":"Point","Coordinates":[-117,38]}
شناسه شکل
4 {"type":"Point","Coordinates":[-112,40]}
5 {"type":"Point","Coordinates":[-111,41]}
6 {"type":"Point","Coordinates":[-110,42]}

آنها ساختار یکسانی دارند، اما محتوای متفاوتی دارند. آنها در یک سطل ذخیره سازی Cloud آپلود شده اند: gs://earthengine-test/region1.csv و gs://earthengine-test/region2.csv . برای جذب آنها به عنوان دارایی Earth Engine، یک مانیفست با دو ورودی در فهرست sources ایجاد کنید، مانند این:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://earthengine-test/region1.csv"
      ]
    },
    {
      "uris": [
        "gs://earthengine-test/region2.csv"
      ]
    }
  ]
}

زمان شروع و پایان

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

زمان شروع و پایان معمولاً به معنای زمان مشاهده است، نه زمانی که فایل منبع تولید شده است.

زمان پایان به عنوان یک مرز انحصاری برای سادگی در نظر گرفته می شود. برای مثال، برای دارایی‌هایی که دقیقاً یک روز را در بر می‌گیرند، از نیمه شب دو روز متوالی (به عنوان مثال، 1980-01-31T00:00:00 و 1980-02-01T00:00:00) برای زمان شروع و پایان استفاده کنید. اگر دارایی مدت زمان ندارد، زمان پایان را با زمان شروع یکسان تنظیم کنید. نمایش زمان در مانیفست ها به صورت رشته های ISO 8601 . توصیه می کنیم برای ساده کردن مقادیر تاریخ فرض کنیم که زمان پایان منحصر به فرد است (مثلاً نیمه شب روز بعد برای دارایی های روزانه).

مثال:

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

مرجع ساختار مانیفست

ساختار JSON زیر شامل تمام فیلدهای مانیفست آپلود جدول ممکن است. تعاریف فیلد را در قسمت تعاریف فیلد Manifest زیر بیابید.

{
  "name": <string>,
  "sources": [
    {
      "uris": [
        <string>
      ],
      "charset": <string>,
      "maxErrorMeters": <double>,
      "maxVertices": <int32>,
      "crs": <string>,
      "geodesic": <boolean>,
      "primaryGeometryColumn": <string>,
      "xColumn": <string>,
      "yColumn": <string>,
      "dateFormat": <string>,
      "csvDelimiter": <string>,
      "csvQualifier": <string>,
    }
  ],
  "uriPrefix": <string>,
  "startTime": {
    "seconds": <integer>
  },
  "endTime": {
    "seconds": <integer>
  },
  "properties": {
    <unspecified>
  }
}

مانیفست تعاریف میدان

نام

string

نام دارایی که باید ایجاد شود. name از قالب "projects/*/assets/**" است (به عنوان مثال، projects/earthengine-legacy/assets/users/USER/ASSET ).

منابع

list

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

منابع[i].uris

list

فهرستی از URI های داده هایی که باید مصرف شوند. در حال حاضر، تنها URI های فضای ذخیره سازی ابری Google پشتیبانی می شوند. هر URI باید در قالب زیر مشخص شود: gs://bucket-id/object-id . شی اصلی باید اولین عنصر لیست باشد، و پس از آن قسمت های فرعی فهرست شوند. هر URI در صورت تنظیم با TableManifest.uri_prefix پیشوند می شود.

منابع[i].charset

string

نام مجموعه نویسه پیش‌فرض برای رمزگشایی رشته‌ها. اگر خالی باشد، مجموعه نویسه "UTF-8" به طور پیش فرض در نظر گرفته می شود.

sources[i].maxErrorMeters

double

حداکثر خطای مجاز در متر هنگام تبدیل هندسه بین سیستم های مختصات. اگر خالی باشد، حداکثر خطا به طور پیش فرض 1 متر است.

منابع[i].maxVertices

int32

حداکثر تعداد رئوس اگر صفر نباشد، هندسه به قطعات ناهمگون تقسیم می شود که هر کدام زیر این حد است.

منابع[i].crs

string

کد پیش‌فرض CRS یا رشته WKT که سیستم مرجع مختصات هر هندسه‌ای را مشخص می‌کند که هندسه مشخصی ندارد. اگر خالی بماند، پیش‌فرض EPSG:4326 خواهد بود. فقط برای منابع CSV/TFRecord.

منابع[i].ژئودزیک

boolean

استراتژی پیش‌فرض برای تفسیر یال‌هایی در هندسه که در غیر این صورت یک یال ندارند. اگر نادرست باشد، لبه ها در برآمدگی مستقیم هستند. اگر درست باشد، لبه‌ها برای دنبال کردن کوتاه‌ترین مسیر روی سطح زمین خمیده می‌شوند. وقتی خالی باشد، اگر CRS یک سیستم مختصات پیش‌بینی‌شده باشد، پیش‌فرض نادرست است. فقط برای منابع CSV/TFRecord.

sources[i].primaryGeometryColumn

string

ستون هندسه برای استفاده به عنوان هندسه اولیه یک ردیف زمانی که بیش از یک ستون هندسی وجود دارد.

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

منابع[i].xColumn

string

نام ستون مختصات x عددی برای استنتاج هندسه نقطه. اگر yColumn نیز مشخص شده باشد و هر دو ستون حاوی مقادیر عددی باشند، یک ستون هندسه نقطه ای با مقادیر x,y در سیستم مختصات ارائه شده در CRS ساخته می شود. اگر خالی بماند و CRS یک سیستم مختصات پیش بینی شده را مشخص نکرده باشد، به طور پیش فرض روی "طول جغرافیایی" قرار می گیرد. اگر خالی بماند و CRS یک سیستم مختصات پیش‌بینی‌شده را مشخص کند ، به‌طور پیش‌فرض یک رشته خالی می‌شود و هندسه نقطه‌ای ایجاد نمی‌شود.

یک ستون هندسه نقطه‌ای ایجاد شده {xColumn}_{yColumn}_N نامیده می‌شود که در آن N به‌گونه‌ای اضافه می‌شود که اگر ستونی به نام {xColumn}_{yColumn} {xColumn}_{yColumn}_N منحصربه‌فرد است. فقط برای منابع CSV/TFRecord.

منابع[i].yColumn

string

نام ستون مختصات عددی y برای استنتاج هندسه نقطه. اگر xColumn نیز مشخص شده باشد و هر دو ستون حاوی مقادیر عددی باشند، یک ستون هندسه نقطه ای با مقادیر x,y در سیستم مختصات ارائه شده در CRS ساخته می شود. اگر خالی بماند و CRS یک سیستم مختصات پیش‌بینی‌شده را مشخص نکند ، به‌طور پیش‌فرض روی «طول جغرافیایی» تنظیم می‌شود. اگر خالی بماند و CRS یک سیستم مختصات پیش‌بینی‌شده را مشخص کند ، به‌طور پیش‌فرض یک رشته خالی می‌شود و هندسه نقطه‌ای ایجاد نمی‌شود.

یک ستون هندسه نقطه‌ای ایجاد شده {xColumn}_{yColumn}_N نامیده می‌شود که در آن N به‌گونه‌ای اضافه می‌شود که اگر ستونی به نام {xColumn}_{yColumn} {xColumn}_{yColumn}_N منحصربه‌فرد است. فقط برای منابع CSV/TFRecord.

sources[i].dateFormat

string

قالبی که با آن می توان فیلدهای رمزگذاری تاریخ را تجزیه کرد. الگوی قالب باید مطابق با مستندات کلاس Joda-Time DateTimeFormat باشد. اگر خالی بماند، تاریخ ها به عنوان رشته وارد می شوند. فقط برای منابع CSV/TFRecord.

sources[i].csvDelimiter

string

هنگام دریافت فایل‌های CSV، از یک کاراکتر به عنوان جداکننده بین مقادیر ستون در یک ردیف استفاده می‌شود. اگر خالی بماند، پیش‌فرض روی ',' است. فقط برای منابع CSV.

sources[i].csvQualifier

string

هنگام دریافت فایل‌های CSV، نویسه‌ای که مقادیر ستون‌ها را احاطه می‌کند (معروف به «کاراکتر نقل قول»). اگر خالی بماند، پیش‌فرض روی " . فقط برای منابع CSV.

اگر یک مقدار ستون توسط واجد شرایط احاطه نشده باشد، فضای سفید پیشرو و انتهایی کوتاه می شود. به عنوان مثال:

    ..., test,...            <== this value is not qualified
becomes the string value:
    "test"                   <== leading whitespace is stripped
در حالی که:
    ...," test",...          <== this value IS qualified with quotes
becomes the string value:
    " test"                  <== leading whitespace remains!

uriPrefix

string

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

زمان شروع

integer

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

پایان زمان

integer

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

خواص

dictionary

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

columnDataTypeOverrides

dictionary

اگر تشخیص نوع خودکار به درستی کار نمی کند، از این فیلد با نام ستون ها به عنوان کلید و یکی از ثابت های زیر به عنوان مقادیر استفاده کنید: COLUMN_DATA_TYPE_STRING، COLUMN_DATA_TYPE_NUMERIC، COLUMN_DATA_TYPE_LONG.

محدودیت ها

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

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