Earth Engine mendukung berbagai operasi pada objek Geometry
.
Hal ini mencakup operasi pada setiap geometri seperti menghitung buffer,
centroid, bounding box, perimeter, convex hull, dll. Misalnya:
Editor Kode (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');
Perhatikan dari contoh sebelumnya bahwa jarak buffer ditentukan dalam meter.
Operasi geometris yang didukung juga mencakup komputasi relasional antara geometri seperti persimpangan, gabungan, perbedaan, jarak, berisi, dll. Untuk menguji beberapa hubungan ini, geometri menggunakan aturan “genap-ganjil” secara default. Berdasarkan aturan genap-ganjil, titik berada di dalam poligon jika garis dari titik tersebut ke beberapa titik yang diketahui berada di luar poligon melintasi jumlah ganjil tepi lainnya. Bagian dalam poligon adalah semua yang ada di dalam cangkang, bukan di dalam lubang. Sebagai contoh sederhana, titik dalam poligon melingkar harus melintasi tepat satu tepi untuk keluar dari poligon. Secara opsional, geometri dapat menggunakan aturan "kiri-dalam", jika diperlukan. Bayangkan melangkahi titik-titik lingkaran dalam urutan yang diberikan; bagian dalamnya akan berada di sebelah kiri.
Untuk menunjukkan perbedaan antara geometri yang dibuat dengan aturan "kiri-dalam" (evenOdd: false
) dan yang dibuat dengan aturan "genap-ganjil", contoh berikut membandingkan titik dengan dua poligon yang berbeda:
Editor Kode (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
Contoh sebelumnya menunjukkan bagaimana urutan koordinat yang diberikan ke
konstruktor Polygon
memengaruhi hasil saat poligon kiri-dalam
dibuat. Secara khusus, titik berada di luar poligon kiri-dalam, tetapi di dalam
poligon genap-ganjil.
Contoh berikut menghitung dan memvisualisasikan geometri turunan berdasarkan hubungan antara dua poligon:
Editor Kode (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');
Dalam contoh ini, perhatikan bahwa parameter maxError
ditetapkan ke satu meter untuk
operasi geometri. maxError
adalah error maksimum yang diizinkan, dalam
meter, dari transformasi (seperti proyeksi atau re-proyeksi) yang dapat mengubah
geometri. Jika salah satu geometri berada dalam proyeksi yang berbeda dari yang lain, Earth Engine akan melakukan komputasi dalam sistem koordinat bola, dengan presisi proyeksi yang diberikan oleh maxError
. Anda juga dapat menentukan proyeksi tertentu untuk
melakukan komputasi, jika diperlukan.