Su geçiş katmanı, üç su oluşumu sınıfı (su olmayan, mevsimlik su ve kalıcı su) arasındaki değişiklikleri ve geçici su için iki ek sınıfı (geçici kalıcı ve geçici mevsimlik) yakalar.
Eğitimin bu bölümünde:
- Su geçişini görselleştirmek için harita katmanı ekleme,
- Belirli bir ilgi alanı bölgesi içindeki her geçiş sınıfının alanını toplamak için gruplandırılmış bir küçültücü oluşturun ve
- Geçiş sınıfına göre alanı özetleyen bir grafik oluşturun.
Temel Görselleştirme
Senaryonun Öğe Listesi bölümüne, transition
adlı tek bantlı bir görüntü nesnesi oluşturan aşağıdaki ifadeyi ekleyin:
Kod Düzenleyici (JavaScript)
var transition = gsw.select('transition');
GSW resimleri, geçiş sınıfı numaraları ve adlarıyla ilgili meta verileri ve geçiş sınıflarını stilize etmek için varsayılan bir paleti içerir. Geçiş katmanı haritaya eklendiğinde bu görselleştirme parametreleri otomatik olarak kullanılır.
Senaryonuzun Harita Katmanları bölümünün en altına, geçiş sınıflarını gösteren yeni bir harita katmanı ekleyen aşağıdaki ifadeyi ekleyin:
Kod Düzenleyici (JavaScript)
Map.setCenter(105.26, 11.2134, 9); // Mekong River Basin, SouthEast Asia Map.addLayer({ eeObject: transition, name: 'Transition classes (1984-2015)', });
Komut dosyasını çalıştırdığınızda geçiş katmanı gösterilir.

Geçiş sınıfları için harita anahtarı şöyledir:
Değer | Sembol | Şirket |
---|---|---|
0 | Su değil | |
1 | Kalıcı | |
2 | Yeni kalıcı | |
3 | Kalıcı olarak kayboldu | |
4 | Sezonluk | |
5 | Yeni sezonluk | |
6 | Kayıp mevsimlik | |
7 | Sezonluktan kalıcıya geçiş | |
8 | Kalıcıdan dönemsel | |
9 | Geçici kalıcı | |
10 | Geçici sezonluk |
Geçiş sınıfına göre alanı özetleme
Bu bölümde, ilgi alanını tanımlamak için geometri çokgen aracını tekrar kullanacağız. Yeni bir konumu analiz etmek istiyorsanız birleştirilmiş alanlardan sonuç almamak için önce çizdiğiniz orijinal poligonu seçip silmeniz gerekir. Geometrileri değiştirme hakkında bilgi edinmek için Kod Düzenleyici dokümanlarının Geometri araçları bölümüne bakın.
Bu örnekte, Mekong Nehri deltasında yeni bir poligon çizeceğiz.

Bir resmin bölümleri tarafından kaplanan alanı hesaplamak için geçiş resmi nesnesine, ee.Image.pixelArea yöntemini kullanarak her pikselin boyutunu metrekare cinsinden tanımlayan ek bir bant ekleyeceğiz.
Kod Düzenleyici (JavaScript)
var area_image_with_transition_class = ee.Image.pixelArea().addBands(transition);
Elde edilen resim nesnesi (area_image_with_transition_class
), iki bantlı bir resimdir. İlk bant, metrekare birimleriyle alan bilgilerini (
ee.Image.pixelArea
code>
yöntemiyle üretilir) içerir. İkinci bant ise geçiş sınıfı bilgilerini içerir.
Ardından, ilgi alanı içindeki sınıf geçişlerini (roi
)
ee.Image.reduceRegion
yöntemi ve her geçiş sınıfındaki alanı toplamak için kullanılan bir
gruplandırılmış küçültücü
ile özetliyoruz:
Kod Düzenleyici (JavaScript)
var reduction_results = area_image_with_transition_class.reduceRegion({ reducer: ee.Reducer.sum().group({ groupField: 1, groupName: 'transition_class_value', }), geometry: roi, scale: 30, bestEffort: true, }); print('reduction_results', reduction_results);
Konsol sekmesi çıktısında artık reduction_results
gösteriliyor. Alan özeti verilerini görmek için ağacı birkaç düzey genişletmeniz gerektiğini unutmayın.

reduction_results
nesnesi, her geçiş sınıfının kapsadığı alanla ilgili bilgiler içerse de okunması kolay değildir. Bir sonraki bölümde
sonuçları görüntülemeyi kolaylaştıracağız.
Özet grafiği oluşturma
Bu bölümde, sonuçları daha iyi özetlemek için bir grafik oluşturacağız. Başlamak için öncelikle aşağıdaki alanlarla birlikte geçiş sınıflarının listesini çıkarırız:
Kod Düzenleyici (JavaScript)
var roi_stats = ee.List(reduction_results.get('groups'));
Gruplandırılmış azaltıcının (reduction_results
) sonucu, sözlük listesi içeren bir sözlüktür.
Listedeki her geçiş sınıfı için bir sözlük bulunur.
Bu ifadeler, gruplandırılmış indirgeyici sonuçlarını sözlükten çıkarmak için
ee.Dictionary.get
yöntemini kullanır ve sonuçları ee.List veri türüne dönüştürür. Böylece, tek tek sözlüklere erişebiliriz.
Kod Düzenleyici'nin grafik oluşturma işlevlerinden yararlanmak için gerekli bilgileri içeren bir FeatureCollection oluşturacağız. Bunu yapmak için önce iki arama sözlüğü ve iki yardımcı işlev oluştururuz. Arama sözlüklerini oluşturan kod, "Hesaplamalar" bölümünün en üstüne aşağıdaki şekilde yerleştirilebilir:
Kod Düzenleyici (JavaScript)
////////////////////////////////////////////////////////////// // Calculations ////////////////////////////////////////////////////////////// // Create a dictionary for looking up names of transition classes. var lookup_names = ee.Dictionary.fromLists( ee.List(gsw.get('transition_class_values')).map(numToString), gsw.get('transition_class_names') ); // Create a dictionary for looking up colors of transition classes. var lookup_palette = ee.Dictionary.fromLists( ee.List(gsw.get('transition_class_values')).map(numToString), gsw.get('transition_class_palette') );
lookup_names
sözlüğü, geçiş sınıfı değerlerini adlarıyla ilişkilendirirken lookup_palette
sözlüğü, geçiş sınıfı değerlerini renk tanımlarıyla ilişkilendirir.
İki yardımcı işlev, "Yardımcı işlevler" adlı yeni bir kod bölümüne yerleştirilebilir.
Kod Düzenleyici (JavaScript)
////////////////////////////////////////////////////////////// // Helper functions ////////////////////////////////////////////////////////////// // Create a feature for a transition class that includes the area covered. function createFeature(transition_class_stats) { transition_class_stats = ee.Dictionary(transition_class_stats); var class_number = transition_class_stats.get('transition_class_value'); var result = { transition_class_number: class_number, transition_class_name: lookup_names.get(class_number), transition_class_palette: lookup_palette.get(class_number), area_m2: transition_class_stats.get('sum') }; return ee.Feature(null, result); // Creates a feature without a geometry. } // Create a JSON dictionary that defines piechart colors based on the // transition class palette. // https://developers.google.com/chart/interactive/docs/gallery/piechart function createPieChartSliceDictionary(fc) { return ee.List(fc.aggregate_array("transition_class_palette")) .map(function(p) { return {'color': p}; }).getInfo(); } // Convert a number to a string. Used for constructing dictionary key lists // from computed number objects. function numToString(num) { return ee.Number(num).format(); }
createFeature
işlevi, bir sözlük (alanı ve su geçiş sınıfını içeren) alır ve grafik oluşturmaya uygun bir özellik döndürür.
createPieChartSliceDictionary
işlevi, pasta grafiğin beklediği biçimi kullanarak geçiş sınıflarına karşılık gelen bir renk listesi oluşturur.
Ardından, ee.List.map işlevini kullanarak yardımcı işlevi listedeki her bir öğeye uygulamak için createFeature
işlevini listedeki her sözlüğe (roi_stats
) uygulayacağız.
Kod Düzenleyici (JavaScript)
var transition_fc = ee.FeatureCollection(roi_stats.map(createFeature)); print('transition_fc', transition_fc);
Artık grafikte göstermek istediğimiz özellikleri içeren bir FeatureCollection'ımız olduğuna göre bir grafik nesnesi oluşturup konsola yazdırabiliriz.
Kod Düzenleyici (JavaScript)
// Add a summary chart. var transition_summary_chart = ui.Chart.feature.byFeature({ features: transition_fc, xProperty: 'transition_class_name', yProperties: ['area_m2', 'transition_class_number'] }) .setChartType('PieChart') .setOptions({ title: 'Summary of transition class areas', slices: createPieChartSliceDictionary(transition_fc), sliceVisibilityThreshold: 0 // Don't group small slices. }); print(transition_summary_chart);
slices
seçeneği, geçiş sınıfları için tanımlanan varsayılan paleti (daha önce harita anahtarı tablosunda gösterilmişti) kullanacak şekilde pasta grafiği dilimlerini renklendirir.
sliceVisibilityThreshold
seçeneği, küçük dilimlerin "diğer" kategorisinde gruplandırılmasını önler.
Elde edilen grafik, Şekil 13'te gösterilene benzer olmalıdır.

Son Komut Dosyası
Bu bölümün tamamı için senaryo:
Kod Düzenleyici (JavaScript)
////////////////////////////////////////////////////////////// // Asset List ////////////////////////////////////////////////////////////// var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater'); var occurrence = gsw.select('occurrence'); var change = gsw.select("change_abs"); var transition = gsw.select('transition'); var roi = ee.Geometry.Polygon( [[[105.531921, 10.412183], [105.652770, 10.285193], [105.949401, 10.520218], [105.809326, 10.666006]]]); ////////////////////////////////////////////////////////////// // Constants ////////////////////////////////////////////////////////////// var VIS_OCCURRENCE = { min: 0, max: 100, palette: ['red', 'blue'] }; var VIS_CHANGE = { min: -50, max: 50, palette: ['red', 'black', 'limegreen'] }; var VIS_WATER_MASK = { palette: ['white', 'black'] }; ////////////////////////////////////////////////////////////// // Helper functions ////////////////////////////////////////////////////////////// // Create a feature for a transition class that includes the area covered. function createFeature(transition_class_stats) { transition_class_stats = ee.Dictionary(transition_class_stats); var class_number = transition_class_stats.get('transition_class_value'); var result = { transition_class_number: class_number, transition_class_name: lookup_names.get(class_number), transition_class_palette: lookup_palette.get(class_number), area_m2: transition_class_stats.get('sum') }; return ee.Feature(null, result); // Creates a feature without a geometry. } // Create a JSON dictionary that defines piechart colors based on the // transition class palette. // https://developers.google.com/chart/interactive/docs/gallery/piechart function createPieChartSliceDictionary(fc) { return ee.List(fc.aggregate_array("transition_class_palette")) .map(function(p) { return {'color': p}; }).getInfo(); } // Convert a number to a string. Used for constructing dictionary key lists // from computed number objects. function numToString(num) { return ee.Number(num).format(); } ////////////////////////////////////////////////////////////// // Calculations ////////////////////////////////////////////////////////////// // Create a dictionary for looking up names of transition classes. var lookup_names = ee.Dictionary.fromLists( ee.List(gsw.get('transition_class_values')).map(numToString), gsw.get('transition_class_names') ); // Create a dictionary for looking up colors of transition classes. var lookup_palette = ee.Dictionary.fromLists( ee.List(gsw.get('transition_class_values')).map(numToString), gsw.get('transition_class_palette') ); // Create a water mask layer, and set the image mask so that non-water areas // are transparent. var water_mask = occurrence.gt(90).mask(1); // Generate a histogram object and print it to the console tab. var histogram = ui.Chart.image.histogram({ image: change, region: roi, scale: 30, minBucketWidth: 10 }); histogram.setOptions({ title: 'Histogram of surface water change intensity.' }); print(histogram); // Summarize transition classes in a region of interest. var area_image_with_transition_class = ee.Image.pixelArea().addBands(transition); var reduction_results = area_image_with_transition_class.reduceRegion({ reducer: ee.Reducer.sum().group({ groupField: 1, groupName: 'transition_class_value', }), geometry: roi, scale: 30, bestEffort: true, }); print('reduction_results', reduction_results); var roi_stats = ee.List(reduction_results.get('groups')); var transition_fc = ee.FeatureCollection(roi_stats.map(createFeature)); print('transition_fc', transition_fc); // Add a summary chart. var transition_summary_chart = ui.Chart.feature.byFeature({ features: transition_fc, xProperty: 'transition_class_name', yProperties: ['area_m2', 'transition_class_number'] }) .setChartType('PieChart') .setOptions({ title: 'Summary of transition class areas', slices: createPieChartSliceDictionary(transition_fc), sliceVisibilityThreshold: 0 // Don't group small slices. }); print(transition_summary_chart); ////////////////////////////////////////////////////////////// // Initialize Map Location ////////////////////////////////////////////////////////////// // Uncomment one of the following statements to center the map on // a particular location. // Map.setCenter(-90.162, 29.8597, 10); // New Orleans, USA // Map.setCenter(-114.9774, 31.9254, 10); // Mouth of the Colorado River, Mexico // Map.setCenter(-111.1871, 37.0963, 11); // Lake Powell, USA // Map.setCenter(149.412, -35.0789, 11); // Lake George, Australia Map.setCenter(105.26, 11.2134, 9); // Mekong River Basin, SouthEast Asia // Map.setCenter(90.6743, 22.7382, 10); // Meghna River, Bangladesh // Map.setCenter(81.2714, 16.5079, 11); // Godavari River Basin Irrigation Project, India // Map.setCenter(14.7035, 52.0985, 12); // River Oder, Germany & Poland // Map.setCenter(-59.1696, -33.8111, 9); // Buenos Aires, Argentina // Map.setCenter(-74.4557, -8.4289, 11); // Ucayali River, Peru ////////////////////////////////////////////////////////////// // Map Layers ////////////////////////////////////////////////////////////// Map.addLayer({ eeObject: water_mask, visParams: VIS_WATER_MASK, name: '90% occurrence water mask', shown: false }); Map.addLayer({ eeObject: occurrence.updateMask(occurrence.divide(100)), name: "Water Occurrence (1984-2015)", visParams: VIS_OCCURRENCE, shown: false }); Map.addLayer({ eeObject: change, visParams: VIS_CHANGE, name: 'occurrence change intensity', shown: false }); Map.addLayer({ eeObject: transition, name: 'Transition classes (1984-2015)', });
Bu eğitim, Global Surface Water veri kümesiyle ilgili eğitimi tamamlar. Bu eğitimin, Küresel Yüzey Suyu veri kümesinde bulunan veri katmanlarından yalnızca üçüyle (oluşum, değişim yoğunluğu ve geçiş) nasıl çalışılacağını gösterdiğini unutmayın. Veri Kullanıcıları Kılavuzu (v2)'nda bulunan diğer veri katmanları hakkında bilgi edinebilirsiniz.
İyi analizler!