O Earth Engine oferece suporte a uma grande variedade de operações em objetos Geometry
.
Isso inclui operações em geometrias individuais, como calcular um buffer, centroide, caixa delimitadora, perímetro, envolvente convexa etc. Por exemplo:
Editor de código (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');
No exemplo anterior, a distância do buffer é especificada em metros.
As operações geométricas com suporte também incluem cálculos relacionais entre geometrias, como interseção, união, diferença, distância, contém etc. Para testar algumas dessas relações, as geometrias usam a regra "par-ímpar" por padrão. Pela regra par-ímpar, um ponto está dentro do polígono se uma linha desse ponto para algum ponto conhecido por estar fora do polígono cruza um número ímpar de outras bordas. O interior de um polígono é tudo o que está dentro da casca, e não dentro de um buraco. Como exemplo simples, um ponto dentro de um polígono circular precisa cruzar exatamente uma aresta para sair do polígono. As geometrias podem usar a regra "à esquerda", se necessário. Imagine percorrer os pontos de um anel na ordem indicada. O interior fica à esquerda.
Para demonstrar a diferença entre as geometrias criadas com a regra "à esquerda"
(evenOdd: false
) e as criadas com a regra "par-ímpar",
o exemplo a seguir compara um ponto a dois polígonos diferentes:
Editor de código (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
O exemplo anterior demonstra como a ordem das coordenadas fornecidas ao construtor Polygon
afeta o resultado quando um polígono à esquerda é construído. Especificamente, o ponto está fora do polígono à esquerda, mas dentro do
polígono par-ímpar.
O exemplo a seguir calcula e visualiza geometrias derivadas com base na relação entre dois polígonos:
Editor de código (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');
Nestes exemplos, o parâmetro maxError
é definido como um metro para
as operações de geometria. O maxError
é o erro máximo permitido, em metros, de transformações (como projeção ou reprojeção) que podem alterar a geometria. Se uma das geometrias estiver em uma projeção diferente da outra, o Earth Engine vai fazer o cálculo em um sistema de coordenadas esféricas, com uma precisão de projeção dada por maxError
. Também é possível especificar uma projeção específica para fazer a computação, se necessário.