Water Occurrence Change Intensity(물 발생 빈도 변화 강도)

수면 발생 변화 강도 데이터 레이어는 1984~1999년과 2000~2015년이라는 두 시대 사이에 수면이 어떻게 변화했는지 측정합니다. 이 레이어는 두 에포크에서 가져온 상동 월 쌍의 변화를 평균화합니다. 이 레이어에 관한 자세한 내용은 데이터 사용자 가이드 (v2) 를 참고하세요.

튜토리얼의 이 섹션에서는 다음을 수행합니다.

  1. 물 발생 변화 강도를 시각화하기 위한 스타일 지정 지도 레이어를 추가합니다.
  2. 히스토그램을 사용하여 지정된 관심 영역의 변화 강도를 요약합니다.

시각화

물 발생 레이어와 마찬가지로 발생 변화 강도의 기본 시각화를 지도에 추가한 후 이를 개선할 예정입니다. 발생 변경 강도는 절대값과 정규화된 값의 두 가지 방식으로 제공됩니다. 이 튜토리얼에서는 절대값을 사용합니다. GSW 이미지에서 절대 발생 변경 강도 레이어를 선택하여 시작합니다.

코드 편집기 (JavaScript)

var change = gsw.select("change_abs");

코드의 상수 섹션에서 레이어의 스타일을 지정하는 방법을 정의하는 새 변수를 만드는 문을 추가합니다. 이 스타일은 지표수 발생이 감소/증가한 영역을 빨간색/녹색으로 표시합니다. 지표수 발생이 비교적 변하지 않은 영역은 검은색으로 표시됩니다.

코드 편집기 (JavaScript)

var VIS_CHANGE = {
    min:-50,
    max:50,
    palette: ['red', 'black', 'limegreen']
};

코드의 지도 레이어 섹션 끝에 지도에 새 레이어를 추가하는 문을 추가합니다.

코드 편집기 (JavaScript)

Map.setCenter(-74.4557, -8.4289, 11);  // Ucayali River, Peru
Map.addLayer({
  eeObject: change,
  visParams: VIS_CHANGE,
  name: 'occurrence change intensity'
});
강도 변경
그림 6. 페루 동부 아마존 열대우림에 있는 도시인 푸칼파 근처의 우카얄리강의 지표수 변화 강도 스크린샷 빨간색/녹색은 에포크 간 지표면 물 발생의 감소/증가를 나타냅니다.

관심 지역 내 변화 요약

이 섹션에서는 관심 있는 지정된 지역 내의 변화량을 요약합니다. 관심 영역을 지정하려면 다각형 그리기 도구를 클릭합니다. 이 도구는 기하학 도구 중 하나입니다. 이렇게 하면 기본적으로 'geometry'라는 새 Geometry Imports 레이어가 생성됩니다. 이름을 변경하려면 레이어 이름 오른쪽에 있는 톱니바퀴 아이콘을 클릭합니다. (레이어 이름을 표시하려면 레이어 이름에 커서를 올려야 할 수도 있습니다.)

레이어 이름을 roi (관심 영역 또는 ROI)로 변경합니다. 그런 다음 지도에서 일련의 점을 클릭하여 관심 영역의 다각형을 정의할 수 있습니다.

관심 영역
그림 7. 다각형 그리기 도구를 사용하여 관심 영역이 생성된 페루 푸칼파 근처의 우카얄리강 스크린샷

관심 영역이 정의되고 변수에 저장되었으므로 이를 사용하여 ROI의 변화 강도 히스토그램을 계산할 수 있습니다. 스크립트의 Calculations 섹션에 다음 코드를 추가합니다.

코드 편집기 (JavaScript)

// Calculate a change intensity for the region of interest.
var histogram = change.reduceRegion({
  reducer: ee.Reducer.histogram(),
  geometry: roi,
  scale: 30,
  bestEffort: true,
});
print(histogram);

첫 번째 문은 ROI 내에서 발생 변경 강도 값의 히스토그램을 계산하며 30m 규모로 샘플링합니다. 두 번째는 결과 객체를 코드 편집기 콘솔 탭에 출력합니다. 객체 트리를 펼쳐 히스토그램 버킷의 값을 볼 수 있습니다. 숫자 데이터는 있지만 결과를 시각화하는 더 나은 방법이 있습니다.

히스토그램 값
그림 8. 표면수 변화 강도의 히스토그램 값을 보여주는 콘솔 탭 결과

이를 개선하기 위해 히스토그램 차트를 대신 생성할 수 있습니다. 히스토그램 객체를 정의하는 문을 다음 문으로 바꿉니다.

코드 편집기 (JavaScript)

// 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.'
});

이러한 문은 히스토그램 차트 객체를 만들어 콘솔 탭의 히스토그램 객체 트리를 차트로 대체합니다. 차트 메서드에는 관심 영역이 샘플링되는 공간 규모(미터)를 정의하는 scale와 히스토그램 버킷의 너비를 제어하는 데 사용되는 minBucketWidth를 비롯한 여러 인수가 포함되어 있습니다.

히스토그램 차트
그림 9. 표면수 변화 강도의 히스토그램 차트를 보여주는 콘솔 탭 결과

히스토그램 막대 위로 커서를 가져가면 차트 값을 대화형으로 살펴볼 수 있습니다.

최종 스크립트

이 섹션의 전체 스크립트는 아래에 나열되어 있습니다. 스크립트에는 다각형 지오메트리 (roi)를 정의하는 문이 포함되어 있으며, 이는 코드 편집기의 지오메트리 도구를 사용하여 만든 지오메트리와 유사합니다.

코드 편집기 (JavaScript)

//////////////////////////////////////////////////////////////
// Asset List
//////////////////////////////////////////////////////////////

var gsw = ee.Image('JRC/GSW1_0/GlobalSurfaceWater');
var occurrence = gsw.select('occurrence');
var change = gsw.select("change_abs");
var roi = /* color: 0B4A8B */ee.Geometry.Polygon(
        [[[-74.17213, -8.65569],
          [-74.17419, -8.39222],
          [-74.38362, -8.36980],
          [-74.43031, -8.61293]]]);

//////////////////////////////////////////////////////////////
// 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']
};

//////////////////////////////////////////////////////////////
// Calculations
//////////////////////////////////////////////////////////////

// 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);

//////////////////////////////////////////////////////////////
// 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'
});

다음 섹션에서는 물 클래스 전환 레이어를 사용하여 시간이 지남에 따라 물이 어떻게 변했는지 자세히 알아봅니다.