Short answer

QGIS and ArcGIS Pro both produce the same fundamental products (slope, aspect, hillshade, contours, viewsheds, watershed delineation, reprojected and print-ready maps), and at the level of a single analysis you can do excellent work in either. The real differences are in cost model, LiDAR and 3D handling, automation ecosystem, enterprise data management, and how visibly each handles datum transformations. QGIS is the open, extensible analytical workbench with free direct access to GDAL, GRASS, and SAGA. ArcGIS Pro is the integrated commercial platform that pays off when you need enterprise geodatabases, managed web sharing, and vendor support. Many serious Earth-data teams run both, plus GDAL and PostGIS underneath, because the right unit of choice is the workflow step, not the brand.

QGIS vs ArcGIS Pro at a glance

QGISArcGIS Pro
PriceFree (GNU GPL), unlimited installsNamed-user subscription, extensions extra
Terrain / DEM toolsBundled: GDAL, GRASS, SAGASpatial Analyst extension (paid)
LiDAR and 3DPDAL point clouds, 3D map viewLAS datasets, terrain datasets, 3D Analyst (paid)
Coordinate enginePROJ (same as GDAL, PostGIS)Esri projection engine
Datum transformationExplicit choice with accuracy estimateAutomatic default, editable
AutomationPyQGIS, Processing, Graphical ModelerArcPy, ModelBuilder, Notebooks
Enterprise dataPostGIS as shared databaseEnterprise geodatabase, versioning
Esri file geodatabaseRead; limited writeFull read/write with domains and relationships
Web publishingQGIS Server, GeoServer, MapLibre, CesiumArcGIS Online / Enterprise, turnkey
SupportCommunity, paid support from partnersVendor support

Comparing them by workflow stage

Data ingest and formats

Both read essentially everything via GDAL/OGR. ArcGIS adds first-class support for its file and enterprise geodatabases (.gdb), the de facto format for standards like GeMS, and reads/writes them natively with full domain, subtype, and relationship-class support. QGIS reads file geodatabases (via the OpenFileGDB driver) but write support is limited. If your data lives in or must ship as an Esri geodatabase with domains and relationship classes intact, ArcGIS is the path of least resistance.

Terrain and DEM analysis

OperationArcGIS ProQGIS
Slope / AspectSpatial Analyst Slope, Aspectgdal:slope, gdal:aspect, GRASS r.slope.aspect, native raster terrain
HillshadeSpatial Analyst Hillshade (incl. multidirectional)gdal:hillshade, GRASS r.relief
CurvatureSpatial Analyst CurvatureGRASS r.slope.aspect (profile/tangential), SAGA
Fill sinksSpatial Analyst FillGRASS r.fill.dir, SAGA Fill Sinks (Wang & Liu)
Flow direction / accumulationSpatial Analyst Flow Direction, Flow Accumulation (D8/DInf/MFD)GRASS r.watershed, SAGA Flow Accumulation (Top-Down)
WatershedSpatial Analyst WatershedGRASS r.water.outlet, r.basin
ViewshedSpatial Analyst Viewshed 2GRASS r.viewshed
LiDAR / TIN3D Analyst terrain datasets, LAS datasetpdal integration, point cloud tools, gdal_grid

The asymmetry that matters: in QGIS these all cost nothing (GRASS ships with the standard installers, and SAGA is available through the free SAGA Next Gen plugin since QGIS 3.30), whereas in ArcGIS the equivalents require the Spatial Analyst and 3D Analyst licenses.

Through SAGA, QGIS also exposes a terrain library (TWI, curvature classes, morphometric features) that has no exact ArcGIS equivalent.

Do they agree? Algorithms and defaults

Slope is the canonical test. Both Esri and GDAL default to Horn's (1981) third-order finite-difference method over a 3×3 window, so on the same projected DEM they typically agree to within rounding. But the defaults that trip people up:

  • Units. GDAL gdaldem slope returns degrees by default; ArcGIS Slope may be templated to percent. Set it explicitly.
  • Geographic CRS Z-scaling. If your DEM is in EPSG:4326 (degrees), horizontal units are degrees while elevation is metres, so raw slope is nonsense. GDAL needs -s (scale) or you reproject; ArcGIS has a Z-factor. The robust fix in either tool is to reproject to a projected, metre-based CRS first (gdalwarp -t_srs EPSG:32630 -r bilinear).
  • Edge handling and NoData. Different tools propagate NoData at borders differently, so a 1-pixel halo can differ.
  • Hillshade. Both default to azimuth 315°, altitude 45°, but ArcGIS multidirectional hillshade has no exact GDAL twin (GDAL offers -multidirectional as an approximation).

Practical takeaway: pick one tool per deliverable, pin every parameter, and validate against the other on a small tile rather than assuming interchangeability.

Hydrology: a genuine difference in philosophy

ArcGIS gives you a tightly integrated, GUI-guided chain (Fill → Flow Direction → Flow Accumulation → Watershed) with D8, D-Infinity, and MFD in one place and good documentation. QGIS routes hydrology mainly through GRASS r.watershed (a single command that computes flow accumulation, drainage direction, and basins, defaulting to an MFD-style algorithm many hydrologists prefer over plain D8) and SAGA terrain hydrology. Neither is "better" universally: ArcGIS is smoother for an analyst clicking through; GRASS/SAGA expose more algorithmic variety and run headless in scripts.

LiDAR and 3D

This is where ArcGIS pulls ahead for some teams. ArcGIS Pro ingests LAS datasets and builds TIN/terrain datasets natively, with strong 3D visualisation in ArcGIS Pro's Scene/Local views. QGIS has improved point-cloud support (COPC/EPT via PDAL) and a 3D map view, but for intensive LiDAR classification, surface modelling, and polished 3D geological scenes, ArcGIS Pro (or specialist tools) is often smoother. For terrain visualisation served to the web, neither desktop tool is the endpoint — that is a Cesium/MapLibre/deck.gl job.

Automation and reproducibility

  • QGIS: PyQGIS, the Processing framework, and the Graphical Modeler for visual pipelines; algorithms are scriptable from a standalone Python process.
  • ArcGIS: ArcPy and ModelBuilder, with a mature, well-documented API and Notebooks integration.

Both are Python-driven and capable. The most portable automation, though, lives below both: GDAL command-line (gdalwarp, gdaldem, gdal_calc.py) and PostGIS SQL run identically regardless of which desktop GIS your colleague opens, which is why repeatable production pipelines often externalise the heavy lifting there.

Data management at scale

ArcGIS with an enterprise geodatabase offers versioned editing, multi-user concurrency, archiving, and replication out of the box. The open-stack equivalent is PostgreSQL/PostGIS, which both QGIS and ArcGIS can edit — a common pattern is PostGIS as the shared spatial database with QGIS as the editing client, giving enterprise-grade data management without per-seat Esri licensing.

Publishing

ArcGIS Online / ArcGIS Enterprise provides turnkey hosted feature/tile services, web maps, and dashboards with managed permissions. The open-stack route — QGIS Server, GeoServer, vector tiles, MapLibre/deck.gl/Cesium — is more assembly but fully under your control and license-free.

Coordinate systems and datum transformations

The real difference between QGIS and ArcGIS for coordinate systems is the engine underneath. QGIS reprojects through PROJ, the open-source library that also powers GDAL, PostGIS, and most of the FOSS4G stack. ArcGIS Pro uses Esri's own projection engine with proprietary geographic (datum) transformation grids. Both read the EPSG registry, both will happily display layers in mixed CRS on the fly, and both produce correct results when you control the transformation. They diverge in how visible and how automatic the datum transformation is — and that, not the projection math, is where accuracy is won or lost.

Projection vs datum transformation

Reprojecting between coordinate systems is two operations, and conflating them causes most CRS confusion.

  1. The map projection converts geodetic latitude/longitude to planar X/Y (Transverse Mercator, Lambert Conformal Conic, and so on). This is deterministic and identical in both tools to floating-point precision.
  2. The datum transformation moves coordinates between different geodetic datums — NAD27 to NAD83, NAD83 to WGS84, ED50 to ETRS89. This is not unique. There are usually several published transformations between any two datums, ranging from a crude 3-parameter shift (good to several metres) to a NTv2 or grid-based shift (good to centimetres). The number you get depends on which transformation is applied.

Where QGIS and ArcGIS disagree, it is almost always step 2. The projection is the same; the chosen datum transformation is not.

How QGIS handles CRS (the PROJ pipeline)

QGIS surfaces PROJ directly. When you reproject and more than one transformation exists, QGIS opens a "Select Transformation" dialog listing each candidate as a full PROJ pipeline string with an accuracy estimate in metres and the area of use. You see, for example, a +proj=hgridshift +grids=us_noaa_... operation versus a null transform, and you choose. The selection is stored per project, so it is auditable.

Practically:

  • EPSG:4267 (NAD27) to EPSG:4269 (NAD83) offers the NADCON grid shift; PROJ will use it if the grid file is installed, and warn you if it is missing and falls back to a less accurate path.
  • You can inspect the exact operation with the command line: projinfo -s EPSG:4267 -t EPSG:4269 -o PROJ lists candidate operations and accuracies.
  • Because GDAL and PostGIS use the same PROJ, a gdalwarp -s_srs EPSG:4267 -t_srs EPSG:4269 -ct "<pipeline>" or a PostGIS ST_Transform will match QGIS exactly when the same pipeline is pinned.

The strength here is consistency across the open stack and total visibility of what was applied. The weakness is that missing grid files silently degrade accuracy unless you read the warning.

How ArcGIS Pro handles CRS

ArcGIS Pro uses Esri's engine and its own transformation catalogue, with grid files shipped as part of the install (the pe_... data). When source and target datums differ, Pro picks a default geographic transformation and lists alternatives under Map Properties → Transformation or in the Project tool's environment. Esri publishes transformation accuracy values too, but the default is applied more automatically — convenient, and the usual reason a Pro user never realises a transformation occurred at all.

Pro's advantages: tight integration with Esri-published datums (including national grids), a curated default that is usually sensible, and consistency across an enterprise geodatabase where the spatial reference is enforced at the feature-class level. Its risk: the automatic default makes it easy to accept a transformation without examining it, and Esri's proprietary grids are not bit-identical to PROJ's for every datum pair.

Why the same data reprojects to two slightly different places

A concrete example: reproject a UK point from EPSG:4326 (WGS84) to EPSG:27700 (OSGB36 / British National Grid).

  • If WGS84→OSGB36 uses the OSTN15 NTv2 grid, you get the official sub-metre result.
  • If it uses a 7-parameter Helmert approximation, you can be off by up to ~2 m in parts of the UK.

QGIS will ask which one (and you should choose the OSTN15 grid, EPSG transformation code 7709). ArcGIS Pro defaults to a sensible transformation but verify it is the grid-based one, not the approximate Helmert. Pin the same EPSG transformation code in both tools and the outputs converge. This is the actionable rule: matching coordinates require matching transformations, not matching software.

Licensing and cost

QGIS is free and GPL-licensed; no per-seat cost, no extension fees, and you can run it on any number of machines. ArcGIS Pro is a paid named-user subscription, with Spatial Analyst, 3D Analyst, and other extensions priced on top, plus credits for some ArcGIS Online operations. For a small consultancy the cost difference is material; for an organisation already standardised on Esri, the marginal cost of another seat is often outweighed by integration and support.

A decision frame

  • Choose QGIS when cost control, openness, scriptability, and the freedom to combine GDAL/GRASS/SAGA/PostGIS matter most — typical for consultancies, research, and bespoke terrain pipelines.
  • Choose ArcGIS Pro when you need enterprise geodatabase management, native LiDAR/3D, geodatabase-based standards (GeMS in .gdb), managed web sharing, and vendor support for regulated deliverables.
  • Use GDAL + PostGIS as the stack-neutral core for anything that must be repeatable and shared, regardless of which desktop GIS sits on top.
  • Raw, unclassified LiDAR; 3D scenes; existing Esri Enterprise → ArcGIS Pro with Spatial and 3D Analyst.
  • Ready DEMs; slope, hillshade and hydrology; tight budget; scripted pipelines → QGIS with GDAL, GRASS and SAGA.
  • Prototype your single hardest step in both before standardising. The bottleneck step (e.g. LiDAR classification, or a 50-layer batch reprojection) should drive the choice.

A practical hybrid architecture

  1. PostGIS as the shared spatial database (versioned, multi-user, SQL-queryable).
  2. GDAL / Python for repeatable batch processing and reprojection.
  3. QGIS and/or ArcGIS Pro as the desktop clients for editing, analysis, and cartography.
  4. MapLibre, deck.gl, or Cesium for interactive web publication of terrain and geology.

This is tool-agnostic by design: analysts use whichever desktop GIS they prefer over a common data and processing core.

Common pitfalls and why they happen

  • Asking "which is best" without naming the workflow — the answer flips depending on whether the binding constraint is cost, LiDAR, sharing, or support.
  • Choosing on license price alone — a free tool that forces manual rework at the bottleneck step can cost more in labour than a license.
  • Doing repeatable jobs by hand in the GUI — a 30-file reproject should be a gdalwarp loop or a Model, not 30 manual exports, in either platform.
  • Picking a web map library before the data model — tile strategy and schema decisions should precede the choice of MapLibre vs Cesium.
  • Locking the whole team to one analyst's habits — undocumented handoffs between tools break reproducibility.
  • Comparing slope outputs that used different units or Z-factors. They look "wrong" but the algorithm agrees; the parameters did not.
  • Running terrain analysis in a geographic CRS. Degrees-vs-metres mismatch makes slope and area meaningless in both tools. Reproject first.
  • Assuming D8 everywhere. ArcGIS Flow Direction defaults to D8; GRASS r.watershed does not. Drainage networks differ accordingly.
  • Comparing coordinates from the two tools without pinning the datum transformation. The discrepancy is the transformation, not a bug.
  • Missing PROJ grid files in QGIS. Without the grid, PROJ falls back to an approximate transform and only warns in the message log.
  • Sharing a ModelBuilder model with someone who lacks the extension. Document licence dependencies.

QA and validation checklist

  • Required formats, CRSs, terrain operations, and web outputs confirmed supported before standardising.
  • Hardest workflow step prototyped in the candidate tool(s).
  • Heavy/repeatable processing externalised to GDAL or PostGIS where possible.
  • Handoff points between tools documented so the workflow does not depend on one person.
  • Licensing footprint (Pro + extensions + credits) costed against labour saved.
  • Same DEM run through gdaldem slope and ArcGIS Slope (matched units and Z-factor) and differenced: agreement within an edge halo confirms both.
  • A control point with published coordinates reprojected in both tools with the same EPSG transformation code; residual matches the stated accuracy.

Bathyl perspective

We are tool-agnostic in the serious sense: a stack earns its place by turning Earth data into a system that can be inspected, repeated, and handed over. We will run ArcGIS Pro where an enterprise geodatabase or native 3D is the binding constraint, and QGIS over PostGIS where openness and scriptability win — and we keep the reproducible core in GDAL and SQL so the work does not live or die with one desktop license.

Related reading

Sources