Lưu-Kết hợp tốt nhất

Để chỉ lưu kết quả phù hợp nhất cho mỗi phần tử trong một bộ sưu tập, hãy sử dụng ee.Join.saveBest(). Hàm hợp nhất saveBest() hoạt động tương đương với hàm hợp nhất saveAll(), ngoại trừ mỗi phần tử trong tập hợp primary, hàm này sẽ lưu phần tử từ tập hợp secondary có độ khớp cao nhất. Các phần tử không khớp trong tập hợp chính sẽ bị loại bỏ. Giả sử bạn muốn tìm hình ảnh khí tượng gần nhất về thời gian với từng hình ảnh Landsat trong tập hợp primary. Để thực hiện mối liên kết này, bạn phải xác định lại ee.Filter cho một điều kiện liên kết (các bộ lọc kết hợp sẽ không hoạt động với saveBest() vì không rõ cách kết hợp các thứ hạng từ nhiều Bộ lọc phụ):

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: GRIDMET meteorological data
var gridmet = ee.ImageCollection('IDAHO_EPSCOR/GRIDMET');

// Define a max difference filter to compare timestamps.
var maxDiffFilter = ee.Filter.maxDifference({
  difference: 2 * 24 * 60 * 60 * 1000,
  leftField: 'system:time_start',
  rightField: 'system:time_start'
});

// Define the join.
var saveBestJoin = ee.Join.saveBest({
  matchKey: 'bestImage',
  measureKey: 'timeDiff'
});

// Apply the join.
var landsatMet = saveBestJoin.apply(primary, gridmet, maxDiffFilter);

// Print the result.
print(landsatMet);

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

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: GRIDMET meteorological data
gridmet = ee.ImageCollection('IDAHO_EPSCOR/GRIDMET')

# Define a max difference filter to compare timestamps.
max_diff_filter = ee.Filter.maxDifference(
    difference=2 * 24 * 60 * 60 * 1000,
    leftField='system:time_start',
    rightField='system:time_start',
)

# Define the join.
save_best_join = ee.Join.saveBest(matchKey='bestImage', measureKey='timeDiff')

# Apply the join.
landsat_met = save_best_join.apply(primary, gridmet, max_diff_filter)

# Print the result.
display(landsat_met)

Xin lưu ý rằng mối nối saveBest() xác định tên của thuộc tính để lưu trữ kết quả phù hợp nhất (‘bestImage’) và tên của thuộc tính để lưu trữ độ phù hợp của chỉ số so khớp (‘timeDiff’). Việc kiểm tra kết quả cho thấy một hình ảnh DAYMET phù hợp đã được thêm vào thuộc tính bestImage cho mỗi cảnh Landsat trong tập hợp primary. Mỗi hình ảnh DAYMET này có thuộc tính timeDiff cho biết chênh lệch thời gian tính bằng mili giây giữa hình ảnh DAYMET và hình ảnh Landsat. Đây sẽ là chênh lệch thời gian tối thiểu trong số các hình ảnh DAYMET đáp ứng điều kiện trong bộ lọc.