Vektörden rastere doğrusal olmayan uzamsal interplasyon

Earth Engine'da vektörden rastere doğru interpolasyon, bir FeatureCollection'dan Image oluşturur. Daha açık belirtmek gerekirse Earth Engine, özelliklerin dışındaki yeni konumlardaki değerleri interpole etmek için özelliklerin bir mülkünde depolanan sayısal verileri kullanır. Düzenleme, belirtilen mesafeye kadar Image değerinin kesintisiz bir şekilde aralıklı olarak

Ters Mesafe Ağırlıklı Enterpolasyon

Earth Engine'daki ters mesafe ağırlıklı (IDW) işlevi, Basso ve diğerleri (1999) tarafından açıklanan yönteme dayanır. Ters mesafeye bir azalma faktörü (gamma) şeklinde ek bir kontrol parametresi eklenir. Diğer parametreler arasında, interpolasyon yapılacak mülkün ortalaması ve standart sapması ile interpolasyonun yapılacağı maksimum aralık mesafesi yer alır. Aşağıdaki örnekte, orijinal raster veri kümesindeki boşlukları doldurmak için methan konsantrasyonu için bir ara yüzey oluşturulmaktadır. FeatureCollection, iki haftalık bir metan bileşiği örnek alınarak oluşturulur.

// 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 parametresinde belirtildiği gibi, kesme noktasının yalnızca en yakın ölçüm istasyonuna 70 kilometreye kadar olan mesafede geçerli olduğunu unutmayın.

Kriging

Kriging, bilinen konumlardaki değerlerin optimum bir kombinasyonu olan, yarı varyans modellenmiş tahminini kullanarak, kesikli değerlerin bir resmini oluşturmak için kullanılan bir kesikli değer yöntemidir. Kriging tahmin aracı, bilinen veri noktalarına uygun bir yarı varyogram şeklini tanımlayan parametreler gerektirir. Bu parametreler Şekil 1'de gösterilmiştir.

varyogram
Şekil 1. İdealleştirilmiş bir varyogram işlevinde gösterilen nugget, sill ve range parametreleri.

Aşağıdaki örnekte, deniz yüzeyi sıcaklığı (SST) resminden rastgele konumlarda örnek alınır ve ardından Kriging kullanılarak örnekten SST interpolasyonu yapılır:

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

Doğrusal olmayan enterpolasyonun yapılacağı mahallenin boyutu maxDistance parametresi ile belirtilir. Daha büyük boyutlar daha akıcı çıkışlar sağlar ancak hesaplamalar daha yavaş olur.