Earth Engine 支持对Geometry
对象的各种操作。这些包括对单个几何图形的操作,例如计算缓冲区、质心、边界框、周长等。例如:
缓冲区100公里的图形,重心就是图中的黑点
// 建立一个几何图形 var polygon = ee.Geometry.Polygon([ [[-5, 40], [65, 40], [65, 60], [-5, 60], [-5, 60]] ]); // 并按此建立一个缓冲区 var buffer = polygon.buffer(1000000); // 计算这些polygon的重心 var centroid = polygon.centroid(); Map.addLayer(buffer, {}, 'buffer'); Map.addLayer(centroid, {}, 'centroid');
支持的几何运算还包括几何之间的关系计算,例如交集、联合、差异、距离、包含等。为了测试其中一些关系,几何默认使用“奇偶”规则。根据奇偶规则,如果从该点到已知在多边形外部的某个点的线与奇数个其他边相交,则该点在多边形内部。多边形的内部是壳内的所有东西,而不是孔内。作为一个简单的例子,圆形多边形内的一个点必须正好穿过一条边才能脱离多边形。如有必要,几何图形可以选择使用“左内”规则。想象一下按照给定的顺序走环的点;内部将在左侧。
为了演示使用“左向内”规则 ( ) 创建的几何与使用“奇偶”规则创建的几何之间的区别,以下示例将一个点与两个不同的多边形进行比较:evenOdd: false
// 创造一个左侧的几何图形用来验证是不是包含在里面 var holePoly = ee.Geometry.Polygon({ coords: [ [[-35, -10], [-35, 10], [35, 10], [35, -10], [-35, -10]] ], evenOdd: false }); // 创建多边形的奇偶版本。 var evenOddPoly = ee.Geometry({ geoJson: holePoly, evenOdd: true }); // 创建一个点来测试多边形的内部。 var pt = ee.Geometry.Point([1.5, 1.5]); // 使用 contains 运算符检查内部情况。是否包含的检验 print(holePoly.contains(pt)); // false print(evenOddPoly.contains(pt)); // true
前面的示例演示了在Polygon
构造左多边形时,提供给构造函数的坐标顺序如何 影响结果。具体来说,该点位于左内多边形之外,但位于奇数多边形内。
以下示例基于两个多边形之间的关系计算和可视化派生几何:也就是两个几何图形之间的交、并、非集。
显示的结果
intersection(right, maxError, proj)
确定两个是否交的一个函数
Returns the intersection of the two geometries.
Arguments:
this:left (Geometry):
The geometry used as the left operand of the operation.
right (Geometry):
The geometry used as the right operand of the operation.
maxError (ErrorMargin, default: null):
执行任何必要的重新投影时允许的最大错误量。
The maximum amount of error tolerated when performing any necessary reprojection.
proj (Projection, default: null):
在其中执行操作的投影。如果未指定,则操作将在球坐标系中执行,并且球体上的线性距离以米为单位。
The projection in which to perform the operation. If not specified, the operation will be performed in a spherical coordinate system, and linear distances will be in meters on the sphere.
Returns: Geometry
// 建两个圆形,创建的方式就是缓冲区 var poly1 = ee.Geometry.Point([-50, 30]).buffer(1e6); var poly2 = ee.Geometry.Point([-40, 30]).buffer(1e6); // 加载图像 Map.setCenter(-45, 30); Map.addLayer(poly1, {color: 'FF0000'}, 'poly1'); Map.addLayer(poly2, {color: '0000FF'}, 'poly2'); // 计算交点,以绿色显示。 var intersection = poly1.intersection(poly2, ee.ErrorMargin(1)); Map.addLayer(intersection, {color: '00FF00'}, 'intersection'); // 计算并集,以洋红色显示。 var union = poly1.union(poly2, ee.ErrorMargin(1)); Map.addLayer(union, {color: 'FF00FF'}, 'union'); // 计算非,显示为黄色。 var diff1 = poly1.difference(poly2, ee.ErrorMargin(1)); Map.addLayer(diff1, {color: 'FFFF00'}, 'diff1'); // 计算对称差,以黑色显示。 var symDiff = poly1.symmetricDifference(poly2, ee.ErrorMargin(1)); Map.addLayer(symDiff, {color: '000000'}, 'symmetric difference');