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.
Force an image to be computed in a given projection and resolution.
Usage
Returns
Image.reproject(crs, crsTransform, scale)
Image
Argument
Type
Details
this: image
Image
The image to reproject.
crs
Projection
The CRS to project the image to.
crsTransform
List, default: null
The list of CRS transform values. This is a row-major ordering of the 3x2 transform matrix. This option is mutually exclusive with the scale option, and replaces any transform already on the projection.
scale
Float, default: null
If scale is specified, then the projection is scaled by dividing the specified scale value by the nominal size of a meter in the specified projection. If scale is not specified, then the scale of the given projection will be used.
[[["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 2024-07-13 UTC."],[[["\u003cp\u003e\u003ccode\u003eImage.reproject()\u003c/code\u003e forces an image to be computed in a specified projection and resolution, often for analysis or visualization purposes.\u003c/p\u003e\n"],["\u003cp\u003eThis method is generally avoided and should primarily be used when other methods for setting projection and scale are unavailable.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003ecrs\u003c/code\u003e and \u003ccode\u003escale\u003c/code\u003e or \u003ccode\u003ecrsTransform\u003c/code\u003e parameters control the reprojection; the latter offers more precise control.\u003c/p\u003e\n"],["\u003cp\u003eSetting the default projection using \u003ccode\u003esetDefaultProjection\u003c/code\u003e is an alternative for image composites, avoiding resampling inherent in \u003ccode\u003ereproject\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eReprojection is crucial for tasks like terrain analysis where pixel scale significantly affects results.\u003c/p\u003e\n"]]],[],null,["# ee.Image.reproject\n\nForce an image to be computed in a given projection and resolution.\n\n\u003cbr /\u003e\n\n| Usage | Returns |\n|------------------------------------------------------|---------|\n| Image.reproject`(crs, `*crsTransform* `, `*scale*`)` | Image |\n\n| Argument | Type | Details |\n|----------------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| this: `image` | Image | The image to reproject. |\n| `crs` | Projection | The CRS to project the image to. |\n| `crsTransform` | List, default: null | The list of CRS transform values. This is a row-major ordering of the 3x2 transform matrix. This option is mutually exclusive with the scale option, and replaces any transform already on the projection. |\n| `scale` | Float, default: null | If scale is specified, then the projection is scaled by dividing the specified scale value by the nominal size of a meter in the specified projection. If scale is not specified, then the scale of the given projection will be used. |\n\nExamples\n--------\n\n### Code Editor (JavaScript)\n\n```javascript\n// Use of ee.Image.reproject is rarely needed and should generally be avoided.\n// Defining the projection and scale of analysis should be handled by \"scale\",\n// \"crs\", and \"crsTransform\" parameters whenever they are offered by a function.\n// It is occasionally useful for forcing computation or visualization at a\n// desired scale and projection when alternative methods are not available. In\n// this example it is used to compute and visualize terrain slope from a DEM\n// composite.\n\n// Calculate mean elevation from two DEM datasets. The resulting composite\n// image has a default CRS of WGS84 with 1 degree pixels.\nvar dem1 = ee.Image('NASA/NASADEM_HGT/001').select('elevation');\nvar dem2 = ee.Image('CGIAR/SRTM90_V4').select('elevation');\nvar demMean = ee.ImageCollection([dem1, dem2]).mean();\n\n// Display the DEMs on the map, note that they all render as expected.\nvar demVisParams = {min: 500, max: 2500};\nMap.setCenter(-123.457, 47.815, 11);\nMap.addLayer(dem1, demVisParams, 'DEM 1');\nMap.addLayer(dem2, demVisParams, 'DEM 2');\nMap.addLayer(demMean, demVisParams, 'DEM composite');\n\n// Calculate terrain slope from the composite DEM (WGS84, 1 degree pixel scale).\nvar demCompSlope = ee.Terrain.slope(demMean);\n\n// Because the composite has 1 degree pixel scale, the slope calculation\n// is essenstially meaningless and difficult to even display (you may need to\n// zoom out to see the individual 1 degree pixels).\nMap.addLayer(demCompSlope, {min: 0, max: 0.3}, 'Slope');\n\n// We can use ee.Image.reproject to force the slope calculation and display\n// the result with a reasonable scale of 30 m on WGS84 CRS, for example.\nvar slopeScale = ee.Terrain.slope(\n demMean.reproject({\n crs: 'EPSG:4326',\n scale: 30\n })\n);\nMap.addLayer(slopeScale, {min: 0, max: 45}, 'Slope w/ CRS and scale');\n\n// To more precisely control the reprojection, you can use the \"crsTransform\"\n// parameter instead of the \"scale\" parameter or set the projection according to\n// a reference image. For example, here the input composite image for the slope\n// function is set to match the grid spacing and alignment of the NASADEM image.\nvar nasademProj = dem1.projection();\nvar demMeanReproj = demMean.reproject(nasademProj);\nvar slopeRefProj = ee.Terrain.slope(demMeanReproj);\nMap.addLayer(slopeRefProj, {min: 0, max: 45}, 'Slope w/ reference proj');\nprint('Reference projection', nasademProj);\nprint('DEM composite projection', demMeanReproj.projection());\n\n// An alternative method for changing the projection of image composites\n// (not accepting the default WGS84 CRS with 1 degree pixel scale) is to\n// explicitly set the default projection using ee.Image.setDefaultProjection,\n// which will not force resampling, like ee.Image.reproject will.\nvar demMeanProj = ee.ImageCollection([dem1, dem2]).mean()\n .setDefaultProjection(nasademProj);\nvar slopeProj = ee.Terrain.slope(demMeanProj);\nMap.addLayer(slopeProj, {min: 0, max: 45}, 'slope w/ default projection set');\n```\nPython setup\n\nSee the [Python Environment](/earth-engine/guides/python_install) page for information on the Python API and using\n`geemap` for interactive development. \n\n```python\nimport ee\nimport geemap.core as geemap\n```\n\n### Colab (Python)\n\n```python\n# Use of ee.Image.reproject is rarely needed and should generally be avoided.\n# Defining the projection and scale of analysis should be handled by \"scale\",\n# \"crs\", and \"crsTransform\" parameters whenever they are offered by a function.\n# It is occasionally useful for forcing computation or visualization at a\n# desired scale and projection when alternative methods are not available. In\n# this example it is used to compute and visualize terrain slope from a DEM\n# composite.\n\n# Calculate mean elevation from two DEM datasets. The resulting composite\n# image has a default CRS of WGS84 with 1 degree pixels.\ndem_1 = ee.Image('NASA/NASADEM_HGT/001').select('elevation')\ndem_2 = ee.Image('CGIAR/SRTM90_V4').select('elevation')\ndem_mean = ee.ImageCollection([dem_1, dem_2]).mean()\n\n# Display the DEMs on the map, note that they all render as expected.\ndem_vis_params = {'min': 500, 'max': 2500}\nm = geemap.Map()\nm.set_center(-123.457, 47.815, 11)\nm.add_layer(dem_1, dem_vis_params, 'DEM 1')\nm.add_layer(dem_2, dem_vis_params, 'DEM 2')\nm.add_layer(dem_mean, dem_vis_params, 'DEM composite')\n\n# Calculate terrain slope from the composite DEM (WGS84, 1 degree pixel scale).\ndem_comp_slope = ee.Terrain.slope(dem_mean)\n\n# Because the composite has 1 degree pixel scale, the slope calculation\n# is essenstially meaningless and difficult to even display (you may need to\n# zoom out to see the individual 1 degree pixels).\nm.add_layer(dem_comp_slope, {'min': 0, 'max': 0.3}, 'Slope')\n\n# We can use ee.Image.reproject to force the slope calculation and display\n# the result with a reasonable scale of 30 m on WGS84 CRS, for example.\nslope_scale = ee.Terrain.slope(dem_mean.reproject(crs='EPSG:4326', scale=30))\nm.add_layer(slope_scale, {'min': 0, 'max': 45}, 'Slope w/ CRS and scale')\n\n# To more precisely control the reprojection, you can use the \"crsTransform\"\n# parameter instead of the \"scale\" parameter or set the projection according to\n# a reference image. For example, here the input composite image for the slope\n# function is set to match the grid spacing and alignment of the NASADEM image.\nnasadem_proj = dem_1.projection()\ndem_mean_reproj = dem_mean.reproject(nasadem_proj)\nslope_ref_proj = ee.Terrain.slope(dem_mean_reproj)\nm.add_layer(slope_ref_proj, {'min': 0, 'max': 45}, 'Slope w/ reference proj')\ndisplay('Reference projection', nasadem_proj)\ndisplay('DEM composite projection', dem_mean_reproj.projection())\n\n# An alternative method for changing the projection of image composites\n# (not accepting the default WGS84 CRS with 1 degree pixel scale) is to\n# explicitly set the default projection using ee.Image.setDefaultProjection,\n# which will not force resampling, like ee.Image.reproject will.\ndem_mean_proj = (\n ee.ImageCollection([dem_1, dem_2]).mean().setDefaultProjection(nasadem_proj)\n)\nslope_proj = ee.Terrain.slope(dem_mean_proj)\nm.add_layer(\n slope_proj, {'min': 0, 'max': 45}, 'slope w/ default projection set'\n)\nm\n```"]]