L'interpolazione da vettoriale a raster in Earth Engine crea un Image
da un FeatureCollection
. Nello specifico, Earth Engine utilizza i dati numerici memorizzati in una proprietà degli elementi per interpolare i valori in nuove posizioni al di fuori degli elementi. L'interpolazione genera un Image
continuo di valori interpolati fino alla distanza specificata.
Interpolazione ponderata inversa della distanza
La funzione di ponderazione inversa della distanza (IDW) in Earth Engine si basa sul metodo
descritto da
Basso
et al. (1999). Viene aggiunto un parametro di controllo aggiuntivo sotto forma di
fattore di decadimento (gamma
) sulla distanza inversa. Altri parametri includono la media e la deviazione standard della proprietà da interpolare e la distanza massima dell'intervallo su cui eseguire l'interpolazione. L'esempio seguente crea una superficie interpolata di
concentrazione di metano per colmare le lacune spaziali nel set di dati raster originale. Il valore
FeatureCollection
viene generato campionando un composito di metano di due settimane.
// 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');
Tieni presente che, come specificato dal parametro range
, l'interpolazione è valida solo fino a 70 chilometri dalla stazione di misurazione più vicina.
Kriging
La kriging è un metodo di interpolazione che utilizza una stima modellata della semivarianza per creare un'immagine dei valori interpolati che è una combinazione ottimale dei valori in località note. L'estimatore Kriging richiede parametri che descrivono la forma di un semivariogramma adattato ai punti di dati noti. Questi parametri sono illustrati nella Figura 1.

nugget
, sill
e range
illustrati su una funzione di variogramma idealizzata.
L'esempio seguente acquisisce un'immagine della temperatura superficiale del mare (SST) in posizioni casuali, quindi interpola la SST dal campione utilizzando 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);
La dimensione del vicinato in cui eseguire l'interpolazione è specificata dal
parametro maxDistance
. Dimensioni maggiori comportano un output più fluido, ma calcoli più lenti.