Tải tệp kê khai bảng lên

Nếu cần tải bảng lên Google Earth Engine (EE) một cách linh hoạt hơn so với giao diện người dùng Trình soạn thảo mã hoặc lệnh upload của công cụ dòng lệnh "earthengine", bạn có thể thực hiện việc này bằng cách mô tả quá trình tải bảng lên bằng tệp JSON được gọi là "tệp kê khai" và sử dụng lệnh upload table --manifest của công cụ dòng lệnh.

Thiết lập một lần

  1. Tính năng tải tệp kê khai lên chỉ hoạt động với các tệp nằm trong Google Cloud Storage. Để bắt đầu sử dụng Google Cloud Storage, hãy tạo một dự án trên Google Cloud nếu bạn chưa có. Xin lưu ý rằng bạn cần phải chỉ định một thẻ tín dụng để thanh toán trong quá trình thiết lập. Hiện tại, EE không tính phí cho bất kỳ ai, nhưng việc chuyển tệp sang Google Cloud Storage trước khi tải lên EE sẽ có một khoản phí nhỏ. Đối với kích thước dữ liệu tải lên thông thường (hàng chục hoặc hàng trăm gigabyte), chi phí sẽ khá thấp.
  2. Trong dự án, hãy bật Cloud Storage APItạo một bộ chứa.
  3. Cài đặt ứng dụng Earth Engine Python. Thư viện này bao gồm công cụ dòng lệnh earthengine mà chúng ta sẽ sử dụng để tải dữ liệu lên.
  4. Để tải lên tự động, bạn nên sử dụng tài khoản dịch vụ Google Cloud được liên kết với dự án của mình. Bạn không cần tài khoản dịch vụ để kiểm thử, nhưng khi có thời gian, vui lòng bắt đầu làm quen với việc sử dụng tài khoản dịch vụ.

Mã và tên thành phần

Đối với các thành phần trong dự án trên Google Cloud, hãy sử dụng projects/my_cloud_project/assets/my_asset.

Đối với các dự án cũ, tên tài sản trong tệp kê khai cần phải khác một chút so với mã tài sản hiển thị ở nơi khác trong Earth Engine. Để tải các thành phần có mã thành phần bắt đầu bằng users/some_user hoặc projects/some_project lên, tên thành phần trong tệp kê khai phải có chuỗi projects/earthengine-legacy/assets/ đứng trước mã. Ví dụ: bạn nên tải mã thành phần EE users/username/my_table lên bằng tên projects/earthengine-legacy/assets/users/username/my_table.

Có, điều này có nghĩa là các mã nhận dạng như projects/some_projects/some_asset sẽ được chuyển đổi thành tên có projects được đề cập hai lần: projects/earthengine-legacy/assets/projects/some_projects/some_asset. Điều này gây nhầm lẫn nhưng cần thiết để tuân thủ các tiêu chuẩn của API Google Cloud.

Sử dụng tệp kê khai

Tệp kê khai đơn giản nhất có thể có được như sau. Hàm này tải một tệp có tên small.csv lên từ một bộ chứa Google Cloud Storage có tên gs://earthengine-test.

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

Để sử dụng, hãy lưu tệp này vào tệp có tên manifest.json rồi chạy:

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

(Tệp gs://earthengine-test/small.csv tồn tại và có thể đọc công khai – bạn có thể sử dụng tệp này để kiểm thử.)

Đối với tệp shapefile tải lên, chỉ cần chỉ định tệp .shp; các tệp khác sẽ được phát hiện tự động.

Nhiều nguồn

Bạn có thể chỉ định nhiều nguồn CSV hoặc tệp shapefile, với mỗi nguồn là một tệp. Trong trường hợp này, mỗi tệp CSV phải có cùng cấu trúc. Ví dụ: chúng ta có hai tệp CSV là region1.csvregion2.csv:

id hình dạng
1 {"type":"Point","coordinates":[-119,36]}
2 {"type":"Point","coordinates":[-118,37]}
3 {"type":"Point","coordinates":[-117,38]}
id hình dạng
4 {"type":"Point","coordinates":[-112,40]}
5 {"type":"Point","coordinates":[-111,41]}
6 {"type":"Point","coordinates":[-110,42]}

Các tệp này có cùng cấu trúc nhưng nội dung khác nhau. Các tệp này đã được tải lên một bộ chứa trong Cloud Storage: gs://earthengine-test/region1.csvgs://earthengine-test/region2.csv. Để nhập các tệp này dưới dạng tài sản Earth Engine, hãy tạo một tệp kê khai có hai mục trong danh sách sources, như sau:

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

Thời gian bắt đầu và kết thúc

Tất cả thành phần phải chỉ định thời gian bắt đầu và kết thúc để cung cấp thêm bối cảnh cho dữ liệu, đặc biệt là nếu các thành phần đó được đưa vào bộ sưu tập. Các trường này không bắt buộc, nhưng bạn nên sử dụng các trường này bất cứ khi nào có thể.

Thời gian bắt đầu và kết thúc thường là thời gian quan sát, chứ không phải thời gian tạo tệp nguồn.

Để đơn giản, thời gian kết thúc được coi là ranh giới riêng biệt. Ví dụ: đối với các thành phần kéo dài đúng một ngày, hãy sử dụng thời gian nửa đêm của hai ngày liên tiếp (ví dụ: 1980-01-31T00:00:00 và 1980-02-01T00:00:00) cho thời gian bắt đầu và kết thúc. Nếu thành phần không có thời lượng, hãy đặt thời gian kết thúc giống với thời gian bắt đầu. Biểu thị thời gian trong tệp kê khai dưới dạng chuỗi ISO 8601. Bạn nên giả định rằng thời gian kết thúc là riêng biệt (ví dụ: nửa đêm của ngày tiếp theo đối với các thành phần hằng ngày) để đơn giản hoá các giá trị ngày.

Ví dụ:

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

Tài liệu tham khảo về cấu trúc tệp kê khai

Cấu trúc JSON sau đây bao gồm tất cả các trường tệp kê khai có thể tải bảng lên. Tìm định nghĩa trường trong phần Định nghĩa trường tệp kê khai.

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

Định nghĩa trường tệp kê khai

tên

string

Tên của thành phần sẽ được tạo. name có định dạng "projects/*/assets/**" (ví dụ: projects/earthengine-legacy/assets/users/USER/ASSET).

nguồn

list

Danh sách các trường xác định thuộc tính của tệp bảng và các xe bên của tệp đó. Hãy xem các trường phần tử từ điển sources sau đây để biết thêm thông tin.

sources[i].uris

list

Danh sách URI của dữ liệu cần nhập. Hiện tại, chúng tôi chỉ hỗ trợ URI Google Cloud Storage. Mỗi URI phải được chỉ định theo định dạng sau: gs://bucket-id/object-id. Đối tượng chính phải là phần tử đầu tiên của danh sách và các sidecar được liệt kê sau đó. Mỗi URI có tiền tố là TableManifest.uri_prefix nếu được đặt.

sources[i].charset

string

Tên của bộ ký tự mặc định để dùng cho việc giải mã chuỗi. Nếu trống, theo mặc định, bộ ký tự "UTF-8" sẽ được giả định.

sources[i].maxErrorMeters

double

Lỗi tối đa được phép tính bằng mét khi biến đổi hình học giữa các hệ toạ độ. Nếu để trống, theo mặc định, lỗi tối đa là 1 mét.

sources[i].maxVertices

int32

Số đỉnh tối đa. Nếu không bằng 0, hình học sẽ được chia thành các phần không liên kết với nhau về không gian, mỗi phần nằm trong giới hạn này.

sources[i].crs

string

Mã CRS hoặc chuỗi WKT mặc định chỉ định hệ toạ độ tham chiếu của mọi hình học không có hệ toạ độ tham chiếu được chỉ định. Nếu bạn để trống, giá trị mặc định sẽ là EPSG:4326. Chỉ dành cho các nguồn CSV/TFRecord.

sources[i].geodesic

boolean

Chiến lược mặc định để diễn giải các cạnh trong hình học không có cạnh nào được chỉ định. Nếu giá trị là false, các cạnh sẽ thẳng trong phép chiếu. Nếu là true, các cạnh sẽ được uốn cong để đi theo đường ngắn nhất trên bề mặt Trái đất. Khi để trống, giá trị mặc định là false nếu CRS là hệ toạ độ chiếu. Chỉ dành cho các nguồn CSV/TFRecord.

sources[i].primaryGeometryColumn

string

Cột hình học để sử dụng làm hình học chính của hàng khi có nhiều cột hình học.

Nếu bạn để trống và có nhiều cột hình học, thì cột hình học đầu tiên sẽ được sử dụng. Chỉ dành cho các nguồn CSV/TFRecord.

sources[i].xColumn

string

Tên của cột toạ độ x dạng số để suy ra hình học của điểm. Nếu yColumn cũng được chỉ định và cả hai cột đều chứa giá trị số, thì cột hình học điểm sẽ được tạo bằng các giá trị x, y trong hệ toạ độ được cung cấp trong CRS. Nếu bạn để trống và CRS không chỉ định hệ toạ độ chiếu, thì giá trị mặc định sẽ là "kinh độ". Nếu để trống và CRS chỉ định hệ toạ độ chiếu, thì giá trị mặc định sẽ là một chuỗi trống và không tạo hình học điểm nào.

Cột hình học điểm được tạo sẽ có tên là {xColumn}_{yColumn}_N, trong đó N được thêm vào để {xColumn}_{yColumn}_N là duy nhất nếu cột có tên {xColumn}_{yColumn} đã tồn tại. Chỉ dành cho các nguồn CSV/TFRecord.

sources[i].yColumn

string

Tên của cột toạ độ y dạng số để suy luận hình học của điểm. Nếu xColumn cũng được chỉ định và cả hai cột đều chứa giá trị số, thì cột hình học điểm sẽ được tạo bằng các giá trị x, y trong hệ toạ độ được cung cấp trong CRS. Nếu để trống và CRS không chỉ định hệ toạ độ chiếu, giá trị mặc định sẽ là "vĩ độ". Nếu để trống và CRS chỉ định hệ toạ độ chiếu, thì giá trị mặc định sẽ là một chuỗi trống và không tạo hình học điểm nào.

Cột hình học điểm được tạo sẽ có tên là {xColumn}_{yColumn}_N, trong đó N được thêm vào để {xColumn}_{yColumn}_N là duy nhất nếu cột có tên {xColumn}_{yColumn} đã tồn tại. Chỉ dành cho các nguồn CSV/TFRecord.

sources[i].dateFormat

string

Định dạng để phân tích cú pháp các trường mã hoá ngày. Mẫu định dạng phải như mô tả trong tài liệu về lớp DateTimeFormat của Joda-Time. Nếu để trống, ngày sẽ được nhập dưới dạng chuỗi. Chỉ dành cho các nguồn CSV/TFRecord.

sources[i].csvDelimiter

string

Khi nhập tệp CSV, một ký tự duy nhất được dùng làm dấu phân cách giữa các giá trị cột trong một hàng. Nếu để trống, giá trị mặc định sẽ là ','. Chỉ dành cho nguồn CSV.

sources[i].csvQualifier

string

Khi nhập tệp CSV, một ký tự bao quanh các giá trị cột (còn gọi là "ký tự ngoặc kép"). Nếu để trống, giá trị mặc định sẽ là ". Chỉ dành cho nguồn CSV.

Nếu giá trị cột không được bao quanh bởi bộ hạn định, thì khoảng trắng ở đầu và cuối sẽ bị cắt bớt. Ví dụ:

    ..., test,...            <== this value is not qualified
becomes the string value:
    "test"                   <== leading whitespace is stripped
while:
    ...," test",...          <== this value IS qualified with quotes
becomes the string value:
    " test"                  <== leading whitespace remains!

uriPrefix

string

Tiền tố không bắt buộc được thêm vào tất cả uris được xác định trong tệp kê khai.

startTime

integer

Dấu thời gian liên kết với tài sản (nếu có). Giá trị này thường tương ứng với thời điểm thu thập dữ liệu. Đối với các thành phần tương ứng với một khoảng thời gian, chẳng hạn như giá trị trung bình trong một tháng hoặc một năm, dấu thời gian này tương ứng với thời điểm bắt đầu khoảng thời gian đó. Được chỉ định là giây và (không bắt buộc) nano giây kể từ thời gian bắt đầu (01/01/1970). Giả định là theo múi giờ UTC.

endTime

integer

Đối với những thành phần tương ứng với một khoảng thời gian, chẳng hạn như giá trị trung bình trong một tháng hoặc một năm, dấu thời gian này tương ứng với thời điểm kết thúc khoảng thời gian đó (không bao gồm). Được chỉ định là giây và (không bắt buộc) nano giây kể từ thời gian bắt đầu (01/01/1970). Giả định là theo múi giờ UTC.

các tài sản

dictionary

Một từ điển phẳng tuỳ ý gồm các cặp khoá-giá trị. Khoá phải là chuỗi và giá trị có thể là số hoặc chuỗi. Giá trị danh sách chưa được hỗ trợ cho các thành phần do người dùng tải lên.

columnDataTypeOverrides

dictionary

Nếu tính năng phát hiện kiểu tự động không hoạt động chính xác, hãy sử dụng trường này với tên cột làm khoá và một trong các hằng số sau làm giá trị: COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC, COLUMN_DATA_TYPE_LONG.

Các điểm hạn chế

Kích thước tệp kê khai JSON

Giới hạn kích thước tệp kê khai JSON là 10 MB. Nếu bạn có nhiều tệp cần tải lên, hãy cân nhắc các cách để giảm số lượng ký tự cần thiết để mô tả tập dữ liệu. Ví dụ: sử dụng trường uriPrefix để không cần cung cấp đường dẫn bộ chứa GCP cho mỗi URI trong danh sách uris. Nếu cần giảm kích thước thêm, hãy thử rút ngắn tên tệp.