פעולות גיאומטריות

ב-Earth Engine יש תמיכה במגוון רחב של פעולות על אובייקטים מסוג Geometry. אלה כוללות פעולות על גיאומטריות ספציפיות, כמו חישוב של מאגר, מרכז כובד, תיבת מלבנית, היקף, פוליגון קמור וכו'. לדוגמה:

Code Editor‏ (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) לבין גיאומטריות שנוצרו לפי הכלל 'זוגי-לא זוגי', בדוגמה הבאה מוצגת השוואה בין נקודה לשני פוליגונים שונים:

Code Editor‏ (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 משפיע על התוצאה כשאתם יוצרים פוליגון שמופיע בצד ימין בתוך פוליגון אחר. באופן ספציפי, הנקודה נמצאת מחוץ לפוליגון הימני הפנימי, אבל בתוך הפוליגון הזוגי-לא-זוגי.

בדוגמה הבאה מחושב ומופיע באופן חזותי גיאומטריה נגזרת על סמך הקשר בין שני פוליגונים:

Code Editor‏ (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. אם צריך, אפשר גם לציין הקרנה ספציפית שבה יתבצע החישוב.