Hướng dẫn Bắt đầu này là cách nhanh chóng để bắt đầu lập trình bằng API Earth Engine JavaScript. Để tìm hiểu về JavaScript và các bài tập chuyên sâu hơn về API Earth Engine, hãy xem hướng dẫn. Để biết kiểu lập trình JavaScript được đề xuất, hãy xem Hướng dẫn về kiểu JavaScript của Google.
Google Earth Engine cho phép người dùng chạy thuật toán trên hình ảnh và vectơ được tham chiếu địa lý được lưu trữ trên cơ sở hạ tầng của Google. API Google Earth Engine cung cấp một thư viện các hàm có thể áp dụng cho dữ liệu để hiển thị và phân tích. Danh mục dữ liệu công khai của Earth Engine chứa một lượng lớn các tập dữ liệu vectơ và hình ảnh được cung cấp công khai. Bạn cũng có thể tạo thành phần riêng tư trong thư mục cá nhân của người dùng.
Cách sử dụng các tài liệu này
Tài liệu về Earth Engine được thiết kế cho những người quen thuộc với việc phân tích dữ liệu không gian địa lý. Tài liệu này chủ yếu được sắp xếp theo loại dữ liệu. Ví dụ: thanh điều hướng bên trái chứa các đường liên kết đến các phần hoặc trang về các loại dữ liệu quan trọng, chẳng hạn như Image
, ImageCollection
, Feature
, FeatureCollection
, Geometry
, Reducer
, Chart
, Join
và Array
. Hướng dẫn này chỉ mô tả đủ về các loại này để bạn bắt đầu. Ngoài ra, còn có các phần về học máy, các thuật toán chuyên biệt hoặc dành riêng cho cảm biến (ví dụ: các thuật toán Landsat), ứng dụng công khai, quản lý dữ liệu (tài sản) và thông tin chi tiết quan trọng về cách hoạt động nội bộ của Earth Engine.
Trước khi tìm hiểu bất kỳ nội dung nào trong số đó, hãy bắt đầu từ đây!
Trình soạn thảo mã
Trình soạn thảo mã là một môi trường tương tác để phát triển các ứng dụng Earth Engine (Hình 1). Bảng điều khiển ở giữa cung cấp trình soạn thảo mã JavaScript. Phía trên trình chỉnh sửa là các nút để lưu tập lệnh hiện tại, chạy tập lệnh và xoá bản đồ. Nút Get Link (Lấy đường liên kết) sẽ tạo một URL duy nhất cho tập lệnh trong thanh địa chỉ. Bản đồ trong bảng điều khiển dưới cùng chứa các lớp do tập lệnh thêm. Ở trên cùng là một hộp tìm kiếm cho tập dữ liệu và địa điểm. Bảng điều khiển bên trái chứa các ví dụ về mã, tập lệnh bạn đã lưu, tài liệu tham khảo API có thể tìm kiếm và trình quản lý tài sản cho dữ liệu riêng tư. Bảng điều khiển bên phải có một trình kiểm tra để truy vấn bản đồ, một bảng điều khiển đầu ra và một trình quản lý cho các tác vụ chạy trong thời gian dài. Nút trợ giúp Hướng dẫn về Trình chỉnh sửa mã và Hướng dẫn nhận trợ giúp.
ở trên cùng bên phải chứa các đường liên kết đến Hướng dẫn này và các tài nguyên khác để yêu cầu trợ giúp. Tìm hiểu thêm trong
Mở và chạy mã trong Trình soạn thảo mã
Các bước dưới đây minh hoạ cách mở Earth Engine và thực thi một tập lệnh tuỳ chỉnh hiển thị hình ảnh. Để có kết quả tốt nhất, bạn nên cài đặt phiên bản Chrome mới nhất, trình duyệt web của Google, có sẵn tại đây.
- Mở Trình soạn thảo mã Earth Engine tại đây: code.earthengine.google.com.
- Chuyển đến thẻ Scripts (Tập lệnh) ở ngoài cùng bên trái của Trình soạn thảo mã. Tại đó, bạn sẽ thấy một tập hợp các tập lệnh mẫu truy cập, hiển thị và phân tích dữ liệu Earth Engine.
- Trong phần "Bộ sưu tập hình ảnh", hãy chọn ví dụ "Composite đã lọc". Bạn sẽ thấy một tập lệnh xuất hiện trong bảng điều khiển trung tâm. Nhấn nút Run (Chạy) để thực thi tập lệnh. Ví dụ về Hình ảnh tổng hợp đã lọc sẽ chọn các hình ảnh Landsat 7 giao nhau hoặc nằm trong ranh giới của Colorado và Utah. Sau đó, công cụ này sẽ hiển thị một màu tổng hợp thực sự của các hình ảnh đã chọn. Các mẫu này giới thiệu cho bạn về các phương thức thường dùng, chẳng hạn như
filter()
,clip()
vàMap.addLayer()
.
Cấu trúc dữ liệu Earth Engine
Hai cấu trúc dữ liệu địa lý cơ bản nhất trong Earth Engine là Image
và Feature
tương ứng với các loại dữ liệu đường quét và vectơ. Hình ảnh được tạo thành từ các dải và một từ điển thuộc tính.
Các tính năng bao gồm một Geometry
và một từ điển thuộc tính. Một ngăn xếp hình ảnh (ví dụ: một chuỗi thời gian hình ảnh) được xử lý bằng ImageCollection
. Một tập hợp các tính năng sẽ do FeatureCollection
xử lý. Các cấu trúc dữ liệu cơ bản khác trong Earth Engine bao gồm Dictionary
, List
, Array
, Date
, Number
và String
(tìm hiểu thêm về các loại dữ liệu cơ bản trong hướng dẫn này. Điều quan trọng cần nhớ là đây đều là các đối tượng phía máy chủ và không được thao tác theo cách giống như các đối tượng JavaScript phía máy khách (tìm hiểu thêm).
Thuật toán Earth Engine
Có một số cách để chạy các thao tác trong API:
- Gọi các phương thức được đính kèm vào đối tượng.
- Gọi thuật toán.
- Gọi các hàm cụ thể của Trình soạn thảo mã.
- Xác định các hàm mới.
Thẻ Docs (Tài liệu) của Trình soạn thảo mã liệt kê các phương thức của từng lớp API. Ví dụ: lớp Image
có một phương thức add()
:
Trình soạn thảo mã (JavaScript)
var image3 = image1.add(image2);
Phương thức này thêm các dải của image2
vào các dải của image1
.
Danh mục ee.Algorithms
chứa danh sách các thuật toán hiện được hỗ trợ để xử lý chuyên biệt hoặc theo miền cụ thể. Ví dụ: để tạo lớp địa hình từ Mô hình độ cao kỹ thuật số (DEM) đầu vào:
Trình soạn thảo mã (JavaScript)
var terrainImage = ee.Algorithms.Terrain(dem);
Các hàm cụ thể của Trình soạn thảo mã bao gồm các phương thức Map
và Export
. Các phương thức này lần lượt kiểm soát cách thêm lớp vào bảng điều khiển bản đồ hoặc xuất sang Google Drive. Bạn cũng có thể tạo hàm trong JavaScript bằng cách sử dụng
Trình soạn thảo mã (JavaScript)
var myFunction = function(args) { // do something return something; };
Như minh hoạ trong phần ánh xạ, các hàm do người dùng xác định rất hữu ích để tạo chức năng tuỳ chỉnh hoặc sửa đổi các phần tử của một tập hợp bằng cách sử dụng:
Trình soạn thảo mã (JavaScript)
var collection2 = collection1.map(aFunction);
Các phần sau đây minh hoạ các khái niệm này cho nhiều trường hợp sử dụng đơn giản.
"Xin chào thế giới!" JavaScript
In thông tin ra bảng điều khiển là một nhiệm vụ cơ bản để nhận thông tin về một đối tượng, hiển thị kết quả số của một phép tính, hiển thị siêu dữ liệu đối tượng hoặc giúp gỡ lỗi. Ví dụ mang tính biểu tượng "Hello World!" (Xin chào thế giới!) trong Trình soạn thảo mã là:
Trình soạn thảo mã (JavaScript)
print('Hello world!');
Sao chép dòng này vào trình soạn thảo mã của Trình soạn thảo mã rồi nhấp vào Run (Chạy). Lưu ý rằng kết quả sẽ hiển thị trong thẻ Console (Bảng điều khiển), ở bên phải Trình soạn thảo mã. Để biết ví dụ phù hợp hơn về cảm biến từ xa, nội dung sau đây sẽ in siêu dữ liệu của hình ảnh Landsat 8:
Trình soạn thảo mã (JavaScript)
print(ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'));
Hãy kiểm tra kỹ kết quả trong bảng điều khiển để xem siêu dữ liệu có sẵn cho hình ảnh Landsat.
Thêm dữ liệu vào bản đồ
Ngoài việc in thông tin vào bảng điều khiển, việc thêm dữ liệu vào Map
là cách để trực quan hoá dữ liệu địa lý. Hãy sử dụng Map.addLayer()
để thực hiện việc đó. Trong ví dụ sau, một Image
được tạo bản sao (cách tìm các hình ảnh này sẽ được đề cập sau) bằng ee.Image()
, được thêm vào bản đồ bằng Map.addLayer()
và bản đồ được căn giữa hình ảnh:
Trình soạn thảo mã (JavaScript)
// Load an image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); // Center the map on the image. Map.centerObject(image, 9); // Display the image. Map.addLayer(image);
Tham số thứ hai của Map.centerObject()
là mức thu phóng, trong đó số càng cao thì tỷ lệ càng lớn (thu phóng càng nhiều). Các tham số cho hàm Map
được mô tả chi tiết trong tài liệu tham khảo API có thể truy cập được từ thẻ Tài liệu. Nếu hình ảnh không ưng ý, hãy định cấu hình các thông số hiển thị bằng một đối số bổ sung cho Map.addLayer()
. Ví
dụ:
Trình soạn thảo mã (JavaScript)
// Load the image from the archive. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); // Define visualization parameters in an object literal. var vizParams = {bands: ['B5', 'B4', 'B3'], min: 0.02, max: 0.4, gamma: 1.3}; // Center the map on the image and display. Map.centerObject(image, 9); Map.addLayer(image, vizParams, 'Landsat 8 false color');
Hãy quan sát rằng các tham số trực quan được xác định bằng một giá trị cố định của đối tượng, bao gồm danh sách các dải tần số cần hiển thị, giá trị độ phản chiếu tối thiểu và tối đa cũng như giá trị gamma. (Tìm hiểu thêm về các dải Landsat tại đây. Tìm hiểu thêm về hình ảnh trực quan tại đây).
Sử dụng Map.addLayer()
để thêm các đối tượng và tập hợp đối tượng vào bản đồ. Ví dụ:
Trình soạn thảo mã (JavaScript)
var counties = ee.FeatureCollection('TIGER/2018/Counties'); Map.addLayer(counties, {}, 'counties');
Tìm hình ảnh, bộ sưu tập hình ảnh và bộ sưu tập tính năng
Bạn có thể tìm thấy hình ảnh, bộ sưu tập hình ảnh và bộ sưu tập đối tượng bằng cách tìm kiếm trong Danh mục dữ liệu Earth Engine. Ví dụ: nhập "Landsat 8" vào trường tìm kiếm sẽ cho ra kết quả trong danh sách các tập dữ liệu đường quét. (Danh sách đầy đủ các tập dữ liệu Earth Engine có tại Danh mục dữ liệu Earth Engine). Nhấp vào tên tập dữ liệu để xem nội dung mô tả ngắn gọn, thông tin về phạm vi thời gian có sẵn, nhà cung cấp dữ liệu và mã nhận dạng tập hợp. Nhấp vào nút Import (Nhập) để tự động tạo mục Imports (Nhập) ở đầu tập lệnh với một biến cho tập hợp này.
Ngoài ra, bạn có thể sao chép mã nhận dạng bộ sưu tập rồi dán vào mã của mình. Ví dụ: chọn kết quả TOA cấp 1 của lượt tìm kiếm "Landsat 8" rồi sao chép mã nhận dạng như sau:
Trình soạn thảo mã (JavaScript)
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
Vì đây là một bộ sưu tập nhiều hình ảnh trải dài trên bề mặt đất của Trái Đất, nên để tìm một hình ảnh riêng lẻ trong bộ sưu tập, bạn cần phải lọc để thu hẹp phạm vi tìm kiếm. Ngoài ra, bạn có thể giảm bộ sưu tập hình ảnh xuống còn một hình ảnh bằng cách sử dụng kỹ thuật kết hợp và kỹ thuật tạo ảnh ghép. Tìm hiểu thêm về việc lọc và kết hợp (xem phần Giảm) trong các phần tiếp theo.
Bạn cũng có thể sử dụng các bộ sưu tập tính năng thông qua Danh mục dữ liệu. Mức độ đại diện của các tập hợp này nhỏ hơn so với tập hợp hình ảnh, nhưng bạn sẽ thấy các ranh giới quốc tế, điều tra dân số, lưu vực sông và khu bảo tồn, v.v. Tìm hiểu thêm về cách nhập tập dữ liệu vectơ của riêng bạn tại đây.
Lọc và sắp xếp
Thường thì bạn cần lọc một bộ sưu tập theo không gian và/hoặc thời gian để giới hạn số lượng kết quả. Ví dụ: hãy xem xét nhiệm vụ sắp xếp bộ sưu tập cảnh Landsat 8 để tìm một cảnh không có mây cho San Francisco. Trước tiên, bạn cần xác định khu vực quan tâm. Điểm thường hữu ích cho việc đó. Kích hoạt thẻ Inspector (Trình kiểm tra) ở bên phải Trình soạn thảo mã và nhấp vào gần giữa khu vực bạn quan tâm, sao chép toạ độ từ thẻ Inspector (Trình kiểm tra), sau đó tạo Point
bằng cách sử dụng:
Trình soạn thảo mã (JavaScript)
var point = ee.Geometry.Point(-122.262, 37.8719);
Tạo ngày bắt đầu và ngày kết thúc:
Trình soạn thảo mã (JavaScript)
var start = ee.Date('2014-06-01'); var finish = ee.Date('2014-10-01');
Lọc tập hợp Landsat 8 bằng điểm và ngày, sau đó sắp xếp bằng thuộc tính siêu dữ liệu (được phát hiện trong quá trình kiểm tra siêu dữ liệu cảnh Landsat 8):
Trình soạn thảo mã (JavaScript)
var filteredCollection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(point) .filterDate(start, finish) .sort('CLOUD_COVER', true);
Bạn có thể in và kiểm tra bộ sưu tập này một cách an toàn. (Nếu bộ sưu tập có quá nhiều hình ảnh, thì việc in sẽ rất chậm, hết thời gian chờ hoặc trả về lỗi). Hãy quan sát rằng các hình ảnh trong bộ sưu tập là List
được lưu trữ trong thuộc tính "features" (tính năng) của ImageCollection
. Bạn có thể sao chép mã nhận dạng của bất kỳ hình ảnh nào trong bộ sưu tập vào hàm khởi tạo Image
như trên. Ngoài ra, hãy lấy hình ảnh đầu tiên (mức độ che phủ của đám mây thấp nhất):
Trình soạn thảo mã (JavaScript)
var first = filteredCollection.first();
Truy cập vào chức năng lọc Earth Engine đầy đủ bằng cách sử dụng filter()
với ee.Filter
làm đối số. (Các phương thức filterBounds()
và filterDate()
dùng ở trên là lối tắt). Ví dụ: mã sau đây tạo một Filter
, sử dụng Filter
đó để lọc FeatureCollection
và hiển thị kết quả:
Trình soạn thảo mã (JavaScript)
// Load a feature collection. var featureCollection = ee.FeatureCollection('TIGER/2016/States'); // Filter the collection. var filteredFC = featureCollection.filter(ee.Filter.eq('NAME', 'California')); // Display the collection. Map.setCenter(-119.604, 37.798, 6); Map.addLayer(filteredFC, {}, 'California');
Toán học về dải
Thực hiện các phép toán trên hình ảnh bằng các phương thức Image
. Điều này có thể bao gồm việc kết hợp lại băng tần (chỉ số phổ), chênh lệch hình ảnh hoặc các phép toán như nhân với một hằng số. Ví dụ: tính toán sự khác biệt giữa các hình ảnh Chỉ số thực vật khác biệt chuẩn hoá (NDVI) cách nhau 20 năm:
Trình soạn thảo mã (JavaScript)
// This function gets NDVI from Landsat 5 imagery. var getNDVI = function(image) { return image.normalizedDifference(['B4', 'B3']); }; // Load two Landsat 5 images, 20 years apart. var image1 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_19900604'); var image2 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_20100611'); // Compute NDVI from the scenes. var ndvi1 = getNDVI(image1); var ndvi2 = getNDVI(image2); // Compute the difference in NDVI. var ndviDifference = ndvi2.subtract(ndvi1);
Lưu ý việc sử dụng function
do người dùng xác định trong ví dụ này. Tìm hiểu thêm về các hàm trong phần tiếp theo.
Ánh xạ (việc cần làm thay vì vòng lặp for)
Sử dụng map()
để lặp lại các mục trong một bộ sưu tập. (Vòng lặp For KHÔNG phải là cách phù hợp để thực hiện việc đó trong Earth Engine và bạn nên tránh sử dụng). Bạn có thể áp dụng hàm map()
cho ImageCollection
, FeatureCollection
hoặc List
và chấp nhận function
làm đối số. Đối số của hàm là một phần tử của tập hợp mà hàm được ánh xạ. Điều này hữu ích khi sửa đổi mọi phần tử của bộ sưu tập theo cùng một cách, chẳng hạn như thêm. Ví dụ: mã sau đây sẽ thêm một dải NDVI vào mọi hình ảnh trong ImageCollection
:
Trình soạn thảo mã (JavaScript)
// This function gets NDVI from Landsat 8 imagery. var addNDVI = function(image) { return image.addBands(image.normalizedDifference(['B5', 'B4'])); }; // Load the Landsat 8 TOA data, filter by location and date. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-06-01', '2014-10-01'); // Map the function over the collection. var ndviCollection = collection.map(addNDVI);
Một nhiệm vụ phổ biến khác là thêm một thuộc tính mới (hoặc "thuộc tính" hoặc "trường") vào các tính năng trong FeatureCollection
. Trong ví dụ sau, thuộc tính mới là một phép tính liên quan đến hai thuộc tính hiện có:
Trình soạn thảo mã (JavaScript)
// This function creates a new property that is the sum of two existing properties. var addField = function(feature) { var sum = ee.Number(feature.get('property1')).add(feature.get('property2')); return feature.set({'sum': sum}); }; // Create a FeatureCollection from a list of Features. var features = ee.FeatureCollection([ ee.Feature(ee.Geometry.Point(-122.4536, 37.7403), {property1: 100, property2: 100}), ee.Feature(ee.Geometry.Point(-118.2294, 34.039), {property1: 200, property2: 300}), ]); // Map the function over the collection. var featureCollection = features.map(addField); // Print a selected property of one Feature. print(featureCollection.first().get('sum')); // Print the entire FeatureCollection. print(featureCollection);
Lưu ý rằng bạn phải truyền sang ee.Number
để giá trị thuộc tính được nhận dạng là số nhằm sử dụng phương thức add()
). Bạn có thể thay đổi loại của bộ sưu tập bằng map()
. Ví dụ:
Trình soạn thảo mã (JavaScript)
// This function returns the image centroid as a new Feature. var getGeom = function(image) { return ee.Feature(image.geometry().centroid(), {foo: 1}); }; // Load a Landsat 8 TOA collection. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-06-01', '2014-10-01'); // Map the function over the ImageCollection. var featureCollection = ee.FeatureCollection(collection.map(getGeom)); // Print the collection. print(featureCollection);
Lưu ý thuộc tính đã thêm (foo
) cho mỗi đặc điểm được tạo từ tâm hình ảnh. Trong dòng cuối cùng, hoạt động truyền khiến tập hợp kết quả có thể nhận dạng được dưới dạng FeatureCollection
.
Giảm
Rút gọn là cách tổng hợp dữ liệu theo thời gian, không gian, dải, mảng và các cấu trúc dữ liệu khác trong Earth Engine. Có nhiều phương thức cho mục đích này trong API. Ví dụ: để tạo một thành phần kết hợp của ImageCollection
, hãy sử dụng reduce()
để giảm số lượng hình ảnh trong bộ sưu tập xuống còn một Hình ảnh. Một ví dụ đơn giản là tạo ảnh tổng hợp trung bình của 5 cảnh ít mây nhất trong tập hợp Landsat 8 được xác định trước đó:
Trình soạn thảo mã (JavaScript)
// Load a Landsat 8 TOA collection. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') // Filter by date and location. .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-01-01', '2014-12-31') // Sort by increasing cloudiness. .sort('CLOUD_COVER'); // Compute the median of each pixel for each band of the 5 least cloudy scenes. var median = collection.limit(5).reduce(ee.Reducer.median());
Việc giảm cũng là cách để lấy số liệu thống kê của một hình ảnh trong các vùng do Feature
hoặc FeatureCollection
xác định. Giả sử nhiệm vụ là tính toán giá trị trung bình của pixel trong một khu vực quan tâm. Hãy sử dụng reduceRegion()
cho mục đích này. Ví dụ:
Trình soạn thảo mã (JavaScript)
// Load and display a Landsat TOA image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], max: 0.3}); // Create an arbitrary rectangle as a region and display it. var region = ee.Geometry.Rectangle(-122.2806, 37.1209, -122.0554, 37.2413); Map.addLayer(region); // Get a dictionary of means in the region. Keys are bandnames. var mean = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region, scale: 30 });
Tìm hiểu thêm về trình giảm trong tài liệu về Trình giảm.
Mặt nạ
Mỗi pixel trong ee.Image
đều có cả giá trị và mặt nạ trong khoảng từ 0 (không có dữ liệu) đến 1. Các pixel được che (trong đó mặt nạ==0) được coi là không có dữ liệu. Các pixel có mặt nạ 0 < mask ≤ 1 có một giá trị, nhưng giá trị này được tính trọng số theo mặt nạ để tính toán số.
Bạn có thể làm cho các pixel trở nên trong suốt hoặc loại trừ các pixel đó khỏi quá trình phân tích bằng cách sử dụng mặt nạ. Các pixel được che khi giá trị mặt nạ bằng 0. Tiếp tục ví dụ về sự khác biệt của hình ảnh, hãy sử dụng mặt nạ để hiển thị các khu vực có NDVI tăng và giảm trong khoảng thời gian chênh lệch:
// This function gets NDVI from Landsat 5 imagery. var getNDVI = function(image) { return image.normalizedDifference(['B4', 'B3']); }; // Load two Landsat 5 images, 20 years apart. var image1 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_19900604'); var image2 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_20100611'); // Compute NDVI from the scenes. var ndvi1 = getNDVI(image1); var ndvi2 = getNDVI(image2); // Compute the difference in NDVI. var ndviDifference = ndvi2.subtract(ndvi1); // Load the land mask from the SRTM DEM. var landMask = ee.Image('CGIAR/SRTM90_V4').mask(); // Update the NDVI difference mask with the land mask. var maskedDifference = ndviDifference.updateMask(landMask); // Display the masked result. var vizParams = {min: -0.5, max: 0.5, palette: ['FF0000', 'FFFFFF', '0000FF']}; Map.setCenter(-122.2531, 37.6295, 9); Map.addLayer(maskedDifference, vizParams, 'NDVI difference');
Trong ví dụ này, hãy lưu ý rằng mặt nạ của chênh lệch NDVI được cập nhật bằng mặt nạ đất bằng updateMask()
. Thao tác này sẽ đặt mặt nạ của các pixel chênh lệch NDVI thành mặt nạ đất bất cứ khi nào mặt nạ chênh lệch NDVI khác 0.
Việc che giấu cũng hữu ích để loại trừ dữ liệu khỏi bản phân tích. Hãy xem xét ví dụ về reduceRegion()
trong phần Giảm. Giả sử nhiệm vụ là tính toán NDVI trung bình theo mùa cho hạt Santa Clara, California, ngoại trừ các pixel có mây. Ví dụ sau đây minh hoạ nhiều khái niệm: lọc, ánh xạ, giảm và sử dụng mặt nạ đám mây:
Trình soạn thảo mã (JavaScript)
// This function gets NDVI from a Landsat 8 image. var addNDVI = function(image) { return image.addBands(image.normalizedDifference(['B5', 'B4'])); }; // This function masks cloudy pixels. var cloudMask = function(image) { var clouds = ee.Algorithms.Landsat.simpleCloudScore(image).select(['cloud']); return image.updateMask(clouds.lt(10)); }; // Load a Landsat collection, map the NDVI and cloud masking functions over it. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point([-122.262, 37.8719])) .filterDate('2014-03-01', '2014-05-31') .map(addNDVI) .map(cloudMask); // Reduce the collection to the mean of each pixel and display. var meanImage = collection.reduce(ee.Reducer.mean()); var vizParams = {bands: ['B5_mean', 'B4_mean', 'B3_mean'], min: 0.02, max: 0.4}; Map.addLayer(meanImage, vizParams, 'mean'); // Load a region in which to compute the mean and display it. var counties = ee.FeatureCollection('TIGER/2018/Counties'); var santaClara = ee.Feature(counties.filter(ee.Filter.eq('NAME', 'Santa Clara')).first()); Map.addLayer(santaClara); // Get the mean of NDVI in the region. var mean = meanImage.select(['nd_mean']).reduceRegion({ reducer: ee.Reducer.mean(), geometry: santaClara.geometry(), scale: 30 }); // Print mean NDVI for the region. mean.get('nd_mean').evaluate(function(val){ print('Santa Clara spring mean NDVI:', val); });