ジオメトリック オペレーション

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

上の例では、バッファ距離がメートル単位で指定されています。

サポートされているジオメトリ オペレーションには、ジオメトリ間のリレーショナル計算(交差、結合、差分、距離、包含など)も含まれます。これらの関係の一部をテストするために、ジオメトリはデフォルトで「偶奇」ルールを使用します。偶数 / 奇数ルールでは、その点からポリゴンの外側にあることが判明している点への線が他のエッジを奇数回交差する場合、その点はポリゴンの内部にあります。ポリゴンの内側は、穴の中ではなく、シェルの中にあるすべてのものです。簡単な例として、円形のポリゴン内の点がポリゴンから外に出るには、ちょうど 1 つのエッジを通過する必要があります。必要に応じて、ジオメトリで「左内側」ルールを使用できます。リングのポイントを指定された順序で移動すると、内側が左側になります。

「左内側」ルール(evenOdd: false)で作成されたジオメトリと「偶数 / 奇数」ルールで作成されたジオメトリの違いを示すために、次の例では、1 つのポイントと 2 つの異なるポリゴンを比較します。

コードエディタ(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 コンストラクタに指定する座標の順序が結果にどのように影響するかを示しています。具体的には、この点は左内側のポリゴンの外側にあり、偶奇ポリゴンの内側にあります。

次の例では、2 つのポリゴンの関係に基づいて派生ジオメトリを計算して可視化します。

コードエディタ(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 で指定されます。必要に応じて、計算を行う特定のプロジェクションを指定することもできます。