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