Lưu mối nối là một cách thể hiện mối quan hệ một với nhiều trong Earth Engine.
Không giống như phép nối nội bộ, phép nối lưu trữ các kết quả trùng khớp từ tập hợp secondary
dưới dạng một thuộc tính có tên của các đặc điểm trong tập hợp primary
. Để lưu tất cả các kết quả trùng khớp như vậy, hãy sử dụng ee.Join.saveAll()
. Nếu có mối quan hệ một với nhiều, thì một phép nối saveAll()
sẽ lưu trữ tất cả các tính năng trùng khớp dưới dạng một ee.List
. Các phần tử không khớp trong bộ sưu tập primary
sẽ bị loại bỏ. Ví dụ: giả sử bạn cần lấy tất cả hình ảnh MODIS thu được trong vòng hai ngày kể từ mỗi hình ảnh Landsat trong một bộ sưu tập. Ví dụ này sử dụng một phép nối saveAll()
cho mục đích đó:
Trình soạn thảo mã (JavaScript)
// Load a primary collection: Landsat imagery. var primary = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterDate('2014-04-01', '2014-06-01') .filterBounds(ee.Geometry.Point(-122.092, 37.42)); // Load a secondary collection: MODIS imagery. var modSecondary = ee.ImageCollection('MODIS/006/MOD09GA') .filterDate('2014-03-01', '2014-07-01'); // Define an allowable time difference: two days in milliseconds. var twoDaysMillis = 2 * 24 * 60 * 60 * 1000; // Create a time filter to define a match as overlapping timestamps. var timeFilter = ee.Filter.or( ee.Filter.maxDifference({ difference: twoDaysMillis, leftField: 'system:time_start', rightField: 'system:time_end' }), ee.Filter.maxDifference({ difference: twoDaysMillis, leftField: 'system:time_end', rightField: 'system:time_start' }) ); // Define the join. var saveAllJoin = ee.Join.saveAll({ matchesKey: 'terra', ordering: 'system:time_start', ascending: true }); // Apply the join. var landsatModis = saveAllJoin.apply(primary, modSecondary, timeFilter); // Display the result. print('Join.saveAll:', landsatModis);
import ee import geemap.core as geemap
Colab (Python)
# Load a primary collection: Landsat imagery. primary = ( ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterDate('2014-04-01', '2014-06-01') .filterBounds(ee.Geometry.Point(-122.092, 37.42)) ) # Load a secondary collection: MODIS imagery. mod_secondary = ee.ImageCollection('MODIS/006/MOD09GA').filterDate( '2014-03-01', '2014-07-01' ) # Define an allowable time difference: two days in milliseconds. two_days_millis = 2 * 24 * 60 * 60 * 1000 # Create a time filter to define a match as overlapping timestamps. time_filter = ee.Filter.Or( ee.Filter.maxDifference( difference=two_days_millis, leftField='system:time_start', rightField='system:time_end', ), ee.Filter.maxDifference( difference=two_days_millis, leftField='system:time_end', rightField='system:time_start', ), ) # Define the join. save_all_join = ee.Join.saveAll( matchesKey='terra', ordering='system:time_start', ascending=True ) # Apply the join. landsat_modis = save_all_join.apply(primary, mod_secondary, time_filter) # Display the result. display('Join.saveAll:', landsat_modis)
Trong ví dụ này, xin lưu ý rằng tập hợp MODIS secondary
được lọc trước để có thứ tự tương tự như tập hợp Landsat primary
để tăng hiệu quả. Để so sánh thời gian thu thập của Landsat với thời gian tổng hợp của MODIS (có phạm vi hằng ngày), bộ lọc sẽ so sánh các điểm cuối của dấu thời gian hình ảnh. Liên kết được xác định bằng tên của thuộc tính dùng để lưu trữ danh sách các kết quả trùng khớp cho mỗi hình ảnh Landsat (‘terra’
) và tham số không bắt buộc để sắp xếp danh sách các kết quả trùng khớp theo thuộc tính system:time_start
Kết quả kiểm tra cho thấy các hình ảnh trong bộ sưu tập chính có thuộc tính terra
đã thêm, thuộc tính này lưu trữ danh sách các hình ảnh MODIS trùng khớp.