The short answer
Google Earth Engine (GEE) and desktop GIS solve different problems and most serious workflows use both. Earth Engine is a cloud platform for analysing massive, pre-ingested satellite image collections — running a cloud-free composite over a country, or a 30-year Landsat trend — without downloading the imagery. Desktop GIS (QGIS, ArcGIS Pro) is where you edit vectors, build precise cartography, run detailed local analysis, and produce stakeholder deliverables offline. The question is rarely "which one"; it is "where does each step belong."
The decisive factor is data scale and locality. If the imagery is too large to download and the computation is embarrassingly parallel across pixels and dates, that work belongs in Earth Engine. If the task is interactive, cartographic, or needs full control over every step, it belongs on the desktop.
What Earth Engine actually is
Earth Engine is a planetary-scale raster analysis platform with a multi-petabyte public catalog (the full Landsat archive, Sentinel-1/2, MODIS, climate reanalysis, DEMs such as SRTM and Copernicus GLO-30) already ingested and analysis-ready. You write code in JavaScript (the Code Editor) or Python (the ee client library), and the work runs on Google's servers.
Two properties define the experience:
- Server-side, lazy evaluation. When you write
collection.filterDate(...).median(), nothing computes. You are building a description of a computation. It only runs when you request output — a map tile, a chart, or an export. This is powerful but trips up newcomers who expect immediate, eager results. - Image collections as first-class objects. The unit of work is often a whole stack of images over time, mapped and reduced, not a single raster.
A canonical example — a median cloud-masked Sentinel-2 composite for a year — is a few lines:
var aoi = ee.Geometry.Rectangle([2.0, 41.3, 2.4, 41.6]);
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(aoi)
.filterDate('2025-01-01', '2025-12-31')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.median();
var ndvi = s2.normalizedDifference(['B8', 'B4']).rename('NDVI');
Doing the equivalent on the desktop would mean downloading dozens of multi-gigabyte scenes first.
What desktop GIS does better
QGIS and ArcGIS Pro remain irreplaceable for several things Earth Engine handles poorly or not at all:
- Interactive vector editing — snapping, topology, digitising geological contacts or constraint polygons by hand.
- Cartography and layout — print composers, atlases, legends, labelling engines, and pixel-perfect export for reports.
- Offline and air-gapped work — fieldwork, secure environments, or simply working on a train.
- Fine-grained control of small/medium rasters —
gdaldem, custom resampling, and inspecting individual cell values. - Mixed local data — CAD, surveys, boreholes, and client files that will never be in the Earth Engine catalog.
Earth Engine's own cartographic and editing tools are deliberately thin; it is an analysis engine, not a map-finishing tool.
A hybrid workflow that uses each for its strength
The pragmatic pattern is: compute heavy raster products in Earth Engine, then finish on the desktop.
- Define the area of interest. Either draw it in the GEE Code Editor or upload a GeoJSON/shapefile as an asset.
- Build the product in Earth Engine. Composite, mask clouds, compute indices (NDVI, NDWI), classify, or extract a multi-year trend — work that needs the full archive.
- Export to Drive or Cloud Storage. Pin the CRS and resolution explicitly so the desktop receives a well-defined raster:
Export.image.toDrive({
image: ndvi,
description: 'ndvi_2025_aoi',
region: aoi,
scale: 10,
crs: 'EPSG:25831',
maxPixels: 1e9
});
- Download and load in QGIS. Bring the GeoTIFF into your project, overlay it on local vectors, style it, and run any detailed local analysis.
- Deliver from the desktop. Build the layout, legend, and report there.
For pure visualisation you can shortcut steps 3-4 with the QGIS Google Earth Engine plugin, which streams GEE-rendered tiles into the canvas — useful for inspection, but the authoritative analysis output should be a proper export with a defined CRS and scale.
Common pitfalls and why they happen
- Expecting immediate results. Because evaluation is lazy, nothing appears until you request output; new users think their code "did nothing." Add the layer to the map or call
print()/getInfo()to force evaluation. - Forgetting to set
scaleandcrson export. Earth Engine has no single native resolution; if you omitscale, the export resolution is ambiguous and you may get an unexpected pixel size. Always state both, ideally in your project CRS. - Hitting compute or export limits. Very large exports fail or throw user-memory errors. Tile the export, raise
maxPixelsdeliberately, or reduce the area, rather than assuming the platform is unlimited. - Trying to do cartography or heavy editing in GEE. It is the wrong tool; the layout and editing belong on the desktop.
- Mixing CRSs on download. A GEE export in one CRS overlaid on desktop data in another will not line up. Export in the project CRS or reproject with
gdalwarpon arrival.
Validating Earth Engine output
Treat a GEE export like any other raster before trusting it: confirm the CRS and pixel size with gdalsrsinfo and gdalinfo; check the date range and cloud filter actually match what you intended (a too-strict cloud filter can leave gaps); compare values against a known control area or a single source scene; and inspect the edges of the AOI for partial-scene or composite artefacts.
Bathyl perspective
We use Earth Engine where its scale is decisive — multi-temporal composites, wide-area indices, change over years — and the desktop where control and craft matter, which is editing, cartography, and final delivery. The boundary is set by data scale and the need for interactivity, not by preference. A clean export with an explicit CRS and resolution is the handshake that keeps the cloud and desktop halves of the workflow trustworthy.
Related reading
- PostGIS vs Desktop GIS
- QGIS Plugins for Geology Workflows
- Remote Sensing for Geological Mapping
- Shapefile vs GeoPackage vs GeoJSON
- GIS and spatial analysis