Nội suy vectơ sang đường quét

Quá trình nội suy từ vectơ sang đường quét trong Earth Engine sẽ tạo ra một Image từ FeatureCollection. Cụ thể, Earth Engine sử dụng dữ liệu dạng số được lưu trữ trong một thuộc tính của các đối tượng để nội suy giá trị tại các vị trí mới bên ngoài các đối tượng đó. Kết quả nội suy sẽ tạo ra một Image liên tục của các giá trị nội suy cho đến khoảng cách được chỉ định.

Nội suy có trọng số theo khoảng cách nghịch đảo

Hàm trọng số theo khoảng cách nghịch đảo (IDW) trong Earth Engine dựa trên phương thức do Basso et al. (1999) mô tả. Một tham số điều khiển bổ sung được thêm vào dưới dạng hệ số suy giảm (gamma) trên khoảng cách nghịch đảo. Các thông số khác bao gồm trung bình và độ lệch chuẩn của thuộc tính cần nội suy và khoảng cách phạm vi tối đa để nội suy. Ví dụ sau đây tạo một bề mặt nội suy của nồng độ khí mê-tan để lấp đầy khoảng trống không gian trong tập dữ liệu đường quét ban đầu. FeatureCollection được tạo bằng cách lấy mẫu một tổ hợp khí mê-tan trong hai tuần.

// Import two weeks of S5P methane and composite by mean.
var ch4 = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_CH4')
  .select('CH4_column_volume_mixing_ratio_dry_air')
  .filterDate('2019-08-01', '2019-08-15')
  .mean()
  .rename('ch4');

// Define an area to perform interpolation over.
var aoi =
  ee.Geometry.Polygon(
    [[[-95.68487605978851, 43.09844605027055],
       [-95.68487605978851, 37.39358590079781],
       [-87.96148738791351, 37.39358590079781],
       [-87.96148738791351, 43.09844605027055]]], null, false);

// Sample the methane composite to generate a FeatureCollection.
var samples = ch4.addBands(ee.Image.pixelLonLat())
  .sample({region: aoi, numPixels: 1500,
    scale:1000, projection: 'EPSG:4326'})
  .map(function(sample) {
    var lat = sample.get('latitude');
    var lon = sample.get('longitude');
    var ch4 = sample.get('ch4');
    return ee.Feature(ee.Geometry.Point([lon, lat]), {ch4: ch4});
  });

// Combine mean and standard deviation reducers for efficiency.
var combinedReducer = ee.Reducer.mean().combine({
  reducer2: ee.Reducer.stdDev(),
  sharedInputs: true});

// Estimate global mean and standard deviation from the points.
var stats = samples.reduceColumns({
  reducer: combinedReducer,
  selectors: ['ch4']});

// Do the interpolation, valid to 70 kilometers.
var interpolated = samples.inverseDistance({
  range: 7e4,
  propertyName: 'ch4',
  mean: stats.get('mean'),
  stdDev: stats.get('stdDev'),
  gamma: 0.3});

// Define visualization arguments.
var band_viz = {
  min: 1800,
  max: 1900,
  palette: ['0D0887', '5B02A3', '9A179B', 'CB4678',
            'EB7852', 'FBB32F', 'F0F921']};

// Display to map.
Map.centerObject(aoi, 7);
Map.addLayer(ch4, band_viz, 'CH4');
Map.addLayer(interpolated, band_viz, 'CH4 Interpolated');

Xin lưu ý rằng, như được chỉ định bởi tham số range, phép nội suy chỉ tồn tại trong phạm vi tối đa 70 km từ trạm đo lường gần nhất.

Kriging

Kriging là một phương pháp nội suy sử dụng giá trị ước tính được mô hình hoá của hệ số biến thiên bán phần để tạo hình ảnh của các giá trị nội suy, là tổ hợp tối ưu của các giá trị tại các vị trí đã biết. Phương pháp ước tính Kriging yêu cầu các thông số mô tả hình dạng của variogram bán phù hợp với các điểm dữ liệu đã biết. Các tham số này được minh hoạ trong Hình 1.

variogram
Hình 1. Các tham số nugget, sillrange được minh hoạ trên một hàm variogram lý tưởng.

Ví dụ sau đây lấy mẫu hình ảnh nhiệt độ bề mặt đại dương (SST) ở các vị trí ngẫu nhiên, sau đó nội suy SST từ mẫu bằng cách sử dụng Kriging:

// Load an image of sea surface temperature (SST).
var sst = ee.Image('NOAA/AVHRR_Pathfinder_V52_L3/20120802025048')
  .select('sea_surface_temperature')
  .rename('sst')
  .divide(100);

// Define a geometry in which to sample points
var geometry = ee.Geometry.Rectangle([-65.60, 31.75, -52.18, 43.12]);

// Sample the SST image at 1000 random locations.
var samples = sst.addBands(ee.Image.pixelLonLat())
  .sample({region: geometry, numPixels: 1000})
  .map(function(sample) {
    var lat = sample.get('latitude');
    var lon = sample.get('longitude');
    var sst = sample.get('sst');
    return ee.Feature(ee.Geometry.Point([lon, lat]), {sst: sst});
  });

// Interpolate SST from the sampled points.
var interpolated = samples.kriging({
  propertyName: 'sst',
  shape: 'exponential',
  range: 100 * 1000,
  sill: 1.0,
  nugget: 0.1,
  maxDistance: 100 * 1000,
  reducer: 'mean',
});

var colors = ['00007F', '0000FF', '0074FF',
              '0DFFEA', '8CFF41', 'FFDD00',
              'FF3700', 'C30000', '790000'];
var vis = {min:-3, max:40, palette: colors};

Map.setCenter(-60.029, 36.457, 5);
Map.addLayer(interpolated, vis, 'Interpolated');
Map.addLayer(sst, vis, 'Raw SST');
Map.addLayer(samples, {}, 'Samples', false);

Kích thước của vùng lân cận để thực hiện nội suy được chỉ định bằng tham số maxDistance. Kích thước lớn hơn sẽ mang lại kết quả mượt mà hơn nhưng tính toán chậm hơn.