العمليات الهندسية

تتيح أداة 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');

لاحظ من المثال السابق أنّه تم تحديد المسافة الفاصلة بالأمتار.

تشمل العمليات الهندسية المتوافقة أيضًا العمليات الحسابية للعلاقات بين الأشكال الهندسية مثل التقاطع والاتحاد والفرق والمسافة والمحتوى وما إلى ذلك. لاختبار بعض هذه العلاقات، تستخدم الأشكال الهندسية قاعدة "الأرقام الزوجية والفردية" تلقائيًا. وفقًا لقاعدة الأعداد الزوجية والفردية، تكون النقطة داخل المضلع إذا كان الخط من تلك النقطة إلى نقطة أخرى معروفة أنّها خارج المضلع يمر بعدد فردي من الحواف الأخرى. يشير الجزء الداخلي من المضلع إلى كل ما هو داخل القشرة وليس داخل ثقب. على سبيل المثال، يجب أن تعبر نقطة داخل مضلع دائري حافة واحدة بالضبط للخروج من المضلع. يمكن أن تستخدم الأشكال الهندسية بشكل اختياري القاعدة "left-inside"، إذا لزم الأمر. تخيَّل أنّك تسير على نقاط حلقة بالترتيب المحدَّد، وسيكون الجزء الداخلي على يمينك.

لتوضيح الفرق بين الأشكال الهندسية التي تم إنشاؤها باستخدام القاعدة "الجانب الأيسر من الداخل" (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. يمكنك أيضًا تحديد إسقاط محدّد لإجراء عملية الحساب، إذا لزم الأمر.