Converting Vector Tiles to Editable GIS Layers — What QGIS and GDAL Can Actually Do

The question comes up constantly: you’re in QGIS, you’ve added a vector tile layer from a basemap service or loaded a .mbtiles file, and you want to export those features to a Shapefile or GeoJSON for editing. You right-click the layer and look for “Save Features As” — but the option is either missing or produces empty output. This is not a QGIS bug. It’s a fundamental property of the vector tile format, and understanding it is the difference between a working extraction workflow and hours of confusion. ...

6 June 2026 · 7 min · CadShift

Geocoding a Mailing List to a QGIS Heatmap — Nominatim, MMQGIS, and Kernel Density Estimation

You have a CSV of postal addresses — a membership list, a customer database, a survey response set. Someone wants to know where these people are concentrated. A heatmap is the right output: it shows density without exposing individual addresses, it scales from 100 to 100,000 records without changing the workflow, and it overlays cleanly on basemaps, zoning layers, or any other spatial data you have. The full pipeline in QGIS: geocode addresses to coordinates using MMQGIS and Nominatim (OpenStreetMap’s free geocoding service), reproject the resulting point layer to a metric CRS, and run kernel density estimation in the QGIS Processing Toolbox. Three steps. The traps are in the rate limits, the CRS handling, and the distinction between two different “heatmap” tools inside QGIS that look alike and behave differently. ...

2 June 2026 · 9 min · CadShift

QGIS Headless with Claude Code: The New Paradigm for GIS Automation

A Reddit thread in May 2026 caught the attention of the GIS community: a spatial analyst running QGIS headlessly via Claude Code, letting an AI agent execute processing algorithms and inspect outputs without ever opening the QGIS GUI. The post got 50 upvotes and 22 comments — more reaction than most QGIS workflow discussions — because it named something practitioners had been edging toward without a label. The shift is real. GIS professionals who already script via PyQGIS or QGIS Model Builder are discovering that qgis_process — QGIS’s native CLI tool for running processing algorithms — is a natural interface for AI agents. It’s discoverable, self-documenting, outputs JSON, and handles the full processing algorithm catalog without requiring a display connection. ...

27 May 2026 · 9 min · CadShift

Free and Open Source GIS Tools for Format Conversion and Analysis

The problem with most “free GIS tools” roundup lists is that they treat GDAL, QGIS, GRASS, and PostGIS as competing products when they’re actually layers of the same stack. GDAL underpins QGIS. QGIS calls GRASS as a processing backend. PostGIS sits behind both for production data. Choosing between them isn’t “which is best” — it’s “which layer do I need to interact with directly.” This is a functional comparison: what each tool does well, where it breaks down, and which one to reach for when you receive a shapefile, a GeoJSON, or a KML and need it in something your software actually reads. ...

24 May 2026 · 9 min · CadShift

Why DWG Files Arrive in QGIS at the Wrong Scale — And the Right Fix When You Control the Pipeline

A surveyor sends you a DWG with what looks like UTM coordinates. You open it in QGIS, the layer appears 100 kilometers from where you expected, and when you zoom to it the geometry is microscopic — a thirty-meter parcel that displays as a 30-millimeter sliver. You set the project CRS to the right UTM zone. Nothing changes. You build a custom CRS in metric units. Nothing changes. You ask the surveyor and they swear the file is correct in AutoCAD. ...

4 May 2026 · 11 min · CadShift

From QGIS Model Builder to Python — A Practical On-Ramp for GIS Scripting Without Drowning in Libraries

Most GIS analysts who try to learn scripting open a blank Python console, type from qgis.core import *, and close the console within ten minutes. PyQGIS documentation dumps you into an object model of two hundred classes with no hint of which ones matter for the three workflows you actually run every week. It is the wrong entry point. The Model Designer is the right entry point. You already use it to wire up Clip, Reproject, and Extract by Location into a reusable graph. The menu option that nobody talks about is one click away: Export → Export as Python Algorithm. QGIS writes a complete QgsProcessingAlgorithm subclass that reproduces your model exactly, including every processing.run() call with the correct parameter dictionary. You now have a working script to modify instead of a blank console to fight. ...

27 April 2026 · 9 min · CadShift

Fix Overpass API 406 Not Acceptable Error — Working Mirror Endpoints for QGIS and Python [2026]

A watershed analyst in Oregon runs QuickOSM’s “hospitals in the state boundary” query on a Monday morning and gets Download Failed: HTTP 406 Not Acceptable. The query worked on Friday. She re-runs it, gets the same error. Switches to QGIS’s native “Download OpenStreetMap data” tool — same error, slightly different wording. Twitter says other people are seeing it too. The r/QGIS thread has six comments and no consensus. The 406 response from overpass-api.de is not a timeout, not a rate limit, not your query, and not a QGIS bug. It’s the Overpass server telling you something specific about your request that most documentation glosses over. The fix is a one-line configuration change, but only if you know which line. ...

24 April 2026 · 9 min · CadShift

QGIS to Rhino DXF Export Pitfalls — Why Save Features As Silently Drops Polygons with Holes or Self-Intersections

A GIS analyst exports a parcel layer from QGIS as DXF, opens it in Rhino for an urban design project, and a third of the parcels are missing. The ones with courtyards — inner holes — come in as the outer boundary only. A few with weird digitizing errors don’t come in at all. The analyst checks the QGIS layer: everything is there. The DXF is the problem, and so is the path that was used to produce it. ...

20 April 2026 · 10 min · CadShift