Orman Değişimini Nicel Olarak Belirleme

Hansen ve diğerlerinin verilerinin hem kayıp hem de kazanç gösterdiği pikselleri gösteren bir bant oluşturmak için gereken hesaplamayla başlayalım.

Hansen ve diğerleri veri kümesinde, kaybın gerçekleştiği yerlerde pikselleri 1, aksi takdirde 0 olan bir bant (loss) ve kazancın gerçekleştiği yerlerde pikselleri 1, aksi takdirde 0 olan bir bant (gain) bulunur. Hem loss hem de gain bantlarındaki piksellerin 1 olduğu bir bant oluşturmak için görüntülerde and() mantıksal yöntemini kullanabilirsiniz. and() yöntemi, image1.and(image2) şeklinde çağrılır ve hem image1 hem de image2'nin 1 olduğu yerlerde piksellerin 1, diğer yerlerde ise 0 olduğu bir resim döndürür:

Kod Düzenleyici (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');

Uydu görünümüyle Arkansas'a yakınlaştırılmış sonuç, Şekil 1'deki gibi görünmelidir.

Loss Arkansas
1. şekil. Arkansas'taki orman kaybı ve kazanımıyla ilgili pikseller.

Bu örneği önceki bölümdeki sonuçla birleştirdiğimizde, eğitimin başındaki şekli yeniden oluşturabiliriz:

Kod Düzenleyici (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');

İlgilenilen Bölgedeki Orman Değişimini Nicel Olarak Belirleme

Hansen ve diğerleri veri kümesindeki bantları daha iyi tanıdığınıza göre, şimdiye kadar öğrendiğimiz kavramları kullanarak ilgilenilen bir bölgedeki orman kazanımı ve kaybı hakkında istatistikler hesaplayabiliriz. Bunun için vektör verilerini (noktalar, çizgiler ve çokgenler) kullanmamız gerekir. Vektör veri kümeleri, Earth Engine'de FeatureCollection olarak gösterilir. (Özellik koleksiyonları ve vektör verilerini içe aktarma hakkında daha fazla bilgi edinin.)

Bu bölümde, 2012 yılında Kongo Cumhuriyeti'nde meydana gelen toplam orman kaybı ile aynı dönemde ülkenin koruma altındaki bölgelerinde meydana gelen orman kaybı miktarı karşılaştırılacaktır.

Earth Engine API eğitiminde öğrendiğiniz gibi, bir görüntü bölgesindeki istatistikleri hesaplamanın temel yöntemi reduceRegion()'dir. (Görüntü bölgelerini azaltma hakkında daha fazla bilgi edinin.) Örneğin, çalışma döneminde orman kaybını temsil ettiği tahmin edilen piksel sayısını hesaplamak istediğimizi varsayalım. Bu amaçla aşağıdaki kodu kullanabilirsiniz:

Kod Düzenleyici (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);

Bu örnekte, ee.Reducer.sum() küçültücü işlevi, congo özelliğindeki lossImage içinde yer alan piksellerin değerlerini toplamak için kullanılır. lossImage, sırasıyla kayıp veya kayıp olmama durumunu gösteren 1 ya da 0 değerine sahip piksellerden oluştuğu için bu değerlerin toplamı, bölgedeki kayıp piksel sayısına eşittir.

Maalesef komut dosyasını olduğu gibi çalıştırmak şu hataya neden olur:

reduceRegion()'daki varsayılan maksimum piksel sayısı 10 milyondur. Bu hata mesajı, Kongo Cumhuriyeti'nin yaklaşık 383 milyon Landsat pikseli içerdiğini gösterir. Neyse ki reduceRegion() birçok parametre alır. Bu parametrelerden biri (maxPixels), hesaplamada kaç piksel kullanılacağını kontrol etmenizi sağlar. Bu parametrenin belirtilmesi, hesaplamanın başarılı olmasını sağlar:

Kod Düzenleyici (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);

Konsola yazdırılan nesneyi genişleterek sonucun 4897933 piksel orman kaybı olduğunu gözlemleyin. Çıktıyı etiketleyerek ve reduceRegion() tarafından döndürülen sözlükten ilgilendiğiniz sonucu alarak konsoldaki çıktıyı biraz temizleyebilirsiniz:

Kod Düzenleyici (JavaScript)

print('pixels representing loss: ', stats.get('loss'));

Piksel Alanlarını Hesaplama

Kongo Cumhuriyeti'nde ne kadar alanın kaybedildiği ve bunun ne kadarının koruma altındaki alanlarda olduğu sorusunu yanıtlamaya neredeyse hazırsınız. Geriye kalan kısım ise pikselleri gerçek alana dönüştürmektir. Bu dönüştürme önemlidir. Çünkü reduceRegion()'ya girilen piksellerin boyutunu her zaman bilemeyiz. Earth Engine, alanları hesaplamaya yardımcı olmak için ee.Image.pixelArea() yöntemini kullanır. Bu yöntem, her pikselin değerinin metrekare cinsinden piksel alanı olduğu bir görüntü oluşturur. Kayıp görüntüsünü bu alan görüntüsüyle çarpıp sonucu topladığımızda alan ölçüsü elde ederiz:

Kod Düzenleyici (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');

Sonuç, çalışma süresi boyunca 4.372.575.052 metrekarelik bir kayıp olduğunu gösteriyor.

Artık bu bölümün başındaki soruyu yanıtlamaya hazırsınız: 2012'de Kongo Cumhuriyeti'nde ne kadar orman alanı kaybedildi ve bunun ne kadarı korunan alanlardaydı?

Kod Düzenleyici (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'
);

Çıktı, 2012'de Kongo Cumhuriyeti'nde kaybedilen 348.036.295 metrekarelik ormanın 11.880.976 metrekaresinin korunan alanlarda olduğunu gösteriyor. Bu bilgi, World Database on Protected Areas tablosunda yer alıyor.

Bu komut dosyası ile bir önceki komut dosyası arasındaki tek fark, korunan alan bilgilerinin eklenmesi ve komut dosyasının genel kayba bakmak yerine 2012'deki kayba bakacak şekilde değiştirilmesidir. Bu işlem için iki değişiklik yapılması gerekiyordu. İlk olarak, 2012'de kayıp kaydedilen yerlerde 1, aksi takdirde 0 değerine sahip yeni bir lossIn2012 resmi var. İkinci olarak, grubun adı farklı olduğundan (loss yerine lossyear) yazdırma ifadesinde mülk adının değişmesi gerekiyordu.

Sonraki bölümde, bu bölümde yaptığımız gibi yalnızca bir yıl yerine her yıl için orman kaybını hesaplama ve grafik oluşturmaya yönelik bazı gelişmiş yöntemleri inceleyeceğiz.