공지사항:
2025년 4월 15일 전에 Earth Engine 사용을 위해 등록된 모든 비상업용 프로젝트는 Earth Engine 액세스를 유지하기 위해
비상업용 자격 요건을 인증해야 합니다.
Forest Monitoring for Action (FORMA) 데이터 소개
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
FORMA는 습한 열대 우림을 위한 MODIS 기반 500x500미터 월 2회 삼림 벌채 알림 시스템입니다. Earth Engine의 FORMA 500 데이터 세트는 2006년 1월부터 시작되는 알림이 포함된 이미지로, 매월 업데이트됩니다. 각 알림에는 에포크 초 단위로 alert_date
라는 단일 대역에 연결된 시간이 있습니다. 날짜별로 FORMA를 필터링하고 관심 지역 내에서 알림을 계산하는 것은 FORMA 데이터 세트로 할 수 있는 가장 중요한 두 가지 작업입니다.
2012년에 발생한 알림만 표시하려면 2012년 1월 1일 자정부터 2013년 1월 1일 자정까지의 시간을 초로 표현한 시간이 있는 픽셀을 찾습니다.
코드 편집기 (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년에 발생한 시간이 있는 픽셀만 포함하는 바이너리 이미지입니다 (즉, 다른 모든 픽셀은 마스크 처리됨).
이전 섹션에서 Hansen 등의 데이터를 사용한 것처럼 관심 지역의 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'));
지금까지는 한 번에 하나의 리전에서 통계를 계산했습니다. 여러 지역에서 한 번에 통계를 계산하려면 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. 데이터 모두에서 삼림 파괴로 표시된 픽셀은 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의 산림 변화 데이터 세트에 대한 개요를 마치겠습니다. 이 기능을 활용해 어떤 콘텐츠를 만드실지 무척 기대됩니다.
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2025-07-26(UTC)
[null,null,["최종 업데이트: 2025-07-26(UTC)"],[[["\u003cp\u003eFORMA is a deforestation alerting system for humid tropical forests based on MODIS data, providing alerts with a corresponding time in epoch seconds.\u003c/p\u003e\n"],["\u003cp\u003eUsers can filter FORMA alerts by date, enabling analysis of deforestation events within specific timeframes.\u003c/p\u003e\n"],["\u003cp\u003eThe number of FORMA alerts within a region of interest or multiple regions can be calculated, facilitating quantitative assessment of deforestation.\u003c/p\u003e\n"],["\u003cp\u003eFORMA data can be compared with other datasets like Hansen et al.to identify areas where both indicate deforestation, offering a comprehensive analysis.\u003c/p\u003e\n"]]],[],null,["# Introduction to Forest Monitoring for Action (FORMA) data\n\nFORMA is a [MODIS](http://modis.gsfc.nasa.gov/about/) based 500 x 500\nmeter twice-monthly deforestation alerting system for the humid tropical forests. The\n[FORMA 500 dataset](/earth-engine/datasets/catalog/FORMA_FORMA_500m) in Earth\nEngine is an image with alerts starting in January 2006 and updated monthly. Each alert has a\ntime associated with it in a single band named `alert_date` in units of\n[epoch seconds](https://en.wikipedia.org/wiki/Unix_time). Filtering FORMA by dates\nand calculating alerts within areas of interest are two of the most important things you can\ndo with the FORMA dataset.\n\nFiltering FORMA by Date\n-----------------------\n\nTo show just those alerts that occur in 2012, find pixels that have times between the\nfirst day of 2012 and the first day of 2013, expressed in seconds since midnight,\nJanuary 1, 1970:\n\n### Code Editor (JavaScript)\n\n```javascript\n// Convert dates from milliseconds to seconds.\nvar start = ee.Date('2012-01-01').millis().divide(1000);\nvar end = ee.Date('2013-01-01').millis().divide(1000);\n\n// Load the FORMA 500 dataset.\nvar forma = ee.Image('FORMA/FORMA_500m');\n\n// Create a binary layer from the dates of interest.\nvar forma2012 = forma.gte(start).and(forma.lte(end));\n\nMap.setCenter(15.87, -0.391, 7);\nMap.addLayer(\n forma2012.mask(forma2012),\n {palette: ['FF0000']},\n 'FORMA alerts in 2012'\n);\n```\n\nIn this example, `forma2012` is a binary image containing only those pixels\nthat have times occurring in 2012 (i.e. all other pixels are masked).\n\nCounting FORMA Alerts in a Region of Interest\n---------------------------------------------\n\n[As we did\nin the previous section](/earth-engine/tutorials/tutorial_forest_03#quantifying-forest-change-in-an-area-of-interest) with the Hansen et al. data, we can start by counting the\nnumber of FORMA alerts (pixels) in an area of interest. For example, to count the number\nof alerts in protected areas of the Congo Republic in 2012, build on the previous example as\nfollows:\n\n### Code Editor (JavaScript)\n\n```javascript\n// Load country features from Large Scale International Boundary (LSIB) dataset.\nvar countries = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');\n\n// Subset the Congo Republic feature from countries.\nvar congo = ee.Feature(\n countries\n .filter(ee.Filter.eq('country_na', 'Rep of the Congo'))\n .first()\n);\n\n// Subset protected areas to the bounds of the congo feature\n// and other criteria. Clip to the intersection with congo.\nvar protectedAreas = ee.FeatureCollection('WCMC/WDPA/current/polygons')\n .filter(ee.Filter.and(\n ee.Filter.bounds(congo.geometry()),\n ee.Filter.neq('IUCN_CAT', 'VI'),\n ee.Filter.neq('STATUS', 'proposed'),\n ee.Filter.lt('STATUS_YR', 2010)\n ))\n .map(function(feat){\n return congo.intersection(feat);\n });\n\n// Display protected areas on the map.\nMap.addLayer(\n protectedAreas,\n {color: '000000'},\n 'Congo Republic protected areas'\n);\n\n// Calculate the number of FORMA pixels in protected\n// areas of the Congo Republic, 2012.\nvar stats = forma2012.reduceRegion({\n reducer: ee.Reducer.sum(),\n geometry: protectedAreas.geometry(),\n scale: 500\n});\nprint('Number of FORMA pixels, 2012: ', stats.get('constant'));\n```\n\nCounting FORMA Alerts in Several Regions of Interest\n----------------------------------------------------\n\nSo far, we've been computing statistics in a single region at a time. For computing\nstatistics in multiple regions at once, you can use\n[`reduceRegions()`](/earth-engine/apidocs/ee-image-reduceregions). Again\nbuilding on the previous example:\n\n### Code Editor (JavaScript)\n\n```javascript\nvar regionsStats = forma2012.reduceRegions({\n collection: protectedAreas,\n reducer: ee.Reducer.sum(),\n scale: forma2012.projection().nominalScale()\n});\nprint(regionsStats);\n```\n\nExamine the object printed to the console and observe that the output of\n`reduceRegions()` is another `FeatureCollection`. Note that every\nregion in the collection of the Congo Republic protected areas now has an additional property,\n`sum`, named after the reducer. The value of this property is the output of\nthe reducer, or the number of 2012 alerts in the protected areas.\n\nComparing FORMA and Hansen et al. Datasets\n------------------------------------------\n\nTo compare the FORMA and Hansen et al. datasets, you can use logical operators.\n([Learn more about logical operations](/earth-engine/guides/image_relational)). Specifically, we'd\nlike to make an image in which pixels marked by both FORMA and the Hansen et al. data\nas deforestation are 1 and the rest are zero. This code makes such an image for\n2012 and displays it along with other predicted deforestation layers:\n\n### Code Editor (JavaScript)\n\n```javascript\n// Convert dates from milliseconds to seconds.\nvar start = ee.Date('2012-01-01').millis().divide(1000);\nvar end = ee.Date('2013-01-01').millis().divide(1000);\nvar region = ee.Geometry.Rectangle([-59.81163, -9.43348, -59.27561, -9.22818]);\n\n// Load the FORMA 500 dataset.\nvar forma = ee.Image('FORMA/FORMA_500m');\n\n// Create a binary layer from the dates of interest.\nvar forma2012 = forma.gte(start).and(forma.lte(end));\n\n// Load Hansen et al. data and get change in 2012.\nvar gfc = ee.Image('UMD/hansen/global_forest_change_2015');\nvar gfc12 = gfc.select(['lossyear']).eq(12);\n\n// Create an image which is one where the datasets\n// both show deforestation and zero elsewhere.\nvar gfc_forma = gfc12.eq(1).and(forma2012.eq(1));\n\n// Display data on the map.\nMap.setCenter(-59.58813, -9.36439, 11);\nMap.addLayer(forma.updateMask(forma), {palette: '00FF00'}, 'Forma (green)');\nMap.addLayer(gfc12.updateMask(gfc12), {palette: 'FF0000'}, 'Hansen (red)');\nMap.addLayer(\n gfc_forma.updateMask(gfc_forma),\n {palette: 'FFFF00'},\n 'Hansen & FORMA (yellow)'\n);\n```\n\nThis concludes the overview of forest change datasets in Earth Engine. We're looking\nforward to seeing what you can do with them!"]]