اگر به انعطافپذیری بیشتری برای آپلود جداول در Google Earth Engine (EE) نسبت به رابط کاربری ویرایشگر کد یا دستور upload
ابزار خط فرمان «Earthengine» نیاز دارید، میتوانید این کار را با توصیف آپلود جدول با استفاده از یک فایل JSON معروف به «مانیفست» و استفاده از دستور upload table --manifest
از ابزار خط فرمان انجام دهید.
راه اندازی یک بار
- بارگذاریهای مانیفست فقط با فایلهای موجود در Google Cloud Storage کار میکنند. برای شروع استفاده از Google Cloud Storage، اگر قبلاً ندارید، یک پروژه Google Cloud ایجاد کنید . توجه داشته باشید که راه اندازی نیاز به مشخص کردن یک کارت اعتباری برای صورتحساب دارد. خود EE در حال حاضر هزینهای از کسی دریافت نمیکند، اما انتقال فایلها به Google Cloud Storage قبل از آپلود آنها در EE هزینه کمی دارد. برای اندازههای معمولی دادههای آپلود (دهها یا صدها گیگابایت)، هزینه بسیار پایین خواهد بود.
- در پروژه خود، Cloud Storage API را روشن کنید و یک سطل ایجاد کنید .
- کلاینت Earth Engine Python را نصب کنید . این شامل ابزار خط فرمان
earthengine
است که ما از آن برای آپلود داده ها استفاده خواهیم کرد. - برای آپلودهای خودکار، ممکن است بخواهید از یک حساب سرویس 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
نباشد. در صورت نیاز به کاهش اندازه بیشتر، سعی کنید نام فایل ها را کوتاه کنید.