Геометрические операции

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

Обратите внимание, что в предыдущем примере буферное расстояние указано в метрах.

Поддерживаемые геометрические операции также включают реляционные вычисления между геометриями, такие как пересечение, объединение, разность, расстояние, содержание и т. д. Для проверки некоторых из этих отношений геометрии по умолчанию используют правило «чет-нечет». По правилу четно-нечетной точки точка находится внутри многоугольника, если линия от этой точки до некоторой точки, заведомо находящейся за пределами многоугольника, пересекает нечетное количество других ребер. Внутренняя часть многоугольника — это все, что находится внутри оболочки, а не внутри дыры. В качестве простого примера: точка внутри круглого многоугольника должна пересекать ровно один край, чтобы выйти за пределы многоугольника. При необходимости в геометрии можно дополнительно использовать правило «слева внутри». Представьте себе, что вы проходите по точкам кольца в указанном порядке; внутренняя часть будет слева.

Чтобы продемонстрировать разницу между геометриями, созданными по правилу «слева-внутри» ( evenOdd: false ), и геометриями, созданными по правилу «чет-нечет», в следующем примере точка сравнивается с двумя разными многоугольниками:

Редактор кода (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 , влияет на результат при построении левого внутреннего многоугольника. В частности, точка находится за пределами левого внутреннего многоугольника, но внутри четно-нечетного многоугольника.

В следующем примере вычисляются и визуализируются производные геометрии на основе отношений между двумя полигонами:

Редактор кода (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 установлен на один метр для операций с геометрией. maxError — это максимально допустимая ошибка в метрах от преобразований (таких как проекция или перепроекция), которые могут изменить геометрию. Если одна из геометрий находится в проекции, отличной от другой, Earth Engine выполнит вычисления в сферической системе координат с точностью проекции, заданной maxError . При необходимости вы также можете указать конкретную проекцию, в которой будут выполняться вычисления.