Earth Engine hỗ trợ các tài sản được hỗ trợ bởi GeoTIFF được tối ưu hoá trên đám mây (COG). Một lợi thế của các thành phần dựa trên COG là các trường không gian và siêu dữ liệu của hình ảnh sẽ được lập chỉ mục tại thời điểm tạo thành phần, giúp hình ảnh hoạt động hiệu quả hơn trong các bộ sưu tập. Hiệu suất của các tài sản được hỗ trợ bằng COG tương đương với hiệu suất của các tài sản được nhập trong các trường hợp sử dụng thông thường.
Xin lưu ý rằng một thành phần có thể được hỗ trợ bởi nhiều COG (ví dụ: có thể có một COG cho mỗi dải tần). Tuy nhiên, hệ thống không hỗ trợ việc sử dụng nhiều ô COG cho một dải tần.
(Ngoài ra, Earth Engine có thể tải trực tiếp hình ảnh từ COG trong Google Cloud Storage (tìm hiểu thêm).
Tuy nhiên, một hình ảnh được tải thông qua ee.Image.loadGeoTIFF và được thêm vào một bộ sưu tập hình ảnh sẽ yêu cầu đọc GeoTiff cho các thao tác lọc trên bộ sưu tập.)
Cách tạo một thành phần được COG hỗ trợ:
- Đặt tệp COG vào một bộ chứa GCS (xem Vị trí cho các khu vực được phép).
- Viết một tệp kê khai tải hình ảnh lên
- Sử dụng tiện ích dòng lệnh
earthengineđể gửi lệnh tải lên:
earthengine upload external_image --manifest my_manifest.json
Tệp kê khai hình ảnh mẫu có một Tileset
ImageManifest đơn giản nhất là chỉ có một Tileset. Nếu không có dải nào được chỉ định, thì tài sản kết quả sẽ chứa tất cả các dải của GeoTIFF với tên dải được mã hoá trong GeoTIFF (trong trường hợp này là "vis-red", "vis-green" và "vis-blue").
request = {
'imageManifest': {
'name': f'projects/{ee_project}/assets/cogdemo1',
'tilesets': [
{ 'id': '0', 'sources': [ { 'uris': [
'gs://ee-docs-demos/COG_demo.tif'] } ] }
],
'properties': {
'version': '1.1'
},
'startTime': '2016-01-01T00:00:00.000000000Z',
'endTime': '2016-12-31T15:01:23.000000000Z',
},
}
pprint(request)
Nhiều hơn một Tileset
Bạn có thể chỉ định một ImageManifest có nhiều Tileset, trong đó mỗi dải tần của tài sản kết quả được hỗ trợ bởi một trong các dải tần của Tileset bằng cách sử dụng các trường tilesetId và tilesetBandIndex. Điều này hữu ích trong trường hợp các dải tần khác nhau có độ phân giải hoặc kiểu dữ liệu khác nhau. Bạn có thể liệt kê các dải tần theo thứ tự bất kỳ từ Tileset bất kỳ hiện có. Trong ví dụ sau:
- "b4b3b2.tif" có tỷ lệ 10 m, trong khi "b5b6b7" có tỷ lệ 20 m.
- Thứ tự dải tần của thành phần kết quả được kết hợp từ các COG đầu vào (ví dụ: dải tần đầu ra 0 là từ
Tileset0, trong khi dải tần đầu ra 1 là từTileset1).
request = {
'imageManifest': {
'name': f'projects/{ee_project}/assets/cogdemo2',
'uriPrefix': 'gs://ee-docs-demos/external_image_demo/',
'tilesets': [
{ 'id': '0', 'sources': [ { 'uris': ['b4b3b2.tif'] } ] },
{ 'id': '1', 'sources': [ { 'uris': ['b5b6b7.tif'] } ] },
],
'bands': [
{ 'id': 'red', 'tilesetId': '0', 'tilesetBandIndex': 0 },
{ 'id': 'rededge3', 'tilesetId': '1', 'tilesetBandIndex': 2 },
{ 'id': 'rededge2', 'tilesetId': '1', 'tilesetBandIndex': 1 },
{ 'id': 'green', 'tilesetId': '0', 'tilesetBandIndex': 1 },
{ 'id': 'blue', 'tilesetId': '1', 'tilesetBandIndex': 0 },
{ 'id': 'rededge1', 'tilesetId': '0', 'tilesetBandIndex': 2 },
],
},
}
pprint(request)
Thông tin chi tiết về các thành phần được hỗ trợ bởi COG
Thông tin vị trí
Vị trí bộ chứa Cloud Storage phải là một trong những vị trí sau:
- Nhiều khu vực ở Hoa Kỳ
- Mọi khu vực kép ở Hoa Kỳ có chứa US-CENTRAL1
- Vùng US-CENTRAL1
Lớp lưu trữ
Lớp lưu trữ của vùng chứa phải là "Bộ nhớ chuẩn".
Quyền chia sẻ
Các ACL của những thành phần Earth Engine được COG hỗ trợ và dữ liệu cơ bản được quản lý riêng biệt. Khi chia sẻ tài sản được hỗ trợ bằng COG với cộng tác viên để đọc, chủ sở hữu có trách nhiệm đảm bảo rằng cả tài sản trên Earth Engine và các tệp COG cơ bản đều được cấp quyền đọc.
1. Cấp quyền đọc cho bộ chứa Google Cloud Storage
Để đọc các tài sản được hỗ trợ bằng COG, trước tiên, cộng tác viên phải có quyền đọc các tệp COG cơ sở trong bộ chứa Google Cloud Storage. Nếu không có các quyền này, Earth Engine sẽ không thể truy xuất dữ liệu cho các đối tượng đó. Nếu người dùng Earth Engine không thấy
dữ liệu trong Google Cloud Storage, thì Earth
Engine sẽ trả về một lỗi có dạng "Failed to load the GeoTIFF at
gs://my-bucket/my-object#123456" (Không tải được GeoTIFF tại ) (trong đó 123456 là thế hệ của
đối tượng).
Cụ thể, cộng tác viên phải có các quyền sau:
storage.buckets.gettrên nhóm (để truy xuất siêu dữ liệu và vị trí của nhóm, cho phép Earth Engine phân giải đúng nguồn của tài sản).storage.objects.gettrên vùng chứa (để đọc dữ liệu thành phần thực tế được COG hỗ trợ).
Các quyền này được cung cấp theo vai trò "Storage Legacy Bucket Reader" và "Storage Legacy Object Reader" tương ứng, trong số những vai trò khác.
Cách chỉ định các vai trò này cho cộng tác viên:
- Chuyển đến trang quyền đối với nhóm:
https://console.cloud.google.com/storage/browser/{MY-BUCKET};tab=permissions - Nhấp vào "CẤP QUYỀN TRUY CẬP"
- Thêm tất cả các đối tượng chính (ví dụ: người dùng, nhóm, tài khoản dịch vụ) cần được cấp quyền truy cập chỉ đọc.
- Chỉ định các vai trò sau:
- "Storage Legacy Bucket Reader" (cung cấp
storage.buckets.getvà các quyền đọc khác ở cấp bộ chứa). - "Storage Legacy Object Reader" (cung cấp
storage.objects.get). - (Ngoài ra, bạn có thể tạo một vai trò tuỳ chỉnh mới chỉ có các quyền
storage.buckets.getvàstorage.objects.getrồi chỉ định vai trò đó.)
- "Storage Legacy Bucket Reader" (cung cấp
- Lưu
2. Chia sẻ tài sản Earth Engine để đọc
Sau khi đảm bảo rằng cộng tác viên có các quyền cần thiết đối với bộ chứa và đối tượng GCS cơ bản, bạn cũng phải chia sẻ chính tài sản Earth Engine. Để biết thêm thông tin về cách thiết lập quyền đối với tài sản Earth Engine, hãy tham khảo hướng dẫn quản lý tài sản Earth Engine.
Thế hệ
Khi một tài sản được hỗ trợ bằng COG được tạo, Earth Engine sẽ đọc siêu dữ liệu của các tệp TIFF được chỉ định trong tệp kê khai và tạo một mục nhập trong kho tài sản. Mỗi URI được liên kết với mục nhập đó đều có thể có một thế hệ. Hãy xem tài liệu về việc quản lý phiên bản đối tượng để biết thông tin chi tiết về các thế hệ. Nếu bạn chỉ định một thế hệ, chẳng hạn như gs://foo/bar#123, Earth Engine sẽ lưu trữ chính xác URI đó. Nếu không chỉ định thế hệ, Earth Engine sẽ lưu trữ URI đó cùng với thế hệ của TIFF tại thời điểm ImportExternalImage được gọi.
Điều đó có nghĩa là nếu bất kỳ tệp TIFF nào bao gồm một tài sản bên ngoài trong GCS được cập nhật (do đó, thay đổi thế hệ của tệp), thì Earth Engine sẽ trả về lỗi "Không tải được GeoTIFF tại gs://my-bucket/my-object#123456" vì đối tượng dự kiến không còn tồn tại (trừ phi vùng chứa cho phép nhiều phiên bản đối tượng).
Chính sách này được thiết kế để giữ cho siêu dữ liệu của tài sản đồng bộ hoá với siêu dữ liệu của đối tượng.
Cấu hình
Về cách định cấu hình COG, TIFF PHẢI là:
Được lát, trong đó kích thước ô là:
- 256x256
- 512x512
- 1024x1024
- 2048x2048
Sắp xếp sao cho tất cả IFD đều ở đầu.
Để có hiệu suất tốt nhất:
- Sử dụng kích thước thẻ thông tin từ 512x512 trở lên.
- Bao gồm thông tin tổng quan về lũy thừa của 2.
Tuỳ thuộc vào các trường hợp sử dụng mà bạn dự định, lựa chọn tạo "INTERLEAVE" có thể ảnh hưởng đến hiệu suất. Bạn nên sử dụng chế độ xen kẽ BĂNG trong mọi trường hợp.
Hãy xem trang này để biết thêm thông tin chi tiết về cấu hình được tối ưu hoá.
Lệnh gdal_translate sau đây sẽ chuyển đổi một raster thành GeoTIFF được tối ưu hoá cho đám mây, nén zstd, xen kẽ băng tần, sẽ hoạt động hiệu quả trong Earth Engine:
gdal_translate in.tif out.tif \
-co COPY_SRC_OVERVIEWS=YES \
-co TILED=YES \
-co BLOCKXSIZE=512 \
-co BLOCKYSIZE=512 \
-co COMPRESS=ZSTD \
-co ZSTD_LEVEL=22 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS
Bạn có thể giảm thêm kích thước tệp đầu ra bằng cách chỉ định một trình dự đoán (-co PREDICTOR=2 cho các kiểu dữ liệu số nguyên và -co PREDICTOR=3 cho các kiểu dữ liệu dấu phẩy động).
Đối với người dùng có GDAL >= 3.11, trình điều khiển COG có thể tạo ra các tệp mà không cần lo lắng về việc tạo và duy trì các bản tổng quan.
gdal_translate in.tif out.tif \
-of COG \
-co OVERVIEWS=IGNORE_EXISTING \
-co COMPRESS=ZSTD \
-co LEVEL=22 \
-co PREDICTOR=2 \
-co INTERLEAVE=BAND \
-co NUM_THREADS=ALL_CPUS \
Tạo tài sản được hỗ trợ bằng Cloud GeoTiff bằng API REST
Lưu ý: REST API có các tính năng mới và nâng cao có thể không phù hợp với tất cả người dùng. Nếu mới sử dụng Earth Engine, bạn nên bắt đầu bằng hướng dẫn về JavaScript.
Để tạo một thành phần được hỗ trợ bằng COG bằng API REST, hãy gửi yêu cầu POST đến ImportExternalImageđiểm cuối Earth Engine.
Như minh hoạ trong phần sau, yêu cầu này phải được uỷ quyền để tạo một tài sản trong thư mục người dùng của bạn.
Bắt đầu một phiên được uỷ quyền
Để có thể tạo một tài sản Earth Engine trong thư mục người dùng, bạn cần có thể xác thực danh tính của mình khi đưa ra yêu cầu. Bạn có thể dùng thông tin đăng nhập từ trình xác thực Earth Engine để bắt đầu một AuthorizedSession.
Sau đó, bạn có thể dùng AuthorizedSession để gửi yêu cầu đến Earth Engine.
import ee
import json
from pprint import pprint
from google.auth.transport.requests import AuthorizedSession
ee.Authenticate() # or !earthengine authenticate --auth_mode=gcloud
# Specify the cloud project you want associated with Earth Engine requests.
ee_project = 'your-project'
session = AuthorizedSession(
ee.data.get_persistent_credentials().with_quota_project(ee_project)
)
Nội dung yêu cầu
Nội dung yêu cầu là một phiên bản của ImageManifest.
Đây là nơi bạn chỉ định đường dẫn đến COG, cùng với các thuộc tính hữu ích khác.
Hãy xem hướng dẫn này để biết thông tin chi tiết về cách định cấu hình ImageManifest. Bạn có thể xác định một hoặc
nhiều Tileset, mỗi hỗ trợ một hoặc nhiều dải tần. Đối với ImportExternalImage, mỗi Tileset chỉ hỗ trợ tối đa một ImageSource.
Hãy xem tài liệu này để biết thông tin chi tiết về cách xuất giá vốn hàng bán.
Gửi yêu cầu
Gửi yêu cầu POST đến điểm cuối projects.images.importExternal của Earth Engine.
url = f'https://earthengine.googleapis.com/v1alpha/projects/{ee_project}/image:importExternal'
response = session.post(
url = url,
data = json.dumps(request)
)
pprint(json.loads(response.content))
Chạy trong Google Colab
Xem nguồn trên GitHub