FORMA — это основанная на MODIS система оповещения об обезлесении влажных тропических лесов с масштабом 500 x 500 метров, которая обновляется дважды в месяц. Набор данных FORMA 500 в Earth Engine представляет собой изображение с оповещениями, поступающими с января 2006 года и обновляемыми ежемесячно. Каждому оповещению соответствует время в отдельном диапазоне с именем alert_date
в секундах эпохи . Фильтрация данных FORMA по датам и расчёт оповещений в интересующих областях — две наиболее важные функции, которые можно выполнять с помощью набора данных FORMA.
Фильтрация FORMA по дате
Чтобы отобразить только те оповещения, которые произошли в 2012 году, найдите пиксели, которые имеют время между первым днем 2012 года и первым днем 2013 года, выраженное в секундах с полуночи 1 января 1970 года:
Редактор кода (JavaScript)
// Convert dates from milliseconds to seconds. var start = ee.Date('2012-01-01').millis().divide(1000); var end = ee.Date('2013-01-01').millis().divide(1000); // Load the FORMA 500 dataset. var forma = ee.Image('FORMA/FORMA_500m'); // Create a binary layer from the dates of interest. var forma2012 = forma.gte(start).and(forma.lte(end)); Map.setCenter(15.87, -0.391, 7); Map.addLayer( forma2012.mask(forma2012), {palette: ['FF0000']}, 'FORMA alerts in 2012' );
В этом примере forma2012
— это двоичное изображение, содержащее только те пиксели, время которых приходится на 2012 год (т.е. все остальные пиксели маскируются).
Подсчет оповещений FORMA в интересующем регионе
Как и в предыдущем разделе с данными Хансена и др., мы можем начать с подсчёта количества тревожных сигналов FORMA (пикселей) в интересующей нас области. Например, чтобы подсчитать количество тревожных сигналов на охраняемых территориях Республики Конго в 2012 году, воспользуемся предыдущим примером следующим образом:
Редактор кода (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); }); // Display protected areas on the map. Map.addLayer( protectedAreas, {color: '000000'}, 'Congo Republic protected areas' ); // Calculate the number of FORMA pixels in protected // areas of the Congo Republic, 2012. var stats = forma2012.reduceRegion({ reducer: ee.Reducer.sum(), geometry: protectedAreas.geometry(), scale: 500 }); print('Number of FORMA pixels, 2012: ', stats.get('constant'));
Подсчет оповещений FORMA в нескольких интересующих регионах
До сих пор мы вычисляли статистику только для одного региона. Для одновременного вычисления статистики по нескольким регионам можно использовать reduceRegions()
. Снова опираясь на предыдущий пример:
Редактор кода (JavaScript)
var regionsStats = forma2012.reduceRegions({ collection: protectedAreas, reducer: ee.Reducer.sum(), scale: forma2012.projection().nominalScale() }); print(regionsStats);
Изучите объект, выведенный на консоль, и обратите внимание, что вывод функции reduceRegions()
— это ещё один FeatureCollection
. Обратите внимание, что каждый регион в коллекции охраняемых территорий Республики Конго теперь имеет дополнительное свойство sum
, названное в честь редуктора. Значение этого свойства — вывод редуктора, то есть количество оповещений за 2012 год в охраняемых территориях.
Сравнивая FORMA и Hansen et al. Наборы данных
Для сравнения наборов данных FORMA и Hansen et al. можно использовать логические операторы. ( Подробнее о логических операциях ). В частности, мы хотим создать изображение, на котором пиксели, отмеченные как данные FORMA и Hansen et al. как данные об обезлесении, имеют значение 1, а остальные — 0. Этот код создаёт такое изображение для 2012 года и отображает его вместе с другими слоёв прогнозируемой обезлесения:
Редактор кода (JavaScript)
// Convert dates from milliseconds to seconds. var start = ee.Date('2012-01-01').millis().divide(1000); var end = ee.Date('2013-01-01').millis().divide(1000); var region = ee.Geometry.Rectangle([-59.81163, -9.43348, -59.27561, -9.22818]); // Load the FORMA 500 dataset. var forma = ee.Image('FORMA/FORMA_500m'); // Create a binary layer from the dates of interest. var forma2012 = forma.gte(start).and(forma.lte(end)); // Load Hansen et al. data and get change in 2012. var gfc = ee.Image('UMD/hansen/global_forest_change_2015'); var gfc12 = gfc.select(['lossyear']).eq(12); // Create an image which is one where the datasets // both show deforestation and zero elsewhere. var gfc_forma = gfc12.eq(1).and(forma2012.eq(1)); // Display data on the map. Map.setCenter(-59.58813, -9.36439, 11); Map.addLayer(forma.updateMask(forma), {palette: '00FF00'}, 'Forma (green)'); Map.addLayer(gfc12.updateMask(gfc12), {palette: 'FF0000'}, 'Hansen (red)'); Map.addLayer( gfc_forma.updateMask(gfc_forma), {palette: 'FFFF00'}, 'Hansen & FORMA (yellow)' );
На этом обзор наборов данных об изменении лесного покрова в Earth Engine завершен. С нетерпением ждём возможности увидеть, что вы с ними сможете сделать!