Вектор в растровую интерполяцию

Интерполяция вектора в растр в Earth Engine создает Image из FeatureCollection . В частности, Earth Engine использует числовые данные, хранящиеся в свойстве объектов, для интерполяции значений в новых местах за пределами объектов. Результатом интерполяции является непрерывное Image интерполированных значений до указанного расстояния.

Интерполяция, взвешенная по обратному расстоянию

Функция обратного взвешивания расстояния (IDW) в Earth Engine основана на методе, описанном Бассо и др. (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 километров от ближайшей измерительной станции.

Кригинг

Кригинг — это метод интерполяции, который использует смоделированную оценку полудисперсии для создания изображения интерполированных значений, которое представляет собой оптимальную комбинацию значений в известных местах. Для оценки Кригинга требуются параметры, описывающие форму полувариограммы, соответствующую известным точкам данных. Эти параметры иллюстрируются рисунком 1.

вариограмма
Рисунок 1. Параметры nugget , sill и range проиллюстрированные на идеализированной функции вариограммы.

В следующем примере выполняется выборка изображения температуры поверхности моря (SST) в случайных местах, а затем интерполяция SST из выборки с помощью кригинга:

// 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 . Большие размеры приведут к более плавному выводу, но к более медленным вычислениям.