การดำเนินการเกี่ยวกับเรขาคณิต

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

สังเกตจากตัวอย่างก่อนหน้านี้ว่าระยะบัฟเฟอร์จะระบุเป็นเมตร

การดำเนินการเชิงเรขาคณิตที่รองรับยังรวมถึงการคํานวณเชิงสัมพันธ์ระหว่างเรขาคณิต เช่น การซ้อนทับ การรวม การลบ ระยะทาง ประกอบด้วย ฯลฯ ในการทดสอบความสัมพันธ์บางอย่างเหล่านี้ เรขาคณิตจะใช้กฎ "คู่-คี่" โดยค่าเริ่มต้น ตามกฎคู่-คี่ จุดจะอยู่ภายในรูปหลายเหลี่ยมหากเส้นจากจุดนั้นไปยังจุดที่ทราบว่าอยู่นอกรูปหลายเหลี่ยมตัดกับขอบอื่นๆ เป็นจํานวนคี่ ส่วนด้านในของรูปหลายเหลี่ยมคือทุกอย่างที่อยู่ภายในเปลือก ไม่ใช่ภายในรู ตัวอย่างง่ายๆ คือ จุดภายในรูปหลายเหลี่ยมแบบวงกลมต้องตัดผ่านขอบเพียง 1 เส้นเพื่อออกจากรูปหลายเหลี่ยม เรขาคณิตอาจใช้กฎ "ด้านซ้ายภายใน" ก็ได้ หากจําเป็น ลองจินตนาการว่าคุณเดินไปตามจุดของวงแหวนตามลำดับที่ระบุไว้ โดยด้านในจะอยู่ทางด้านซ้าย

ตัวอย่างต่อไปนี้เปรียบเทียบจุดกับรูปหลายเหลี่ยม 2 รูปที่แตกต่างกันเพื่อแสดงให้เห็นความแตกต่างระหว่างเรขาคณิตที่สร้างด้วยกฎ "ด้านซ้ายด้านใน" (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 ส่งผลต่อผลลัพธ์อย่างไรเมื่อสร้างรูปหลายเหลี่ยมด้านซ้ายด้านใน กล่าวโดยละเอียดคือ จุดอยู่นอกรูปหลายเหลี่ยมด้านในซ้าย แต่อยู่ภายในรูปหลายเหลี่ยมแบบคู่ไม่คู่

ตัวอย่างต่อไปนี้จะคํานวณและแสดงภาพเรขาคณิตที่ดึงข้อมูลตามความสัมพันธ์ระหว่างรูปหลายเหลี่ยม 2 รูป

เครื่องมือแก้ไขโค้ด (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 เป็น 1 เมตรสําหรับการดำเนินการเชิงเรขาคณิต maxError คือข้อผิดพลาดสูงสุดที่อนุญาตเป็นเมตรจากการเปลี่ยนรูปแบบ (เช่น การฉายภาพหรือการฉายภาพใหม่) ที่อาจเปลี่ยนแปลงเรขาคณิต หากเรขาคณิตรายการใดรายการหนึ่งอยู่ในการฉายที่แตกต่างจากรายการอื่น Earth Engine จะทำการประมวลผลในระบบพิกัดทรงกลม โดยมีค่าความแม่นยำของการฉายที่ระบุโดย maxError นอกจากนี้ คุณยังระบุการฉายภาพที่ต้องการใช้คํานวณได้ด้วย หากจําเป็น