Earth Engine hỗ trợ nhiều thao tác trên các đối tượng Geometry
.
Các phép toán này bao gồm các phép toán trên từng hình học riêng lẻ, chẳng hạn như tính toán vùng đệm, tâm điểm, hộp giới hạn, chu vi, hình lồi, v.v. Ví dụ:
Trình soạn thảo mã (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');
Quan sát từ ví dụ trước, bạn có thể thấy khoảng đệm được chỉ định bằng mét.
Các phép toán hình học được hỗ trợ cũng bao gồm các phép tính quy chiếu giữa các hình học, chẳng hạn như giao nhau, hợp nhất, chênh lệch, khoảng cách, chứa, v.v. Để kiểm thử một số mối quan hệ này, theo mặc định, các hình học sử dụng quy tắc "chẵn-lẻ". Theo quy tắc chẵn-lẻ, một điểm nằm bên trong đa giác nếu một đường từ điểm đó đến một điểm nào đó được biết là nằm bên ngoài đa giác cắt qua một số lẻ các cạnh khác. Bên trong đa giác là mọi thứ bên trong vỏ chứ không phải bên trong lỗ. Ví dụ đơn giản: một điểm trong đa giác hình tròn phải đi qua đúng một cạnh để thoát khỏi đa giác. Các hình học có thể tuỳ ý sử dụng quy tắc "bên trái bên trong" nếu cần. Hãy tưởng tượng bạn đi qua các điểm của một vòng tròn theo thứ tự đã cho; bên trong sẽ ở bên trái.
Để minh hoạ sự khác biệt giữa các hình học được tạo bằng quy tắc "bên trái bên trong" (evenOdd: false
) và các hình học được tạo bằng quy tắc "chẵn-lẻ", ví dụ sau đây so sánh một điểm với hai đa giác khác nhau:
Trình soạn thảo mã (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
Ví dụ trước minh hoạ cách thứ tự toạ độ được cung cấp cho hàm khởi tạo Polygon
ảnh hưởng đến kết quả khi tạo một đa giác bên trái bên trong. Cụ thể, điểm này nằm bên ngoài đa giác bên trái nhưng bên trong đa giác chẵn-lẻ.
Ví dụ sau đây tính toán và trực quan hoá các hình học phái sinh dựa trên mối quan hệ giữa hai đa giác:
Trình soạn thảo mã (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');
Trong các ví dụ này, hãy lưu ý rằng tham số maxError
được đặt thành một mét cho các phép toán hình học. maxError
là sai số tối đa cho phép, tính bằng mét, từ các phép biến đổi (chẳng hạn như chiếu hoặc chiếu lại) có thể làm thay đổi hình học. Nếu một trong các hình học có hình chiếu khác với hình chiếu còn lại, Earth Engine sẽ thực hiện phép tính trong hệ toạ độ hình cầu, với độ chính xác hình chiếu do maxError
cung cấp. Bạn cũng có thể chỉ định một phép chiếu cụ thể để thực hiện phép tính, nếu cần.