Earth Engine admite una amplia variedad de operaciones en objetos Geometry
.
Estas incluyen operaciones en geometrías individuales, como el cálculo de un búfer, un centroide, un cuadro delimitador, un perímetro, un envolvente convexo, etcétera. Por ejemplo:
// 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');
Observa en el ejemplo anterior que la distancia del búfer se especifica en metros.
Las operaciones geométricas admitidas también incluyen cálculos relacionales entre geometrías, como intersección, unión, diferencia, distancia, contiene, etc. Para probar algunas de estas relaciones, las geometrías usan la regla "par-impar" de forma predeterminada. Según la regla par-impar, un punto está dentro del polígono si una línea de ese punto a algún punto que se sabe que está fuera del polígono cruza una cantidad impar de otros bordes. El interior de un polígono es todo lo que está dentro de la capa y no dentro de un orificio. Como ejemplo simple, un punto dentro de un polígono circular debe cruzar exactamente un borde para salir del polígono. De manera opcional, las geometrías pueden usar la regla "izquierda dentro", si es necesario. Imagina que caminas por los puntos de un anillo en el orden indicado; el interior estará a la izquierda.
Para demostrar la diferencia entre las geometrías creadas con la regla "izquierda-dentro" (evenOdd: false
) y las creadas con la regla "par-impar", en el siguiente ejemplo, se compara un punto con dos polígonos diferentes:
// 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
En el ejemplo anterior, se muestra cómo el orden de las coordenadas proporcionadas al constructor Polygon
afecta el resultado cuando se construye un polígono interior izquierdo. Específicamente, el punto está fuera del polígono interior izquierdo, pero dentro del polígono par-impar.
En el siguiente ejemplo, se calculan y visualizan geometrías derivadas en función de la relación entre dos polígonos:
// 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');
En estos ejemplos, ten en cuenta que el parámetro maxError
se establece en un metro para las operaciones de geometría. maxError
es el error máximo permitido, en metros, de las transformaciones (como la proyección o la reubicación) que pueden alterar la geometría. Si una de las geometrías tiene una proyección diferente de la otra, Earth Engine realizará el cálculo en un sistema de coordenadas esféricas, con una precisión de proyección dada por maxError
. También puedes especificar una proyección específica en la que realizar el procesamiento, si es necesario.