La interpolación de vectores a tramas en Earth Engine crea un Image
a partir de un FeatureCollection
. Específicamente, Earth Engine usa datos numéricos almacenados en una propiedad de los componentes para interpolar valores en ubicaciones nuevas fuera de los componentes. La interpolación genera un Image
continuo de valores interpolados hasta la distancia especificada.
Interpolación ponderada por distancia inversa
La función de ponderación de distancia inversa (IDW) en Earth Engine se basa en el método que describieron Basso et al. (1999). Se agrega un parámetro de control adicional en forma de un factor de descomposición (gamma
) en la distancia inversa. Otros parámetros incluyen la media y la desviación estándar de la propiedad que se va a interpolar y la distancia máxima del rango sobre la que se realizará la interpolación. En el siguiente ejemplo, se crea una superficie interpolada de
concentración de metano para llenar las brechas espaciales en el conjunto de datos de ráster original. Para generar el FeatureCollection
, se toma una muestra de un compuesto de metano de dos semanas.
// 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');
Ten en cuenta que, como se especifica en el parámetro range
, la interpolación solo existe hasta 70 kilómetros de la estación de medición más cercana.
Kriging
El kriging es un método de interpolación que usa una estimación modelada de la semivarianza para crear una imagen de valores interpolados que es una combinación óptima de los valores en ubicaciones conocidas. El estimador de Kriging requiere parámetros que describan la forma de un semivariograma ajustado a los datos conocidos. Estos parámetros se ilustran en la Figura 1.

nugget
, sill
y range
se ilustran en una función de variograma idealizada.
En el siguiente ejemplo, se toma una muestra de una imagen de temperatura de la superficie del mar (SST) en ubicaciones aleatorias y, luego, se interpola la SST del muestreo con 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);
El tamaño del vecindario en el que se realizará la interpolación se especifica con el parámetro maxDistance
. Los tamaños más grandes generarán resultados más fluidos, pero con cálculos más lentos.