אינטרפולציה של וקטור לרשת (raster)

אינטרפולציה מוקטור לרשת (raster) ב-Earth Engine יוצרת Image מ-FeatureCollection. באופן ספציפי, מערכת Earth Engine משתמשת בנתונים מספריים שמאוחסנים במאפיין של התכונות כדי לבצע אינטרפולציה של ערכים במיקומים חדשים מחוץ לתכונות. התוצאה של הביניים היא Image רציף של ערכים ביניים עד למרחק שצוין.

אינטרפולציה משוקלת לפי מרחק הפוך

הפונקציה של משקל המרחק ההופכי (IDW) ב-Earth Engine מבוססת על השיטה שמתוארת במאמר של Basso et al. (1999). מוסיפים פרמטר בקרה נוסף בצורת גורם דעיכה (gamma) למרחק ההופכי. פרמטרים אחרים כוללים את הממוצע וסטיית התקן של המאפיין שרוצים לבצע עבורו אינטרפולציה, ואת מרחק הטווח המקסימלי שבו רוצים לבצע אינטרפולציה. בדוגמה הבאה נוצרת פני שטח של ריכוז מתאן שממולאת על ידי אינטרפולציה כדי למלא את הפערים המרחביים במערך הנתונים המקורי של הרשת. הערך של FeatureCollection נוצר על ידי דגימה של תערובת מתאן של שבועיים.

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

שימו לב: כפי שצוין בפרמטר range, האינטרפולציה מתבצעת רק עד 70 ק"מ מתחנת המדידה הקרובה ביותר.

Kriging

Kriging היא שיטת אינטרפולציה שמשתמשת בהערכה לפי מודל של Semi-variance כדי ליצור תמונה של ערכים שהושלמה אינטרפולציה, שהיא שילוב אופטימלי של הערכים במיקומים ידועים. כדי להשתמש באומדן Kriging, צריך פרמטרים שמתארים את הצורה של חצי-ווריגום שמתאים לנקודות הנתונים הידועות. הפרמטרים האלה מפורטים באיור 1.

וריוגראם
איור 1. הפרמטרים nugget, ‏ sill ו-range מפורטים בתרשים של פונקציית וריוגראם אידיאלית.

בדוגמה הבאה נלקחות דגימות מתוך תמונה של טמפרטורת פני הים (SST) במיקומים אקראיים, ואז מתבצעת אינטרפולציה של SST מהדגימה באמצעות 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);

גודל השכונה שבה מתבצעת הבינוי מוגדר על ידי הפרמטר maxDistance. גדלים גדולים יותר יגרמו לפלט חלק יותר, אבל לחישוב איטי יותר.