Hãy bắt đầu bằng phép tính cần thiết để tạo một dải cho thấy những pixel mà dữ liệu của Hansen và cộng sự cho thấy cả sự mất mát và tăng trưởng.
Tập dữ liệu của Hansen và cộng sự có một dải tần số mà các pixel là 1 khi xảy ra hiện tượng mất và 0 trong trường hợp khác (loss
) và một dải tần số là 1 khi xảy ra hiện tượng tăng và 0 trong trường hợp khác (gain
). Để tạo một dải tần số mà các pixel trong cả dải tần số loss
và gain
đều có giá trị 1, bạn có thể sử dụng phương thức logic and()
trên hình ảnh. Phương thức and()
được gọi như image1.and(image2)
và trả về một hình ảnh có các pixel là 1 khi cả image1 và image2 đều là 1, và 0 ở những nơi khác:
Trình soạn thảo mã (JavaScript)
// Load the data and select the bands of interest. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var gainImage = gfc2014.select(['gain']); // Use the and() method to create the lossAndGain image. var gainAndLoss = gainImage.and(lossImage); // Show the loss and gain image. Map.addLayer(gainAndLoss.updateMask(gainAndLoss), {palette: 'FF00FF'}, 'Gain and Loss');
Kết quả, khi phóng to Arkansas ở chế độ xem vệ tinh, sẽ có dạng như Hình 1.

Khi kết hợp ví dụ này với kết quả từ phần trước, giờ đây, bạn có thể tạo lại hình ảnh từ đầu hướng dẫn:
Trình soạn thảo mã (JavaScript)
// Displaying forest, loss, gain, and pixels where both loss and gain occur. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var gainImage = gfc2014.select(['gain']); var treeCover = gfc2014.select(['treecover2000']); // Use the and() method to create the lossAndGain image. var gainAndLoss = gainImage.and(lossImage); // Add the tree cover layer in green. Map.addLayer(treeCover.updateMask(treeCover), {palette: ['000000', '00FF00'], max: 100}, 'Forest Cover'); // Add the loss layer in red. Map.addLayer(lossImage.updateMask(lossImage), {palette: ['FF0000']}, 'Loss'); // Add the gain layer in blue. Map.addLayer(gainImage.updateMask(gainImage), {palette: ['0000FF']}, 'Gain'); // Show the loss and gain image. Map.addLayer(gainAndLoss.updateMask(gainAndLoss), {palette: 'FF00FF'}, 'Gain and Loss');
Định lượng sự thay đổi của rừng trong một khu vực quan tâm
Giờ đây, khi bạn đã quen thuộc hơn với các dải trong tập dữ liệu của Hansen và cộng sự, chúng ta có thể sử dụng các khái niệm đã học cho đến nay để tính toán số liệu thống kê về mức tăng và giảm diện tích rừng ở một khu vực mà bạn quan tâm. Để làm việc này, chúng ta cần sử dụng dữ liệu vectơ (điểm, đường và đa giác). Một tập dữ liệu vectơ được biểu thị dưới dạng FeatureCollection
trong Earth Engine.
(Tìm hiểu thêm về tập hợp đối tượng và cách nhập dữ liệu vectơ.)
Trong phần này, chúng ta sẽ so sánh tổng diện tích rừng bị mất ở Cộng hoà Congo vào năm 2012 với diện tích rừng bị mất ở các khu vực được bảo vệ của quốc gia này cùng thời điểm.
Như bạn đã tìm hiểu trong hướng dẫn về Earth Engine API, phương thức chính để tính toán số liệu thống kê trong một vùng hình ảnh là reduceRegion()
. (Tìm hiểu thêm về cách giảm các vùng hình ảnh.) Ví dụ: giả sử chúng ta muốn tính số lượng pixel ước tính để biểu thị tình trạng mất rừng trong khoảng thời gian nghiên cứu. Để làm việc đó, hãy cân nhắc đoạn mã sau:
Trình soạn thảo mã (JavaScript)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); // Sum the values of forest loss pixels in the Congo Republic. var stats = lossImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30 }); print(stats);
Ví dụ này sử dụng bộ giảm tốc ee.Reducer.sum()
để tính tổng các giá trị của các pixel trong lossImage
trong đối tượng congo
. Vì lossImage
bao gồm các pixel có giá trị là 1 hoặc 0 (tương ứng với mất dữ liệu hoặc không mất dữ liệu), nên tổng các giá trị này tương đương với số lượng pixel mất dữ liệu trong khu vực.
Rất tiếc, việc chạy tập lệnh như hiện tại sẽ dẫn đến một lỗi như:
Số lượng pixel tối đa mặc định trong reduceRegion()
là 10 triệu. Thông báo lỗi này cho biết Cộng hoà Congo có khoảng 383 triệu điểm ảnh Landsat. Thật may là reduceRegion()
nhận nhiều tham số, trong đó có một tham số (maxPixels
) cho phép bạn kiểm soát số lượng pixel được dùng trong quá trình tính toán. Việc chỉ định tham số này sẽ giúp quá trình tính toán thành công:
Trình soạn thảo mã (JavaScript)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); // Sum the values of forest loss pixels in the Congo Republic. var stats = lossImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30, maxPixels: 1e9 }); print(stats);
Bằng cách mở rộng đối tượng được in vào bảng điều khiển, hãy quan sát rằng kết quả là 4897933 pixel rừng bị mất. Bạn có thể dọn dẹp bản in trong bảng điều khiển một chút bằng cách gắn nhãn đầu ra và nhận kết quả quan tâm từ từ điển do reduceRegion()
trả về:
Trình soạn thảo mã (JavaScript)
print('pixels representing loss: ', stats.get('loss'));
Tính toán diện tích pixel
Bạn sắp trả lời được câu hỏi về diện tích rừng bị mất ở Cộng hoà Congo và diện tích rừng bị mất trong các khu vực được bảo vệ. Phần còn lại là chuyển đổi các pixel thành diện tích thực tế. Việc chuyển đổi này rất quan trọng vì chúng ta không nhất thiết phải biết kích thước của các pixel đầu vào thành reduceRegion()
. Để giúp tính toán diện tích, Earth Engine có phương thức ee.Image.pixelArea()
. Phương thức này tạo ra một hình ảnh trong đó giá trị của mỗi pixel là diện tích của pixel đó tính bằng mét vuông. Nhân hình ảnh tổn thất với hình ảnh khu vực này rồi cộng kết quả lại với nhau sẽ cho chúng ta một thước đo về khu vực:
Trình soạn thảo mã (JavaScript)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = countries.filter(ee.Filter.eq('country_na', 'Rep of the Congo')); // Get the forest loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossImage = gfc2014.select(['loss']); var areaImage = lossImage.multiply(ee.Image.pixelArea()); // Sum the values of forest loss pixels in the Congo Republic. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo, scale: 30, maxPixels: 1e9 }); print('pixels representing loss: ', stats.get('loss'), 'square meters');
Giờ đây, kết quả là 4.372.575.052 mét vuông bị mất trong thời gian nghiên cứu.
Giờ đây, bạn đã sẵn sàng trả lời câu hỏi ở đầu phần này: diện tích rừng bị mất ở Cộng hoà Congo năm 2012 là bao nhiêu và bao nhiêu diện tích trong số đó nằm trong các khu vực được bảo vệ?
Trình soạn thảo mã (JavaScript)
// Load country features from Large Scale International Boundary (LSIB) dataset. var countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Subset the Congo Republic feature from countries. var congo = ee.Feature( countries .filter(ee.Filter.eq('country_na', 'Rep of the Congo')) .first() ); // Subset protected areas to the bounds of the congo feature // and other criteria. Clip to the intersection with congo. var protectedAreas = ee.FeatureCollection('WCMC/WDPA/current/polygons') .filter(ee.Filter.and( ee.Filter.bounds(congo.geometry()), ee.Filter.neq('IUCN_CAT', 'VI'), ee.Filter.neq('STATUS', 'proposed'), ee.Filter.lt('STATUS_YR', 2010) )) .map(function(feat){ return congo.intersection(feat); }); // Get the loss image. var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015'); var lossIn2012 = gfc2014.select(['lossyear']).eq(12); var areaImage = lossIn2012.multiply(ee.Image.pixelArea()); // Calculate the area of loss pixels in the Congo Republic. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: congo.geometry(), scale: 30, maxPixels: 1e9 }); print( 'Area lost in the Congo Republic:', stats.get('lossyear'), 'square meters' ); // Calculate the area of loss pixels in the protected areas. var stats = areaImage.reduceRegion({ reducer: ee.Reducer.sum(), geometry: protectedAreas.geometry(), scale: 30, maxPixels: 1e9 }); print( 'Area lost in protected areas:', stats.get('lossyear'), 'square meters' );
Kết quả cho thấy trong số 348.036.295 mét vuông rừng bị mất ở Cộng hoà Congo vào năm 2012, 11.880.976 mét vuông nằm trong các khu bảo tồn, như được thể hiện trong bảng Cơ sở dữ liệu thế giới về các khu bảo tồn.
Điểm khác biệt duy nhất giữa tập lệnh này và tập lệnh ngay trước đó là việc bổ sung thông tin về khu vực được bảo vệ và thay đổi tập lệnh từ xem xét tổn thất tổng thể sang xem xét tổn thất trong năm 2012. Việc này đòi hỏi 2 thay đổi. Đầu tiên, có một hình ảnh lossIn2012
mới có giá trị 1 khi ghi nhận tổn thất vào năm 2012, nếu không thì là 0. Thứ hai, vì tên của ban nhạc khác (lossyear
thay vì loss
), nên tên thuộc tính phải thay đổi trong câu lệnh in.
Trong phần tiếp theo, chúng ta sẽ khám phá một số phương pháp nâng cao để tính toán và lập biểu đồ tình trạng mất rừng cho mỗi năm, thay vì chỉ một năm như chúng ta đã làm trong phần này.