Earth Engine 支持对 Geometry
对象执行各种操作。
这些操作包括对各个几何图形执行的操作,例如计算缓冲区、质心、边界框、周长、凸包等。例如:
Code Editor (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');
从前面的示例可以看出,缓冲区距离是以米为单位指定的。
支持的几何图形运算还包括几何图形之间的关系计算,例如交集、并集、差集、距离、包含等。为了测试其中的一些关系,几何图形默认使用“偶-奇”规则。根据奇偶规则,如果从某个点到已知位于多边形外部的某个点的线条穿过奇数个其他边,则该点位于多边形内。多边形的内部是指壳体内部的所有内容,而非孔洞内部。举个简单的例子,圆形多边形内的点必须恰好穿过一条边才能逃离多边形。几何图形可以根据需要选择使用“左侧内侧”规则。假设按给定顺序遍历圆环的点;内部将位于左侧。
为了演示使用“左侧内侧”规则 (evenOdd: false
) 创建的地图几何图形与使用“偶数-奇数”规则创建的地图几何图形之间的区别,以下示例将一个点与两个不同的多边形进行了比较:
Code Editor (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
构造函数提供的坐标顺序如何影响结果。具体而言,该点位于左内多边形的外部,但位于偶数-奇数多边形的内部。
以下示例根据两个多边形之间的关系计算和可视化派生几何图形:
Code Editor (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
给出。如有必要,您还可以指定用于执行计算的特定投影。