عملیات هندسی

Earth Engine از طیف گسترده ای از عملیات بر روی اجسام Geometry پشتیبانی می کند. اینها شامل عملیات بر روی هندسه های منفرد مانند محاسبه بافر، مرکز، جعبه مرزی، محیط، بدنه محدب و غیره است. به عنوان مثال:

ویرایشگر کد (جاوا اسکریپت)

// 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 ) و هندسه‌هایی که با قانون «زوج-فرد» ایجاد می‌شوند، مثال زیر یک نقطه را با دو چند ضلعی مختلف مقایسه می‌کند:

ویرایشگر کد (جاوا اسکریپت)

// 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 بر نتیجه زمانی که یک چند ضلعی سمت چپ ساخته می شود، تأثیر می گذارد. به طور خاص، نقطه خارج از چند ضلعی سمت چپ و درون چند ضلعی زوج و فرد است.

مثال زیر هندسه های مشتق شده را بر اساس رابطه بین دو چندضلعی محاسبه و تجسم می کند:

ویرایشگر کد (جاوا اسکریپت)

// 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 ارائه می شود، انجام می دهد. همچنین می‌توانید در صورت لزوم، پیش‌بینی خاصی را برای انجام محاسبات مشخص کنید.