Migrating from ArcMap to QGIS: A Seamless Transition Guide
Introduction: Why migrate from ArcMap to QGIS?
Migrating ArcMap to QGIS is a practical step for GIS professionals, university students, researchers, and organizations that want a modern, sustainable, and cost-effective desktop GIS workflow.
ArcMap, part of the legacy ArcGIS Desktop platform, has long been used for cartography, spatial analysis, geodatabase management, and GIS education. However, Esri retired ArcMap on March 1, 2026, making migration to a supported GIS environment an important consideration for organizations that still depend on older projects and workflows.
QGIS is a mature, cross-platform GIS application that supports vector and raster analysis, cartographic production, database connectivity, scripting, and extensive geospatial formats. Its open-source licensing model also makes it attractive to students and institutions seeking to reduce software licensing costs.
The good news is that migrating does not mean abandoning everything you have learned. Many ArcMap concepts have direct QGIS equivalents, and both applications support familiar GIS operations such as buffering, clipping, intersecting, spatial joins, raster calculations, and map layout production.
The main challenge is understanding differences in terminology, data access, symbology, processing behavior, and automation.
This guide explains how to transfer your everyday GIS workflows into QGIS, reuse existing datasets, rebuild map layouts, and begin translating ArcPy scripts into PyQGIS.
A key distinction: QGIS does not natively convert every ArcMap project into an identical editable QGIS project. Data can often be reused directly, but project settings, symbology, labeling, layout elements, and scripts may require conversion or reconstruction.
1. Vocabulary and user-interface mapping
The first step is learning the equivalent terminology. The underlying GIS concepts are often familiar even when the buttons, panels, and workflow differ.
1.1 ArcMap-to-QGIS terminology cheat sheet
| ArcMap / ArcGIS Desktop | QGIS equivalent | Main difference |
|---|---|---|
ArcMap document (.mxd) |
QGIS project (.qgs / .qgz) |
Project formats are not interchangeable; rebuild or convert project settings. |
| ArcToolbox | Processing Toolbox | QGIS provides native algorithms and integrations with processing providers. |
| ArcCatalog | Browser panel | Browse files, databases, connections, and spatial datasets. |
| Table of Contents | Layers panel | Manage visibility, order, grouping, and layer styling. |
| Data Frame | Map canvas / map item | The canvas is the working map; layouts can contain one or more map items. |
| Layout View / Layout | Print Layout | Create publication-ready maps with legends, scales, north arrows, and labels. |
| Layer Properties | Layer Properties | Configure source, rendering, labels, joins, and other layer settings. |
| Select By Attributes | Select by Expression / Select by Attributes | Use SQL-like expressions to select records. |
| Select By Location | Select by Location | Select features based on spatial relationships. |
| Geoprocessing tools | Processing algorithms | Equivalent operations may differ in parameters or output behavior. |
| ModelBuilder | Graphical Modeler | Build repeatable visual processing workflows. |
| ArcPy | PyQGIS, Processing, and GDAL/OGR | Similar automation goals, but different APIs and object models. |
File geodatabase (.gdb) |
OGR-supported geodatabase access | Compatibility depends on the driver, database version, and dataset features. |
Shapefile (.shp) |
Shapefile | Usually reusable directly, including its associated sidecar files. |
| Raster Calculator | Raster Calculator | Expressions and available functions differ by provider and configuration. |
1.2 Learn the QGIS interface
The main QGIS interface has five areas worth learning first.
-
Layers panel: Controls layer visibility, ordering, grouping, and selection.
-
Browser panel: Provides access to files, folders, databases, and spatial data sources.
-
Map canvas: Displays and lets you interact with your spatial data.
-
Processing Toolbox: Contains geoprocessing algorithms, including vector, raster, and database operations.
-
Print Layout: Provides the tools for creating finished map compositions for PDF or image export.
You can enable most panels through View → Panels. If the interface feels unfamiliar, start by loading a dataset, changing its symbology, running one processing algorithm, and creating a simple print layout.
2. Workflow 1: Import existing GIS data
One of the easiest parts of migrating from ArcMap to QGIS is reusing your existing spatial datasets. In most cases, you do not need to convert the underlying data simply to view or analyze it.
QGIS supports common formats such as Shapefiles, GeoTIFF rasters, GeoPackages, and many geodatabase datasets through its data providers. Compatibility depends on the specific format, driver, and features used.
2.1 Import Shapefiles
A Shapefile usually consists of several related files:
| Extension | Purpose |
|---|---|
.shp |
Geometry |
.shx |
Geometry index |
.dbf |
Attribute table |
.prj |
Coordinate reference system information |
.cpg |
Optional character encoding information |
Keep the associated files together when copying datasets between folders or computers.
Method A — Browser panel
-
Open QGIS.
-
Expand the Browser panel and navigate to your data folder.
-
Locate the
.shpfile. -
Drag it into the map canvas.
Method B — Add Vector Layer
-
Select Layer → Add Layer → Add Vector Layer.
-
Set the source type to File.
-
Browse to the
.shpfile. -
Select Add.
Check the coordinate reference system, attribute table, geometry type, and feature count after loading.
2.2 Import File Geodatabases (.gdb)
A File Geodatabase is a directory containing database files and metadata. It is not a single standalone file, so preserve the entire directory when transferring it.
In QGIS:
-
Open the Browser panel.
-
Locate the
.gdbdirectory. -
Expand it if the installed data provider supports browsing its contents.
-
Select the required feature class and add it to the map.
Alternatively, open Layer → Add Layer → Add Vector Layer and choose the directory-based source option when appropriate.
QGIS’s ability to read Esri File Geodatabases depends on the installed GDAL/OGR driver and the geodatabase’s characteristics. If the directory does not open, check the available drivers or use a compatible conversion utility.
Recommended migration practice: If you need a portable, editable dataset for a QGIS-only workflow, export the relevant feature classes to GeoPackage.
Right-click a loaded layer and choose Export → Save Features As…. Select GeoPackage as the format, choose an output file, specify the layer name and coordinate reference system, and save.
Do not convert everything automatically. Preserve the original geodatabase as a read-only source until the migrated datasets have been validated.
2.3 Import raster datasets
QGIS can load common raster formats such as GeoTIFF, JPEG, ASCII grids, and many other GDAL-supported formats.
For a DEM or satellite raster:
-
Select Layer → Add Layer → Add Raster Layer.
-
Browse to the raster file.
-
Load the raster.
-
Inspect its CRS, extent, cell size, data type, and NoData values.
-
Adjust the renderer under Layer Properties → Symbology.
For a DEM, a single-band pseudocolor renderer can help visualize elevation. For imagery, a multiband color renderer may be appropriate.
Migration warning: A raster that displays correctly in ArcMap may appear black, washed out, or blank in QGIS because the applications may use different display stretches, NoData handling, or band assignments. Check the raster’s actual pixel values before assuming the dataset is damaged.
2.4 Rebuild the project structure
Once the datasets are loaded, organize them into groups, for example:
-
01_Base_Data -
02_Thematic_Layers -
03_Analysis_Outputs -
04_Reference_Data
Save the project as .qgz, QGIS’s compressed project format, or .qgs, its XML-based project format. These are QGIS-native project formats, not direct replacements for the internal structure of an .mxd file.
A useful folder structure is:
GIS_Migration/
├── Data/
│ ├── Boundaries.gpkg
│ ├── Roads.gpkg
│ └── Elevation.tif
├── Outputs/
├── Layouts/
└── Project/
└── Migration_Project.qgz
This organization reduces broken data paths and makes it easier to hand the project to another analyst.
3. Workflow 2: Find ArcMap geoprocessing equivalents
The Processing Toolbox is the main entry point for running GIS algorithms in QGIS. Press Ctrl+Alt+T in standard QGIS configurations to open it, or use the Processing menu.
Search for the required operation by name. The table below maps common ArcMap tools to QGIS algorithms.
3.1 ArcToolbox-to-QGIS cross-reference
| ArcMap tool | QGIS equivalent | Typical use |
|---|---|---|
| Buffer | Buffer | Create a distance zone around features |
| Clip | Clip | Retain input features within a polygon boundary |
| Intersect | Intersection | Extract shared geometry and attributes |
| Dissolve | Dissolve | Merge features by a shared attribute |
| Spatial Join | Join attributes by location | Transfer attributes based on spatial relationships |
| Select By Attributes | Extract by expression / Select by expression | Filter features using attribute conditions |
| Select By Location | Select by location | Select features based on spatial relationships |
| Merge | Merge vector layers | Combine compatible layers into one output |
| Multipart To Singlepart | Multipart to singleparts | Separate multipart geometries |
| Project | Reproject layer | Transform data into another CRS |
| Add XY Coordinates | Add geometry attributes | Calculate coordinates or geometry measurements |
| Near | Join attributes by nearest | Find or associate nearest features |
| Raster Calculator | Raster Calculator | Calculate new raster values from existing rasters |
| Slope | Slope | Calculate terrain slope from a DEM |
| Aspect | Aspect | Calculate terrain orientation |
| Hillshade | Hillshade | Create shaded-relief terrain visualization |
Tool names and options can vary by QGIS version and processing provider. In particular, attribute-join behavior, geometry handling, and treatment of overlapping features may differ from the ArcMap tool you are replacing.
3.2 Example: Buffer a road network
Suppose you need a 500-metre buffer around major roads, as in a typical transportation accessibility assignment.
Step 1 — Load the road layer
Add the road network and confirm that its CRS uses an appropriate projected coordinate system with metre-based units.
Step 2 — Run Buffer
Search for Buffer in the Processing Toolbox. Select the road layer, set the distance to 500, choose an appropriate segment count, and run the algorithm.
Step 3 — Inspect and save
Verify the buffer width, check for unexpected overlaps, and save the result to a GeoPackage or another appropriate output format.
Important: Buffer distances are calculated in the layer’s coordinate units. A distance of 500 in a geographic CRS can mean 500 degrees rather than 500 metres, which is not a meaningful road buffer. Reproject the layer first when necessary.
3.3 Example: Clip administrative data
Suppose you have a national roads layer and need only the roads within one county.
-
Load the roads and county boundary layers.
-
Search for
Clipin the Processing Toolbox. -
Set the road network as the input layer.
-
Set the county polygon as the overlay layer.
-
Choose a persistent output file and run the algorithm.
The result contains the portions of the input road geometries within the clipping boundary.
Do not confuse Clip with Select by Location. Clip creates geometries trimmed to the boundary, while a spatial selection typically selects whole features based on a spatial relationship.
3.4 Example: Dissolve administrative boundaries
To merge wards into larger administrative units:
-
Search for
Dissolve. -
Select the ward polygon layer.
-
Choose the county identifier or another grouping field.
-
Run the algorithm.
-
Verify the number of output features and inspect the resulting boundaries.
If no dissolve field is specified, QGIS generally dissolves all input features into the overall union, subject to the algorithm’s geometry handling.
3.5 Understand Spatial Join differences
Spatial joins are especially important when migrating demographic, land-use, and infrastructure analysis.
For example, you may want to attach the population zone containing each school to the school point layer.
In QGIS, search for Join attributes by location. Choose:
-
The target layer, such as schools.
-
The join layer, such as population zones.
-
The spatial predicate, such as intersects or within.
-
The fields to retain.
-
The handling of multiple matching features.
Check the output carefully. A school on a polygon boundary may match multiple zones, and different spatial predicates can return different results. If you need only the nearest zone, use a nearest-feature join rather than assuming an ordinary spatial join will choose the correct one.
For every migrated analysis, compare input and output feature counts, geometry types, attribute fields, and representative results with the ArcMap workflow.
4. Workflow 3: Convert MXD projects, symbology, and layouts
This is often the most demanding part of an ArcMap-to-QGIS migration. The datasets may transfer cleanly, but an .mxd can contain many project-specific settings: layer order, renderers, labels, map frames, scale bars, legends, text elements, and page composition.
4.1 Can QGIS open an MXD file directly?
Not natively as a fully editable QGIS project. QGIS does not treat .mxd as one of its standard project formats.
You have three practical options:
| Approach | When to use it | Main consideration |
|---|---|---|
| Rebuild the project manually | Small projects or simple layouts | Most control, but requires time |
| Use an MXD conversion tool or plugin | Projects with many layers and existing cartographic settings | Compatibility and conversion coverage vary |
| Reuse the data and recreate the layout | Maps that need a fresh design or improved presentation | Often produces a cleaner result |
A project conversion utility may recover some layer settings, renderers, or layout elements, but it should not be assumed to preserve every ArcMap property. Test a representative project before planning a large migration around a converter.
For example, the QGIS plugin ecosystem includes tools such as SLYR for certain Esri project and style conversions. Check the current plugin documentation, licensing, and supported input formats before choosing a conversion route. Do not assume that all MXD conversion functionality is available in every edition or without a license.
4.2 Rebuild the layer symbology
ArcMap and QGIS use different internal representations of renderers and symbols. Many common styles can be reproduced, but some may require manual adjustment.
| ArcMap symbology | QGIS approach |
|---|---|
| Single Symbol | Single Symbol |
| Unique Values | Categorized |
| Graduated Colors | Graduated |
| Graduated Symbols | Graduated or data-defined symbol sizing |
| Proportional Symbols | Data-defined size |
| Raster Stretch | Singleband gray or multiband rendering with an appropriate contrast enhancement |
| Raster Classified | Paletted/Unique Values or single-band pseudocolor |
| Definition Query | Subset filter or expression-based filtering |
| Label Classes | Labeling rules and data-defined label properties |
To recreate a categorized polygon map:
-
Right-click the layer and open Properties → Symbology.
-
Select Categorized as the renderer.
-
Choose the field used to classify features.
-
Select a color ramp.
-
Click Classify.
-
Review the class labels, colors, outlines, and order.
-
Apply the changes and inspect the map.
For graduated symbology, select the numeric field, classification method, and number of classes. Then compare the class breaks against the original ArcMap map. Matching the number of classes alone is insufficient if the classification method or break values differ.
Migration tip: Record the original class boundaries, colors, symbol sizes, and labels before rebuilding a thematic map. This helps preserve the analytical meaning of the original map even if the visual design is improved.
4.3 Convert the MXD layout into a QGIS Print Layout
A QGIS Print Layout is the closest general equivalent to ArcMap’s page-layout environment.
To create one:
-
Open the migrated QGIS project.
-
Select Project → New Print Layout.
-
Give the layout a descriptive name.
-
Set the page size and orientation.
-
Add a map item and adjust its extent and scale.
-
Add a legend, scale bar, north arrow, title, and explanatory text as required.
-
Export to PDF or an image for review.
ArcMap layout elements and their QGIS equivalents
| ArcMap element | QGIS layout item |
|---|---|
| Data Frame | Map item |
| Legend | Legend |
| Scale Bar | Scale Bar |
| North Arrow | Picture item using an appropriate SVG |
| Text | Label |
| Neatline | Shape, frame, or map-item frame |
| Graphic | Shape, picture, or label |
| Map Series / Data Driven Pages | Atlas |
| Page Setup | Page Properties |
A QGIS Atlas is particularly useful for producing multiple maps from a common template, such as a map book with one page per county, ward, watershed, or study site.
Before exporting, check page dimensions, map scale, coordinate reference system, legend contents, fonts, and label placement. Then inspect the exported PDF at actual print size.
4.4 Preserve project portability
When moving projects between computers, relative file paths are often helpful if the project and its data maintain a consistent folder structure.
In QGIS, review Project → Properties and the relevant path settings for your version. Keep source data in stable folders, and avoid renaming source files after linking them to the project.
For deliverables that must be shared with another analyst, include:
-
The
.qgzproject file. -
Required source datasets, subject to their licensing.
-
Output layers.
-
Any custom symbols, SVG files, or fonts required for the layout.
-
Processing scripts and a short README explaining dependencies.
Saving the QGIS project does not automatically package every external dataset into the project file. Confirm that the recipient can open the project without missing layers.
5. Workflow 4: Translate ArcPy scripts into PyQGIS
ArcPy is Esri’s Python package for working with ArcGIS data, geoprocessing tools, and project environments. QGIS provides its own Python API, PyQGIS, together with the Processing framework and access to libraries such as GDAL/OGR.
The goal of migration is not to replace each ArcPy line word-for-word. Instead, identify what the script does, then implement the same operation using the appropriate QGIS API or processing algorithm.
5.1 ArcPy and PyQGIS concept mapping
| ArcPy / ArcGIS concept | PyQGIS equivalent |
|---|---|
arcpy.GetParameterAsText() |
QGIS Processing algorithm parameters or custom script inputs |
arcpy.management.Buffer() |
native:buffer |
arcpy.analysis.Clip() |
native:clip |
arcpy.analysis.Intersect() |
native:intersection |
arcpy.management.Dissolve() |
native:dissolve |
arcpy.Describe() |
Layer metadata, QgsVectorLayer, QgsRasterLayer properties |
arcpy.ListFeatureClasses() |
Provider or filesystem iteration, depending on the source |
arcpy.da.SearchCursor() |
QgsFeatureIterator / layer feature iteration |
arcpy.da.UpdateCursor() |
Editable vector layer with QgsFeature updates |
arcpy.Exists() |
Filesystem checks or layer/provider checks |
arcpy.env.workspace |
Explicit source and output paths, or processing context |
arcpy.mp project/layout operations |
PyQGIS project, layout, and map-item APIs |
These are conceptual equivalents rather than exact API replacements. ArcPy’s environment settings, licensing behavior, geodatabase-specific functions, and cursor semantics may require a more substantial redesign.
5.2 Example: Buffer a layer using PyQGIS Processing
The following example runs QGIS’s native buffer algorithm on an existing vector layer.
from qgis.core import QgsApplicationimport processing# Assumes a QGIS Python environment is already initialized.# In the QGIS Python Console, processing is usually available.roads = QgsProject.instance().mapLayersByName("roads")[0]result = processing.run( "native:buffer", { "INPUT": roads, "DISTANCE": 500, "SEGMENTS": 8, "END_CAP_STYLE": 0, "JOIN_STYLE": 0, "MITER_LIMIT": 2, "DISSOLVE": False, "OUTPUT": "C:/GIS/outputs/roads_buffer.gpkg" })print(result["OUTPUT"])
This example assumes a layer named roads exists in the current project and that its CRS uses appropriate metre-based units. Adjust the path for your operating system and ensure the output destination is writable.
In a standalone Python application, QGIS must be initialized correctly before using PyQGIS and Processing. The QGIS Python environment, library paths, and provider configuration must be available. The short example above is intended primarily for use within an initialized QGIS environment, such as the Python Console.
5.3 Example: Iterate over features
An ArcPy script might use a SearchCursor to inspect every record in a feature class. The comparable PyQGIS pattern is to iterate over features from a vector layer.
from qgis.core import QgsProjectlayer = QgsProject.instance().mapLayersByName("roads")[0]for feature in layer.getFeatures(): road_name = feature["road_name"] road_type = feature["road_type"] print(road_name, road_type)
This example reads two attribute fields. Replace them with field names that actually exist in your layer.
For updates, use QGIS’s editing methods and commit changes appropriately. Do not assume that modifying a feature object automatically writes changes to the underlying dataset.
5.4 Automate repetitive analysis
A common ArcMap workflow involves looping through multiple administrative areas, clipping a dataset for each area, and exporting separate outputs.
The same concept can be implemented with PyQGIS and Processing:
-
Load the input dataset and administrative boundaries.
-
Iterate through the administrative features.
-
Apply a filter or extract the relevant geometry.
-
Run the required processing algorithm.
-
Save the result using a unique output name.
-
Record failures and verify each output.
For production scripts, add checks for invalid geometries, missing fields, output overwrites, empty results, and inconsistent coordinate reference systems. Test on a small sample before processing an entire region.
Useful references include the QGIS User Guide and the PyQGIS Developer Cookbook.
6. Migration strategy: Move projects without losing critical work
For organizations managing hundreds of ArcMap projects, a controlled migration is safer than converting everything at once.
Phase 1 — Audit
Inventory MXD files, source datasets, toolboxes, scripts, extensions, coordinate systems, and map layouts. Identify projects with broken links or undocumented dependencies.
Phase 2 — Validate data access
Test representative Shapefiles, File Geodatabases, rasters, and databases. Convert only what is necessary, and preserve original source data until validation is complete.
Phase 3 — Rebuild analysis
Translate geoprocessing workflows, recreate styles and layouts, and migrate scripts. Compare output geometries, attributes, statistics, and classification breaks.
Phase 4 — Test and deploy
Have another analyst open the project on a separate machine. Confirm that all layers load, processing runs, outputs match expectations, and layouts export correctly.
Because ArcMap and ArcGIS Desktop officially retired on March 1, 2026, organizations should also review their support, security, licensing, and long-term maintenance requirements.
A successful migration is not merely a map that opens in another application. It is a reproducible workflow whose outputs remain correct and whose dependencies are understood.
7. Summary cheat sheet
Keep this quick-reference table available while learning QGIS.
| Task | Where to go in QGIS |
|---|---|
| Add a Shapefile | Layer → Add Layer → Add Vector Layer |
| Add a raster | Layer → Add Layer → Add Raster Layer |
| Browse folders and databases | Browser panel |
| Find geoprocessing tools | Processing Toolbox |
| Create a buffer | Processing Toolbox → Buffer |
| Clip features | Processing Toolbox → Clip |
| Combine overlapping geometries | Processing Toolbox → Intersection |
| Merge features by an attribute | Processing Toolbox → Dissolve |
| Join attributes spatially | Join attributes by location |
| Change layer appearance | Right-click layer → Properties → Symbology |
| Filter features | Layer filter / Select by Expression |
| Create a map layout | Project → New Print Layout |
| Generate a map series | Print Layout → Atlas |
| Save the project | Project → Save As → .qgz |
| Automate processing | Python Console, PyQGIS, or Processing scripts |
Final migration checklist
Migration readiness
0 of 8 complete
Copy checklist
The bottom line: You do not need to relearn GIS from scratch to move from ArcMap to QGIS. Start with familiar data formats and geoprocessing operations, then tackle layouts, project conversion, and Python automation. By migrating one representative workflow at a time and validating its results, you can build a reliable open-source GIS environment without sacrificing the analytical skills you already possess.