Jika Anda memerlukan fleksibilitas yang lebih besar saat mengupload tabel ke Google Earth Engine (EE) daripada yang disediakan oleh
UI Editor Kode
atau perintah upload
dari
alat command line'earthengine', Anda dapat melakukannya dengan mendeskripsikan upload tabel menggunakan file JSON yang dikenal sebagai "manifes"
dan menggunakan perintah upload table --manifest
dari alat command line.
Penyiapan satu kali
- Upload manifes hanya berfungsi dengan file yang berada di Google Cloud Storage. Untuk mulai menggunakan Google Cloud Storage, buat project Google Cloud, jika Anda belum memilikinya. Perhatikan bahwa penyiapan memerlukan penentuan kartu kredit untuk penagihan. EE sendiri tidak menagih siapa pun pada saat ini, tetapi mentransfer file ke Google Cloud Storage sebelum menguploadnya ke EE akan dikenai biaya kecil. Untuk ukuran data upload standar (puluhan atau ratusan gigabyte), biayanya akan cukup rendah.
- Dalam project Anda, aktifkan Cloud Storage API dan buat bucket.
- Instal klien Earth Engine Python. Library ini mencakup alat command line
earthengine
, yang akan kita gunakan untuk mengupload data. - Untuk upload otomatis, sebaiknya gunakan akun layanan Google Cloud yang terkait dengan project Anda. Anda tidak memerlukan akun layanan untuk pengujian, tetapi jika ada waktu, mulailah membiasakan diri untuk menggunakannya.
ID dan nama aset
Untuk aset dalam project Cloud, gunakan projects/my_cloud_project/assets/my_asset
.
Untuk project lama, nama aset dalam manifes harus sedikit berbeda dengan ID aset yang terlihat di tempat lain di Earth Engine. Untuk mengupload aset yang ID asetnya diawali dengan
users/some_user
atau projects/some_project
, nama aset dalam
manifes harus memiliki string projects/earthengine-legacy/assets/
yang ditambahkan ke
ID. Misalnya, ID aset EE users/username/my_table
harus diupload menggunakan nama projects/earthengine-legacy/assets/users/username/my_table
.
Ya, ini berarti ID seperti projects/some_projects/some_asset
akan
dikonversi menjadi nama dengan projects
disebutkan dua kali:
projects/earthengine-legacy/assets/projects/some_projects/some_asset
.
Hal ini membingungkan, tetapi diperlukan untuk mematuhi standar Google Cloud API.
Menggunakan manifes
Manifes yang paling sederhana ditampilkan di bawah. Fungsi ini mengupload file bernama small.csv
dari bucket Google Cloud Storage bernama gs://earthengine-test
.
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://earthengine-test/small.csv" ] } ] }
Untuk menggunakannya, simpan ke file bernama manifest.json
dan jalankan:
earthengine upload table --manifest /path/to/manifest.json
(File gs://earthengine-test/small.csv
ada dan dapat dibaca oleh publik. Anda dapat menggunakannya untuk pengujian.)
Untuk upload shapefile, tentukan hanya file .shp; file lainnya akan terdeteksi secara otomatis.
Beberapa sumber
Anda dapat menentukan beberapa sumber CSV atau shapefile, dengan satu file per sumber. Dalam hal ini, setiap file CSV harus memiliki struktur yang sama. Misalnya, kita memiliki dua file CSV, region1.csv
dan region2.csv
:
id | bentuk |
---|---|
1 | {"type":"Point","coordinates":[-119,36]} |
2 | {"type":"Point","coordinates":[-118,37]} |
3 | {"type":"Point","coordinates":[-117,38]} |
id | bentuk |
---|---|
4 | {"type":"Point","coordinates":[-112,40]} |
5 | {"type":"Point","coordinates":[-111,41]} |
6 | {"type":"Point","coordinates":[-110,42]} |
Keduanya memiliki struktur yang sama, tetapi kontennya berbeda. File tersebut telah diupload ke bucket Cloud Storage: gs://earthengine-test/region1.csv
gs://earthengine-test/region2.csv
sources
, seperti ini:
{ "name": "projects/some-project-id/assets/some-asset-id", "sources": [ { "uris": [ "gs://earthengine-test/region1.csv" ] }, { "uris": [ "gs://earthengine-test/region2.csv" ] } ] }
Waktu mulai dan berakhir
Semua aset harus menentukan waktu mulai dan waktu berakhir untuk memberikan lebih banyak konteks ke data, terutama jika aset disertakan dalam koleksi. Kolom ini tidak wajib, tetapi sebaiknya gunakan kolom ini jika memungkinkan.
Waktu mulai dan waktu berakhir biasanya berarti waktu pengamatan, bukan waktu saat file sumber dibuat.
Waktu akhir diperlakukan sebagai batas eksklusif untuk memudahkan. Misalnya, untuk aset yang berlangsung tepat satu hari, gunakan tengah malam dari dua hari berturut-turut (misalnya, 1980-01-31T00:00:00 dan 1980-02-01T00:00:00) untuk waktu mulai dan waktu berakhir. Jika aset tidak memiliki durasi, tetapkan waktu berakhir sama dengan waktu mulai. Merepresentasikan waktu dalam manifes sebagai string ISO 8601. Sebaiknya asumsikan bahwa waktu berakhir bersifat eksklusif (misalnya, tengah malam hari berikutnya untuk aset harian) untuk menyederhanakan nilai tanggal.
Contoh:
{ "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" }
Referensi struktur manifes
Struktur JSON berikut mencakup semua kemungkinan kolom manifes upload tabel. Temukan definisi kolom di bagian Definisi kolom manifes berikut.
{ "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> } }
Definisi kolom manifes
nama
string
Nama aset yang akan dibuat.
name
memiliki format "projects/*/assets/**" (misalnya, projects/earthengine-legacy/assets/users/USER/ASSET
).
sumber
list
Daftar kolom yang menentukan properti file tabel dan
sidecar-nya. Lihat kolom elemen kamus sources
berikut
untuk mengetahui informasi selengkapnya.
sources[i].uris
list
Daftar URI data yang akan diserap. Saat ini, hanya URI Google Cloud Storage yang didukung. Setiap URI harus ditentukan dalam format berikut:
gs://bucket-id/object-id
.
Objek utama harus berupa elemen pertama dalam daftar, dan sidecar
dicantumkan setelahnya. Setiap URI diawali dengan
TableManifest.uri_prefix
jika ditetapkan.
sources[i].charset
string
Nama charset default yang akan digunakan untuk mendekode string. Jika kosong, set karakter "UTF-8" diasumsikan secara default.
sources[i].maxErrorMeters
double
Error maksimum yang diizinkan dalam meter saat mengubah geometri antara sistem koordinat. Jika kosong, error maksimumnya adalah 1 meter secara default.
sources[i].maxVertices
int32
Jumlah maksimum verteks. Jika bukan nol, geometri akan dibagi lagi menjadi bagian yang terpisah secara spasial, masing-masing di bawah batas ini.
sources[i].crs
string
Kode CRS default atau string WKT yang menentukan sistem referensi koordinat dari geometri apa pun yang tidak ditentukan. Jika dibiarkan kosong, defaultnya adalah EPSG:4326. Hanya untuk sumber CSV/TFRecord.
sources[i].geodesic
boolean
Strategi default untuk menafsirkan tepi dalam geometri yang tidak memiliki strategi yang ditentukan. Jika salah, tepi akan lurus dalam proyeksi. Jika bernilai benar, tepi akan melengkung untuk mengikuti jalur terpendek di permukaan Bumi. Jika kosong, defaultnya adalah salah jika CRS adalah sistem koordinat Proyeksi. Hanya untuk sumber CSV/TFRecord.
sources[i].primaryGeometryColumn
string
Kolom geometri yang akan digunakan sebagai geometri utama baris jika ada lebih dari satu kolom geometri.
Jika dibiarkan kosong dan ada lebih dari satu kolom geometri, kolom geometri pertama yang ditemukan akan digunakan. Hanya untuk sumber CSV/TFRecord.
sources[i].xColumn
string
Nama kolom koordinat x numerik untuk menyimpulkan geometri titik. Jika yColumn
juga ditentukan, dan kedua kolom berisi nilai numerik, kolom geometri titik akan dibuat dengan nilai x,y dalam sistem koordinat yang diberikan dalam CRS. Jika dibiarkan kosong dan CRS tidak menentukan sistem koordinat yang diproyeksikan, defaultnya adalah "bujur". Jika dibiarkan
kosong dan CRS tidak menentukan sistem koordinat yang diproyeksikan,
defaultnya adalah string kosong dan tidak ada geometri titik yang dihasilkan.
Kolom geometri titik yang dihasilkan akan diberi nama
{xColumn}_{yColumn}_N
dengan N ditambahkan sehingga {xColumn}_{yColumn}_N
unik jika kolom bernama {xColumn}_{yColumn}
sudah
ada. Hanya untuk sumber CSV/TFRecord.
sources[i].yColumn
string
Nama kolom koordinat y numerik untuk menyimpulkan geometri titik. Jika xColumn
juga ditentukan, dan kedua kolom berisi nilai numerik, kolom geometri titik akan dibuat dengan nilai x,y dalam sistem koordinat yang diberikan dalam CRS. Jika dibiarkan kosong dan CRS tidak menentukan sistem koordinat yang diproyeksikan, defaultnya adalah "lintang". Jika dibiarkan
kosong dan CRS tidak menentukan sistem koordinat yang diproyeksikan,
defaultnya adalah string kosong dan tidak ada geometri titik yang dihasilkan.
Kolom geometri titik yang dihasilkan akan diberi nama
{xColumn}_{yColumn}_N
dengan N ditambahkan sehingga {xColumn}_{yColumn}_N
unik jika kolom bernama {xColumn}_{yColumn}
sudah
ada. Hanya untuk sumber CSV/TFRecord.
sources[i].dateFormat
string
Format yang digunakan untuk mengurai kolom yang mengenkode tanggal. Pola format harus seperti yang dijelaskan dalam dokumentasi class DateTimeFormat Joda-Time. Jika dibiarkan kosong, tanggal akan diimpor sebagai string. Hanya untuk sumber CSV/TFRecord.
sources[i].csvDelimiter
string
Saat menyerap file CSV, satu karakter digunakan sebagai pemisah antara nilai kolom dalam baris. Jika dibiarkan kosong, setelan defaultnya adalah ','
.
Hanya untuk sumber CSV.
sources[i].csvQualifier
string
Saat menyerap file CSV, karakter yang mengapit nilai kolom (alias
"karakter tanda petik"). Jika dibiarkan kosong, setelan defaultnya adalah "
.
Hanya untuk sumber CSV.
Jika nilai kolom tidak diapit oleh penentu, spasi kosong di awal dan akhir akan dipangkas. Contoh:
..., 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
Awalan opsional yang ditambahkan ke semua uris
yang ditentukan dalam manifes.
startTime
integer
Stempel waktu yang terkait dengan aset, jika ada. Hal ini biasanya sesuai dengan waktu pengumpulan data. Untuk aset yang sesuai dengan interval waktu, seperti nilai rata-rata selama sebulan atau setahun, stempel waktu ini sesuai dengan awal interval tersebut. Ditentukan sebagai detik dan (opsional) nanodetik sejak epoch (1970-01-01). Diasumsikan berada di zona waktu UTC.
endTime
integer
Untuk aset yang sesuai dengan interval waktu, seperti nilai rata-rata selama sebulan atau setahun, stempel waktu ini sesuai dengan akhir interval tersebut (eksklusif). Ditentukan sebagai detik dan (opsional) nanodetik sejak epoch (1970-01-01). Diasumsikan berada di zona waktu UTC.
properti
dictionary
Kamus datar arbitrer dari pasangan nilai kunci. Kunci harus berupa string dan nilai dapat berupa angka atau string. Nilai daftar belum didukung untuk aset yang diupload pengguna.
columnDataTypeOverrides
dictionary
Jika deteksi jenis otomatis tidak berfungsi dengan benar, gunakan kolom ini dengan nama kolom sebagai kunci dan salah satu konstanta berikut sebagai nilai: COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC, COLUMN_DATA_TYPE_LONG.
Batasan
Ukuran manifes JSON
Batas ukuran file manifes JSON adalah 10 MB. Jika Anda memiliki banyak file untuk diupload,
pertimbangkan cara untuk mengurangi jumlah karakter yang diperlukan untuk mendeskripsikan set data. Misalnya,
gunakan kolom uriPrefix
untuk menghilangkan
kebutuhan untuk memberikan jalur bucket GCP untuk setiap URI dalam
daftar uris
. Jika pengurangan ukuran lebih lanjut
diperlukan, coba perpendek nama file.