기하학적 연산

Earth Engine은 Geometry 객체에 대한 다양한 작업을 지원합니다. 여기에는 버퍼, 중심점, 경계 상자, 둘레, 볼록 껍질 등의 개별 도형에 대한 연산이 포함됩니다. 예를 들면 다음과 같습니다.

코드 편집기 (JavaScript)

// Create a geodesic polygon.
var polygon = ee.Geometry.Polygon([
  [[-5, 40], [65, 40], [65, 60], [-5, 60], [-5, 60]]
]);

// Compute a buffer of the polygon.
var buffer = polygon.buffer(1000000);

// Compute the centroid of the polygon.
var centroid = polygon.centroid();
Map.addLayer(buffer, {}, 'buffer');
Map.addLayer(centroid, {}, 'centroid');

이전 예에서 버퍼 거리가 미터 단위로 지정된 것을 확인할 수 있습니다.

지원되는 기하학 연산에는 교차, 합집합, 차집합, 거리, 포함 등 도형 간의 관계 계산도 포함됩니다. 이러한 관계 중 일부를 테스트하기 위해 도형은 기본적으로 '짝수-홀수' 규칙을 사용합니다. 짝수-홀수 규칙에 따라, 한 점에서 다각형 외부로 알려진 다른 점까지의 선이 홀수 개 다른 가장자리를 지나면 그 점은 다각형 내부에 있는 것입니다. 다각형의 내부는 구멍이 아닌 껍질 내부의 모든 것입니다. 간단한 예로 원형 다각형 내의 점은 다각형을 벗어나려면 정확히 하나의 가장자리를 지나야 합니다. 도형은 필요한 경우 '왼쪽 안쪽' 규칙을 선택적으로 사용할 수 있습니다. 주어진 순서대로 원의 점을 따라 이동한다고 가정해 보겠습니다. 안쪽이 왼쪽에 있습니다.

'left-inside' 규칙(evenOdd: false)으로 만든 도형과 'even-odd' 규칙으로 만든 도형의 차이를 보여주기 위해 다음 예에서는 점을 두 개의 서로 다른 다각형과 비교합니다.

코드 편집기 (JavaScript)

// Create a left-inside polygon.
var holePoly = ee.Geometry.Polygon({
  coords: [
    [[-35, -10], [-35, 10], [35, 10], [35, -10], [-35, -10]]
  ],
  evenOdd: false
});

// Create an even-odd version of the polygon.
var evenOddPoly = ee.Geometry({
  geoJson: holePoly,
  evenOdd: true
});

// Create a point to test the insideness of the polygon.
var pt = ee.Geometry.Point([1.5, 1.5]);

// Check insideness with a contains operator.
print(holePoly.contains(pt));       // false
print(evenOddPoly.contains(pt));    // true

이전 예에서는 Polygon 생성자에 제공된 좌표 순서가 왼쪽 안쪽 다각형이 생성될 때 결과에 미치는 영향을 보여줍니다. 특히 이 점은 왼쪽 내부 다각형 외부이지만 짝수-홀수 다각형 내부에 있습니다.

다음 예에서는 두 다각형 간의 관계를 기반으로 파생된 도형을 계산하고 시각화합니다.

코드 편집기 (JavaScript)

// Create two circular geometries.
var poly1 = ee.Geometry.Point([-50, 30]).buffer(1e6);
var poly2 = ee.Geometry.Point([-40, 30]).buffer(1e6);

// Display polygon 1 in red and polygon 2 in blue.
Map.setCenter(-45, 30);
Map.addLayer(poly1, {color: 'FF0000'}, 'poly1');
Map.addLayer(poly2, {color: '0000FF'}, 'poly2');

// Compute the intersection, display it in green.
var intersection = poly1.intersection(poly2, ee.ErrorMargin(1));
Map.addLayer(intersection, {color: '00FF00'}, 'intersection');

// Compute the union, display it in magenta.
var union = poly1.union(poly2, ee.ErrorMargin(1));
Map.addLayer(union, {color: 'FF00FF'}, 'union');

// Compute the difference, display in yellow.
var diff1 = poly1.difference(poly2, ee.ErrorMargin(1));
Map.addLayer(diff1, {color: 'FFFF00'}, 'diff1');

// Compute symmetric difference, display in black.
var symDiff = poly1.symmetricDifference(poly2, ee.ErrorMargin(1));
Map.addLayer(symDiff, {color: '000000'}, 'symmetric difference');

이 예시에서는 도형 작업에 maxError 매개변수가 1미터로 설정되어 있습니다. maxError는 도형을 변경할 수 있는 변환(예: 투영 또는 재투영)에서 허용되는 최대 오류(미터)입니다. 도형 중 하나가 다른 도형과 다른 투영에 있는 경우 Earth Engine은 maxError로 지정된 투영 정밀도로 구형 좌표계에서 계산을 실행합니다. 필요한 경우 계산을 실행할 특정 프로젝션을 지정할 수도 있습니다.