Hỗ trợ Python
Thư viện ứng dụng Python của Earth Engine tương thích với các phiên bản Python mà Google Cloud hỗ trợ. Dịch vụ hỗ trợ được cập nhật hằng năm theo lịch phát hành phiên bản điểm của Python (PEP 602; Trạng thái của các phiên bản Python). Việc sử dụng các phiên bản Python không được hỗ trợ có thể gây ra lỗi xác thực, hành vi không mong muốn hoặc lỗi của một số thao tác nhất định.
Tuỳ chọn cài đặt
Nếu bạn đang sử dụng Google Colab, thì thư viện ứng dụng Earth Engine Python phiên bản mới nhất đã được cài đặt (thông qua pip). Hãy thử sổ tay sau để bắt đầu sử dụng Earth Engine và Colab:
Nếu bạn không sử dụng Colab, bạn có thể cài đặt và cập nhật thư viện ứng dụng Earth Engine theo cách thủ công trên hệ thống bằng conda (nên dùng) hoặc pip:
Nhập gói
Gói API Python được gọi là ee
. Bạn phải nhập và khởi tạo thư viện này cho mỗi phiên và tập lệnh Python mới:
import ee
Xác thực và khởi chạy
Trước khi sử dụng thư viện ứng dụng Earth Engine Python, bạn cần xác thực và sử dụng thông tin xác thực thu được để khởi chạy ứng dụng Python. Chạy:
ee.Authenticate()
Thao tác này sẽ chọn chế độ xác thực phù hợp nhất cho môi trường của bạn và nhắc bạn xác nhận quyền truy cập cho các tập lệnh. Để khởi chạy, bạn cần cung cấp một dự án mà bạn sở hữu hoặc có quyền sử dụng. Dự án này sẽ được dùng để chạy tất cả các hoạt động của Earth Engine:
ee.Initialize(project='my-project')
Hãy xem hướng dẫn xác thực để khắc phục sự cố và tìm hiểu thêm về các chế độ xác thực cũng như dự án trên Google Cloud.
Xin chào mọi người!
Dưới đây là một tập lệnh ngắn để kiểm tra xem bạn đã sẵn sàng làm việc với Earth Engine hay chưa.
import ee ee.Authenticate() ee.Initialize(project='my-project') print(ee.String('Hello from the Earth Engine servers!').getInfo())
Cú pháp
Cả API Python và JavaScript đều truy cập vào cùng một chức năng phía máy chủ, nhưng biểu thức phía máy khách (tìm hiểu thêm về máy khách so với máy chủ) có thể khác nhau do sự khác biệt về cú pháp ngôn ngữ. Bảng sau đây bao gồm danh sách các điểm khác biệt thường gặp về cú pháp mà bạn sẽ gặp phải khi làm việc với API Python so với API JavaScript.
Thuộc tính | JavaScript | Python |
---|---|---|
Định nghĩa hàm |
function myFun(arg) { return arg; } var myFun = function(arg) { return arg; }; |
def my_fun(arg): return arg |
Liên kết hàm ẩn danh |
var foo = col.map(function(arg) { return arg; }); |
foo = col.map(lambda arg: arg) |
Định nghĩa biến |
var myVar = 'var'; |
my_var = 'var' |
Toán tử logic |
var match = such.and(that); var match = such.or(that); var match = such.not(that); |
match = such.And(that) match = such.Or(that) match = such.Not(that) |
Chuỗi phương thức nhiều dòng |
var foo = my.really() .reallyLong() .methodChain(); |
foo = (my.really() .reallyLong() .methodChain()) |
Khoá từ điển |
var dic = {'key': value}; var dic = {key: value}; |
dic = {'key': value} |
Truy cập vào đối tượng từ điển |
var value = dic.key; var value = dic['key']; |
value = dic['key'] |
Định nghĩa đối số hàm |
// Positional arguments. var foo = fun(argX, argY, argZ); // Keyword arguments object. var foo = fun({y: argY}); |
# Positional arguments. foo = fun(arg_x, arg_y, arg_z) # Keyword arguments dictionary. foo = fun(**{'y': arg_y}) # Keyword arguments. foo = fun(x=arg_x, z=arg_z) |
Boolean |
var t = true; var f = false; |
t = True f = False |
Giá trị rỗng |
var na = null; |
na = None |
Bình luận |
// |
# |
Đối tượng ngày
Xác định và thao tác với các đối tượng ngày phía máy khách bằng mô-đun
datetime
. Đưa mô-đun vào tập lệnh:
import datetime
Chuyển đổi ee.Date
thành ngày phía máy khách:
ee_date = ee.Date('2020-01-01') py_date = datetime.datetime.utcfromtimestamp(ee_date.getInfo()['value']/1000.0)
Chuyển đổi ngày phía máy khách thành ee.Date:
py_date = datetime.datetime.utcnow() ee_date = ee.Date(py_date)
Đang xuất dữ liệu
Để xuất dữ liệu bằng API Python, bạn cần sử dụng mô-đun ee.batch
. Mô-đun này cung cấp giao diện cho các hàm Export
. Truyền các đối số tham số như bạn làm với API JavaScript, lưu ý đến các điểm khác biệt được ghi chú trong bảng cú pháp ở trên. Bạn phải bắt đầu các tác vụ xuất bằng cách gọi phương thức start()
trên một tác vụ đã xác định. Truy vấn trạng thái của một tác vụ bằng cách gọi phương thức status()
trên tác vụ đó. Ví dụ sau đây minh hoạ cách xuất đối tượng ee.Image
.
Tạo tác vụ xuất:
task = ee.batch.Export.image.toDrive(image=my_image, # an ee.Image object. region=my_geometry, # an ee.Geometry object. description='mock_export', folder='gdrive_folder', fileNamePrefix='mock_export', scale=1000, crs='EPSG:4326')
Bắt đầu một tác vụ xuất:
task.start()
Kiểm tra trạng thái của tác vụ xuất:
task.status()
Kết quả của task.status()
là một từ điển chứa thông tin như trạng thái của tác vụ và mã nhận dạng của tác vụ đó.
{ 'state': 'READY', 'description': 'my_export_task', 'creation_timestamp_ms': 1647567508236, 'update_timestamp_ms': 1647567508236, 'start_timestamp_ms': 0, 'task_type': 'EXPORT_IMAGE', 'id': '56TVJIZABUMTD5CJ5YHTMYK4', 'name': 'projects/earthengine-legacy/operations/56TVJIZABUMTX5CJ5HHTMYK4' }
Bạn có thể theo dõi tiến trình của tác vụ bằng trường state
. Hãy xem trang Môi trường xử lý để biết
danh sách các giá trị state
và thêm thông tin về vòng đời tác vụ.
In đối tượng
Việc in một đối tượng Earth Engine trong Python sẽ in yêu cầu được chuyển đổi tuần tự cho đối tượng đó, chứ không phải chính đối tượng đó. Hãy tham khảo trang Máy khách so với máy chủ để tìm hiểu lý do.
Gọi getInfo()
trên các đối tượng Earth Engine để lấy đối tượng mong muốn từ máy chủ đến ứng dụng:
# Load a Landsat image. img = ee.Image('LANDSAT/LT05/C02/T1_L2/LT05_034033_20000913') # Print image object WITHOUT call to getInfo(); prints serialized request instructions. print(img) # Print image object WITH call to getInfo(); prints image metadata. print(img.getInfo())
getInfo()
là một thao tác đồng bộ, nghĩa là việc thực thi các biểu thức
sau lệnh gọi getInfo()
sẽ bị chặn cho đến khi kết quả được trả về cho ứng dụng.
Ngoài ra, các yêu cầu về nhiều dữ liệu hoặc phép tính tốn kém có thể trả về lỗi và/hoặc treo. Nhìn chung, phương pháp hay nhất là xuất kết quả, sau đó nhập kết quả đó vào một tập lệnh mới để phân tích thêm.
Đối tượng giao diện người dùng
Mô-đun ui
của Earth Engine chỉ có sẵn thông qua Trình chỉnh sửa mã API JavaScript. Sử dụng thư viện của bên thứ ba cho các thành phần trên giao diện người dùng trong Python. Các thư viện như geemap, Folium và ipyleaflet cung cấp chế độ hiển thị bản đồ tương tác, trong khi bạn có thể lập biểu đồ bằng Matplotlib, Altair hoặc seaborn, v.v. Xem các ví dụ trong
sổ tay thiết lập Earth Engine trong Colab để sử dụng geemap và Matplotlib.
Python trong Hướng dẫn dành cho nhà phát triển
Mã Python được đưa vào toàn bộ Hướng dẫn dành cho nhà phát triển Earth Engine. Bạn có thể xem các ví dụ về mã (nếu có) bằng cách nhấp vào thẻ "Colab (Python)" ở đầu các khối mã.
Các trang hướng dẫn cũng có thể có các nút ở đầu trang để chạy trang dưới dạng sổ tay Colab hoặc xem trên GitHub. Bạn có thể chạy các ví dụ về mã Python bằng Google Colab. Bản đồ tương tác và khám phá đối tượng được thư viện geemap
xử lý. Cả thư viện ứng dụng Python Earth Engine và geemap
đều được cài đặt sẵn trong Colab.
Thiết lập Earth Engine
Để chạy mã Python, bạn cần nhập thư viện Earth Engine, xác thực và khởi chạy. Các lệnh sau đây được dùng trong các ví dụ (xem trang Xác thực và khởi chạy để biết các phương án thay thế).
import ee ee.Authenticate() ee.Initialize(project='my-project')
Khám phá tương tác bằng geemap
Thư viện geemap
được dùng để hiển thị thẻ thông tin bản đồ và in bản trình bày đa dạng của các đối tượng Earth Engine.
Thư viện này lần lượt phụ thuộc vào ipyleaflet
và eerepr
cho các tính năng này.
Thư viện geemap
và các phần phụ thuộc của thư viện này được cài đặt sẵn trong Google Colab;
hãy nhập thư viện này vào mỗi phiên.
import geemap.core as geemap
Bạn có thể xem các lớp dữ liệu địa lý của Earth Engine, chẳng hạn như ee.Image
và ee.FeatureCollection
, bằng đối tượng geemap.Map
.
Trước tiên, hãy xác định đối tượng bản đồ. Sau đó, hãy thêm các lớp vào hoặc thay đổi khung nhìn của lớp đó.
# Initialize a map object. m = geemap.Map() # Define an example image. img = ee.Image.random() # Add the image to the map. m.add_layer(img, None, 'Random image') # Display the map (you can call the object directly if it is the final line). display(m)