L'interpolation de vecteurs vers des rasters dans Earth Engine crée un Image
à partir d'un FeatureCollection
. Plus précisément, Earth Engine utilise des données numériques stockées dans une propriété des éléments géographiques pour interpoler des valeurs à de nouveaux emplacements en dehors des éléments géographiques. L'interpolation génère une Image
continue de valeurs interpolées jusqu'à la distance spécifiée.
Interpolation pondérée par la distance inverse
La fonction pondération de la distance inverse (IDW) dans Earth Engine est basée sur la méthode décrite par Basso et al. (1999). Un paramètre de contrôle supplémentaire est ajouté sous la forme d'un facteur de décroissance (gamma
) sur la distance inverse. Les autres paramètres incluent la moyenne et l'écart type de la propriété à interpoler, ainsi que la distance maximale sur laquelle effectuer l'interpolation. L'exemple suivant crée une surface interpolée de la
concentration en méthane pour combler les lacunes spatiales dans l'ensemble de données raster d'origine. FeatureCollection
est généré en échantillonnant un composite de méthane sur deux semaines.
// 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');
Notez que, comme indiqué par le paramètre range
, l'interpolation n'existe que jusqu'à 70 km de la station de mesure la plus proche.
Kriging
La krigeage est une méthode d'interpolation qui utilise une estimation modélisée de la semi-variance pour créer une image de valeurs interpolées qui est une combinaison optimale des valeurs à des emplacements connus. L'estimateur de Kriging nécessite des paramètres qui décrivent la forme d'un semi-variogramme ajusté aux points de données connus. Ces paramètres sont illustrés dans la figure 1.

nugget
, sill
et range
illustrés sur une fonction variograme idéalisée.
L'exemple suivant échantillonne une image de la température de surface de la mer (TSM) à des emplacements aléatoires, puis interpole la TSM à partir de l'échantillon à l'aide de 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 taille du voisinage dans lequel effectuer l'interpolation est spécifiée par le paramètre maxDistance
. Les tailles plus importantes génèrent des résultats plus fluides, mais des calculs plus lents.