Giờ đây, khi bạn đã quen thuộc với JavaScript, hãy tìm hiểu cách đưa các đối tượng và nguyên hàm JavaScript vào vùng chứa Earth Engine để gửi đến máy chủ và xử lý tại Google.
Chuỗi
Ví dụ: xác định một chuỗi, sau đó đặt chuỗi đó vào vùng chứa ee.String()
để gửi đến Earth Engine:
Trình soạn thảo mã (JavaScript)
// Define a string, then put it into an EE container. var aString = 'To the cloud!'; var eeString = ee.String(aString); print('Where to?', eeString);
Hãy coi ee.Thing
là một vùng chứa cho một đối tượng tồn tại trên máy chủ. Trong ví dụ này, chuỗi được xác định trước, sau đó được đưa vào vùng chứa. Bạn cũng có thể xác định vùng chứa và nội dung của vùng chứa cùng một lúc. Ví dụ:
Trình soạn thảo mã (JavaScript)
// Define a string that exists on the server. var serverString = ee.String('This is on the server.'); print('String on the server:', serverString);
Mặc dù đối số đầu tiên cho print()
chỉ là một chuỗi trên ứng dụng, nhưng đối số thứ hai thực sự được gửi đến máy chủ để đánh giá, sau đó được gửi lại.
Numbers
Sử dụng ee.Number()
để tạo các đối tượng số trên máy chủ. Ví dụ: sử dụng phương thức Math.E
JavaScript để tạo một giá trị không đổi trên máy chủ:
Trình soạn thảo mã (JavaScript)
// Define a number that exists on the server. var serverNumber = ee.Number(Math.E); print('e=', serverNumber);
Các phương thức ee.String()
và ee.Number()
là hàm khởi tạo. Hàm khởi tạo lấy đối số (và có thể là các tham số khác), đặt đối số đó vào một vùng chứa, rồi trả về vùng chứa và nội dung của vùng chứa đó dưới dạng một đối tượng Earth Engine mà bạn có thể thao tác trong mã của mình. Mọi hàm khởi tạo bắt đầu bằng ee
đều trả về một đối tượng Earth Engine.
Các phương thức trên đối tượng Earth Engine
Xin lưu ý rằng sau khi tạo một đối tượng Earth Engine, bạn phải sử dụng các phương thức Earth Engine để xử lý đối tượng đó. Trong ví dụ này, bạn không thể dùng Math.log()
của JavaScript để xử lý đối tượng Earth Engine đó. Bạn phải sử dụng phương thức tương đương được xác định cho một ee.Number
:
Trình soạn thảo mã (JavaScript)
// Use a built-in function to perform an operation on the number. var logE = serverNumber.log(); print('log(e)=', logE);
Trong ví dụ này, log()
là một phương thức cho đối tượng ee.Number
. (Sử dụng thẻ Tài liệu ở bên trái trình chỉnh sửa mã để xem danh sách tất cả các phương thức cho mọi loại đối tượng Earth Engine, ví dụ: ee.Number > log()). Lưu ý rằng các phương thức của đối tượng Earth Engine sẽ trả về các đối tượng Earth Engine khác.
Danh sách
Để chuyển danh sách JavaScript thành đối tượng ee.List
trên máy chủ, bạn có thể đặt một ký tự JavaScript vào một vùng chứa như với các số và chuỗi. Earth Engine cũng cung cấp các phương thức tiện lợi phía máy chủ để tạo chuỗi số. Ví dụ:
Trình soạn thảo mã (JavaScript)
// Make a sequence the hard way. var eeList = ee.List([1, 2, 3, 4, 5]); // Make a sequence the easy way! var sequence = ee.List.sequence(1, 5); print('Sequence:', sequence);
Vì các đối tượng ee.List
chỉ tồn tại trên máy chủ, hãy sử dụng các hàm do Earth Engine cung cấp để tương tác với các đối tượng này. Ví dụ: để lấy một mục ra khỏi danh sách, hãy dùng phương thức get()
của đối tượng ee.List
:
Trình soạn thảo mã (JavaScript)
// Use a method on an ee.List to extract a value. var value = sequence.get(2); print('Value at index 2:', value);
Truyền
Đôi khi, Earth Engine không biết loại đối tượng được trả về từ một phương thức. Là lập trình viên, bạn biết rằng biến value
trong ví dụ trước là một đối tượng số. Nhưng nếu cố gắng sử dụng phương thức add()
của một ee.Number
, bạn sẽ gặp lỗi như:
Điều này thường xảy ra với hàm get()
, có thể trả về mọi loại đối tượng Earth Engine. Để sửa lỗi này, hãy dùng hàm khởi tạo ee.Number
để truyền kết quả:
Trình soạn thảo mã (JavaScript)
// Cast the return value of get() to a number. print('No error:', ee.Number(value).add(3));
Từ điển
Bạn có thể tạo một Dictionary
Earth Engine từ một đối tượng JavaScript, chẳng hạn như với các chuỗi, số và danh sách. Tại thời điểm tạo, bạn có thể sử dụng chức năng JavaScript để khởi tạo đối tượng Earth Engine. Trong trường hợp này, ee.Dictionary
được tạo trực tiếp từ một đối tượng chữ JavaScript:
Trình soạn thảo mã (JavaScript)
// Make a Dictionary on the server. var dictionary = ee.Dictionary({ e: Math.E, pi: Math.PI, phi: (1 + Math.sqrt(5)) / 2 }); // Get some values from the dictionary. print('Euler:', dictionary.get('e')); print('Pi:', dictionary.get('pi')); print('Golden ratio:', dictionary.get('phi')); // Get all the keys: print('Keys: ', dictionary.keys());
Trong ví dụ này, hãy lưu ý rằng sau khi có ee.Dictionary
, bạn phải sử dụng các phương thức trên ee.Dictionary
để lấy các giá trị (không giống như từ điển JavaScript trong bài học trước). Cụ thể, get(key)
trả về giá trị được liên kết với key
. Vì loại đối tượng do get()
trả về có thể là bất kỳ loại nào, nếu bạn định làm bất cứ điều gì với đối tượng ngoài việc in đối tượng đó, bạn cần truyền đối tượng đó sang đúng loại. Ngoài ra, xin lưu ý rằng phương thức keys()
trả về một ee.List
.
Ngày
Đối tượng ngày là cách Earth Engine biểu thị thời gian. Như trong các ví dụ trước, điều quan trọng là phải phân biệt giữa đối tượng Date
JavaScript và đối tượng ee.Date
Earth Engine. Tạo một ee.Date
từ một chuỗi, từ một Date
JavaScript hoặc bằng cách sử dụng các phương thức tĩnh do lớp ee.Date
cung cấp. (Xem phần Ngày trong thẻ Tài liệu để biết thông tin chi tiết). Ví dụ này minh hoạ cách tạo ngày từ chuỗi hoặc ngày JavaScript biểu thị số mili giây kể từ nửa đêm ngày 1 tháng 1 năm 1970:
Trình soạn thảo mã (JavaScript)
// Define a date in Earth Engine. var date = ee.Date('2015-12-31'); print('Date:', date); // Get the current time using the JavaScript Date.now() method. var now = Date.now(); print('Milliseconds since January 1, 1970', now); // Initialize an ee.Date object. var eeNow = ee.Date(now); print('Now:', eeNow);
Ngày rất hữu ích cho việc lọc các bộ sưu tập, cụ thể là làm đối số cho phương thức filterDate()
. Hãy xem phần này trên trang Bắt đầu để biết thêm thông tin về cách sắp xếp bộ sưu tập.
Ngoại lệ: truyền tham số theo tên
Bạn có thể truyền các đối số đến các phương thức Earth Engine theo thứ tự, ví dụ: để tạo ee.Date
từ năm, tháng và ngày, bạn có thể truyền các tham số của phương thức tĩnh fromYMD()
theo thứ tự năm, tháng, ngày:
Trình soạn thảo mã (JavaScript)
var aDate = ee.Date.fromYMD(2017, 1, 13); print('aDate:', aDate);
Ngoài ra, bạn có thể truyền các tham số theo tên, theo bất kỳ thứ tự nào. Mặc dù có thể có nhiều mã hơn, nhưng điều này có thể cải thiện khả năng đọc và khả năng tái sử dụng. Để truyền tham số theo tên, hãy truyền một đối tượng JavaScript trong đó các khoá của đối tượng là tên của tham số phương thức và các giá trị là đối số cho phương thức. Ví dụ:
Trình soạn thảo mã (JavaScript)
var theDate = ee.Date.fromYMD({ day: 13, month: 1, year: 2017 }); print('theDate:', theDate);
Xin lưu ý rằng tên của các thuộc tính đối tượng (các khoá) khớp với tên được chỉ định trong ee.Date.fromYMD()
docs. Ngoài ra, hãy lưu ý rằng đối tượng được truyền dưới dạng đối số có thể được lưu trong một biến để sử dụng lại, như minh hoạ trong ví dụ về đối tượng JavaScript.
Giờ đây, bạn đã có đủ kiến thức cơ bản về JavaScript để bắt đầu sử dụng Earth Engine! Hãy xem trang Client vs. Server (Máy khách so với máy chủ) để biết thông tin giải thích chi tiết hơn về các đối tượng JavaScript so với Earth Engine.
Trong phần tiếp theo, hãy tìm hiểu thêm về Các khái niệm về lập trình hàm để sử dụng hiệu quả các vòng lặp for, điều kiện if/else và các lần lặp trong Earth Engine.