Announcement: All noncommercial projects registered to use Earth Engine before April 15, 2025 must verify noncommercial eligibility to maintain Earth Engine access.
Stay organized with collections
Save and categorize content based on your preferences.
Interpolation from vector to raster in Earth Engine creates an Image
from a FeatureCollection. Specifically, Earth Engine uses numeric data
stored in a property of the features to interpolate values at new locations outside
of the features. The interpolation results in a continuous Image of
interpolated values up to the distance specified.
Inverse Distance Weighted Interpolation
The inverse distance weighting (IDW) function in Earth Engine is based on the method
described by
Basso
et al. (1999). An additional control parameter is added in the form of a
decay factor (gamma) on the inverse distance. Other parameters include the
mean and standard deviation of the property to interpolate and the maximum range
distance over which to interpolate. The following example creates an interpolated surface of
methane concentration to fill spatial gaps in the original raster dataset. The
FeatureCollection is generated by sampling a two-week methane composite.
Note that, as specified by the range parameter, the interpolation only
exists up to 70 kilometers from the nearest measurement station.
Kriging
Kriging is an interpolation method
that uses a modeled estimate of
semi-variance to create an image
of interpolated values that is an optimal combination of the values at known locations.
The Kriging estimator requires parameters that describe the shape of a
semi-variogram fit to the known data
points. These parameters are illustrated by Figure 1.
Figure 1. The nugget, sill and range
parameters illustrated on a idealized variogram function.
The following example samples a sea surface temperature (SST) image at random locations,
then interpolates SST from the sample using Kriging:
The size of the neighborhood in which to perform the interpolation is specified by the
maxDistance parameter. Larger sizes will result in smoother output but
slower computations.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2021-05-26 UTC."],[[["\u003cp\u003eEarth Engine interpolates numeric data from vector features to create continuous raster images.\u003c/p\u003e\n"],["\u003cp\u003eInverse Distance Weighting (IDW) interpolation estimates values based on the distance and decay factor from known data points.\u003c/p\u003e\n"],["\u003cp\u003eKriging utilizes a semi-variogram model to produce an optimal interpolation based on spatial relationships of known values.\u003c/p\u003e\n"],["\u003cp\u003eBoth methods offer customizable parameters to control the interpolation process, like range, maximum distance, and model-specific settings.\u003c/p\u003e\n"]]],["Earth Engine interpolates numeric data from a `FeatureCollection` to create a continuous `Image`. Inverse Distance Weighted (IDW) interpolation uses a decay factor (`gamma`) and distance parameters to estimate values, demonstrated by interpolating methane concentration data. Kriging interpolation, another method, uses semi-variance estimates (`nugget`, `sill`, `range`) to generate interpolated values, exemplified through sea surface temperature interpolation. Both methods sample raster data to create `FeatureCollections` for interpolation. The `maxDistance` parameter determines the interpolation neighborhood's size in Kriging.\n"],null,["Interpolation from vector to raster in Earth Engine creates an `Image`\nfrom a `FeatureCollection`. Specifically, Earth Engine uses numeric data\nstored in a property of the features to interpolate values at new locations outside\nof the features. The interpolation results in a continuous `Image` of\ninterpolated values up to the distance specified.\n\nInverse Distance Weighted Interpolation\n\nThe inverse distance weighting (IDW) function in Earth Engine is based on the method\ndescribed by\n[Basso\net al. (1999)](https://ieeexplore.ieee.org/abstract/document/805606). An additional control parameter is added in the form of a\ndecay factor (`gamma`) on the inverse distance. Other parameters include the\nmean and standard deviation of the property to interpolate and the maximum range\ndistance over which to interpolate. The following example creates an interpolated surface of\n[methane concentration](https://developers.google.com/earth-engine/datasets/catalog/COPERNICUS_S5P_OFFL_L3_CH4) to fill spatial gaps in the original raster dataset. The\n`FeatureCollection` is generated by sampling a two-week methane composite. \n\n```gdscript\n// Import two weeks of S5P methane and composite by mean.\nvar ch4 = ee.ImageCollection('COPERNICUS/S5P/OFFL/L3_CH4')\n .select('CH4_column_volume_mixing_ratio_dry_air')\n .filterDate('2019-08-01', '2019-08-15')\n .mean()\n .rename('ch4');\n\n// Define an area to perform interpolation over.\nvar aoi =\n ee.Geometry.Polygon(\n [[[-95.68487605978851, 43.09844605027055],\n [-95.68487605978851, 37.39358590079781],\n [-87.96148738791351, 37.39358590079781],\n [-87.96148738791351, 43.09844605027055]]], null, false);\n\n// Sample the methane composite to generate a FeatureCollection.\nvar samples = ch4.addBands(ee.Image.pixelLonLat())\n .sample({region: aoi, numPixels: 1500,\n scale:1000, projection: 'EPSG:4326'})\n .map(function(sample) {\n var lat = sample.get('latitude');\n var lon = sample.get('longitude');\n var ch4 = sample.get('ch4');\n return ee.Feature(ee.Geometry.Point([lon, lat]), {ch4: ch4});\n });\n\n// Combine mean and standard deviation reducers for efficiency.\nvar combinedReducer = ee.Reducer.mean().combine({\n reducer2: ee.Reducer.stdDev(),\n sharedInputs: true});\n\n// Estimate global mean and standard deviation from the points.\nvar stats = samples.reduceColumns({\n reducer: combinedReducer,\n selectors: ['ch4']});\n\n// Do the interpolation, valid to 70 kilometers.\nvar interpolated = samples.inverseDistance({\n range: 7e4,\n propertyName: 'ch4',\n mean: stats.get('mean'),\n stdDev: stats.get('stdDev'),\n gamma: 0.3});\n\n// Define visualization arguments.\nvar band_viz = {\n min: 1800,\n max: 1900,\n palette: ['0D0887', '5B02A3', '9A179B', 'CB4678',\n 'EB7852', 'FBB32F', 'F0F921']};\n\n// Display to map.\nMap.centerObject(aoi, 7);\nMap.addLayer(ch4, band_viz, 'CH4');\nMap.addLayer(interpolated, band_viz, 'CH4 Interpolated');\n```\n\nNote that, as specified by the `range` parameter, the interpolation only\nexists up to 70 kilometers from the nearest measurement station.\n\nKriging\n\n[Kriging](https://en.wikipedia.org/wiki/Kriging) is an interpolation method\nthat uses a modeled estimate of\n[semi-variance](https://en.wikipedia.org/wiki/Semivariance) to create an image\nof interpolated values that is an optimal combination of the values at known locations.\nThe Kriging estimator requires parameters that describe the shape of a\n[semi-variogram](https://en.wikipedia.org/wiki/Variogram) fit to the known data\npoints. These parameters are illustrated by Figure 1.\nFigure 1. The `nugget`, `sill` and `range` parameters illustrated on a idealized variogram function.\n\nThe following example samples a sea surface temperature (SST) image at random locations,\nthen interpolates SST from the sample using Kriging: \n\n```cplint\n// Load an image of sea surface temperature (SST).\nvar sst = ee.Image('NOAA/AVHRR_Pathfinder_V52_L3/20120802025048')\n .select('sea_surface_temperature')\n .rename('sst')\n .divide(100);\n\n// Define a geometry in which to sample points\nvar geometry = ee.Geometry.Rectangle([-65.60, 31.75, -52.18, 43.12]);\n\n// Sample the SST image at 1000 random locations.\nvar samples = sst.addBands(ee.Image.pixelLonLat())\n .sample({region: geometry, numPixels: 1000})\n .map(function(sample) {\n var lat = sample.get('latitude');\n var lon = sample.get('longitude');\n var sst = sample.get('sst');\n return ee.Feature(ee.Geometry.Point([lon, lat]), {sst: sst});\n });\n\n// Interpolate SST from the sampled points.\nvar interpolated = samples.kriging({\n propertyName: 'sst',\n shape: 'exponential',\n range: 100 * 1000,\n sill: 1.0,\n nugget: 0.1,\n maxDistance: 100 * 1000,\n reducer: 'mean',\n});\n\nvar colors = ['00007F', '0000FF', '0074FF',\n '0DFFEA', '8CFF41', 'FFDD00',\n 'FF3700', 'C30000', '790000'];\nvar vis = {min:-3, max:40, palette: colors};\n\nMap.setCenter(-60.029, 36.457, 5);\nMap.addLayer(interpolated, vis, 'Interpolated');\nMap.addLayer(sst, vis, 'Raw SST');\nMap.addLayer(samples, {}, 'Samples', false);\n```\n\nThe size of the neighborhood in which to perform the interpolation is specified by the\n`maxDistance` parameter. Larger sizes will result in smoother output but\nslower computations."]]