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

GeoParquet vs GeoPackage vs Shapefile — A Decision Tree for the 2026 GIS Stack

A PSA on r/gis last month pointed out that Apache Parquet now has native geospatial types and that GDAL’s GeoParquet driver is mature, ESRI ships read/write support, and QGIS treats it as a first-class format. The thread had the same energy as the old “stop using shapefiles” threads, except this time the alternative is not a marginal incremental improvement. GeoParquet is a different shape of file that solves problems shapefiles never could. ...

30 April 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

GeoJSON Is an Interchange Format, Not a Working Format — What GIS Teams Actually Use at Scale

GeoJSON keeps showing up in places it shouldn’t. Someone drops a 2 GB .geojson into a processing pipeline, the script that used to run in 20 seconds runs for eight minutes, and the team spends a Thursday wondering whether the problem is their query planner, their RAM, or their patience. The problem is the format. GeoJSON is a perfectly good interchange format — human-readable, one-spec wonder, works everywhere a text editor opens. It’s a terrible working format as soon as your dataset has more than a few hundred thousand features. This post is about when to stop loading GeoJSON directly and what to convert to instead, based on what teams handling real-scale data actually reach for. ...

26 April 2026 · 9 min · CadShift

Overpass API 406 Not Acceptable — 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

Shapefile Validation Checklist — 6 Preflight Checks Before You Ingest External GIS Data

A state environmental agency analyst posted on r/gis last week, describing the same problem every public-sector GIS team deals with: contractors, federal agencies, and utility companies all send shapefiles that are technically valid per the format spec, and yet every batch requires hours of cleanup. The analyst was scoping an open-source CLI tool to run preflight checks — field truncation, CRS mismatch, missing indexes, null geometry. The tool they need already exists in pieces inside GDAL. The problem is that nobody publishes the checklist. Here is the full preflight — the specific failure modes, the ogrinfo and ogr2ogr commands that detect them, and the decisions each check forces. ...

18 April 2026 · 10 min · CadShift

Why GeoJSON-to-Shapefile Conversions Silently Corrupt Your Data

You run a GeoJSON-to-Shapefile conversion. The tool says it succeeded. You load the Shapefile into ArcGIS or QGIS and everything looks fine at first glance. Three weeks later, someone discovers that half the attribute data is wrong or missing. This is not hypothetical. It happens constantly in GIS workflows, and the reason is that GeoJSON and Shapefile are fundamentally different formats with incompatible assumptions about how data should be stored. Most conversion tools handle the geometry correctly but silently destroy the attributes. ...

9 April 2026 · 6 min · CadShift