Interpolasi Vektor ke Raster

Interpolasi dari vektor ke raster di Earth Engine akan membuat Image dari FeatureCollection. Secara khusus, Earth Engine menggunakan data numerik yang disimpan di properti fitur untuk melakukan interpolasi nilai di lokasi baru di luar fitur. Interpolasi menghasilkan Image berkelanjutan dari nilai yang diinterpolasi hingga jarak yang ditentukan.

Interpolasi Berbobot Jarak Invers

Fungsi inverse distance weighting (IDW) di Earth Engine didasarkan pada metode yang dijelaskan oleh Basso et al. (1999). Parameter kontrol tambahan ditambahkan dalam bentuk faktor peluruhan (gamma) pada jarak terbalik. Parameter lainnya mencakup rata-rata dan simpangan baku properti yang akan diinterpolasi dan jarak rentang maksimum yang akan diinterpolasi. Contoh berikut membuat permukaan interpolasi dari konsentrasi metana untuk mengisi celah spasial dalam set data raster asli. FeatureCollection dihasilkan dengan mengambil sampel komposit metana selama dua minggu.

// 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');

Perhatikan bahwa, seperti yang ditentukan oleh parameter range, interpolasi hanya ada hingga 70 kilometer dari stasiun pengukuran terdekat.

Kriging

Kriging adalah metode interpolasi yang menggunakan estimasi semi-varian yang dimodelkan untuk membuat gambar nilai interpolasi yang merupakan kombinasi optimal dari nilai di lokasi yang diketahui. Estimator Kriging memerlukan parameter yang menjelaskan bentuk semi-variogram yang sesuai dengan titik data yang diketahui. Parameter ini diilustrasikan oleh Gambar 1.

variogram
Gambar 1. Parameter nugget, sill, dan range diilustrasikan pada fungsi variogram yang diidealkan.

Contoh berikut mengambil sampel gambar suhu permukaan laut (SST) di lokasi acak, lalu melakukan interpolasi SST dari sampel menggunakan 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);

Ukuran lingkungan tempat melakukan interpolasi ditentukan oleh parameter maxDistance. Ukuran yang lebih besar akan menghasilkan output yang lebih lancar, tetapi komputasi yang lebih lambat.