Applied Spatial Analysis Using QGIS - Professional Print Layouts & Atlas
Applied Spatial Analysis Using QGIS — GIS for Surveyors (2026 Cohort) · 25 Oct 2026 · 47:24 · Watch on YouTube (offline-safe)
Live focus: Print Layout setup (guides), main map + inset, legend/scale bar/north arrow/title, locking the map, then build an Atlas driven by states that intersect a 5 km railway buffer, label each sheet with State Name and total railway length (km) calculated on-the-fly, and export as a multi-page PDF at 300 DPI.
Data: Red Sea layers,
admin2_districts/state layer, railway, roads/rivers, population from previous class (all in same CRS — UTM 36N) | Deliverable: Multi-page PDF, one sheet per state (coverage), at 300 DPI showing state boundary, railway and its 5 km hashed buffer, with total railway length in km for that state.
Week 6 gave us surfaces — rasters that let us ask where to build and how many people a district serves. Week 7 is the cartographic step: turning all that analysis into a proper, professional map product that can be printed and communicated clearly to a client or decision-maker.
A good map answers three questions at a glance: what, where, and when. That means choosing the right elements, controlling scale and extent, and making the layout readable on paper — not just on screen.
Why Week 7 Exists
Up to now we've focused on analysis. The final deliverable in applied GIS is almost always a map. This week we learn the standard workflow:
- Set up a clean Print Layout with a logical structure
- Prepare and lock the main map so it doesn't accidentally pan
- Add context with an inset map
- Include essential cartographic elements (grid, scale bar, north arrow, legend, title/subtitle)
- Add supporting info (attribute table, notes, data sources/credits)
- Use the Atlas to automate one page per district from a coverage layer
- Export at 300 DPI for printing/sharing
1) Recap — From Rasters to Map Production
We started with a quick recap of the raster work: reading pixels, reprojecting to UTM 36N, clipping, deriving slope/aspect, and using the Raster Calculator with Zonal Statistics context from the previous class. The goal now is to present those results clearly on a printed sheet.
2) Map Elements & Audience
Before touching the layout, we discussed what makes a map communicate:
- Main map — the focus of the map (here, Red Sea State with our analysis layers)
- Inset map — spatial context (showing Sudan/East Africa so the reader knows where Red Sea is)
- Legend — translates symbols/colours to plain language
- Scale bar — allows distance measurement
- North arrow — orientation
- Title/Subtitle — answers what, where, when
- Grid — coordinate reference/measurements on the sheet
- Notes/Credits/Data sources — attribution (e.g., OSM, data providers)
- Attribute table (optional) — key figures for the area shown
3) Page Setup & Layout Structure with Guides
We created a new Print Layout and set the page size/properties for printing (A3 was used in context). The key trick was using Guides to divide the canvas into a clean structure:
- Main map area (~80%) — largest section for the detailed map
- Sidebar (~20%) — for inset, legend, north arrow, title/subtitle
- Lower section — for attribute table, notes/credits and other supporting elements
Guides keep everything aligned and give a professional, balanced layout.
4) Building the Main Map
- Prepare layers — cleaned attribute tables (consistent naming), ensured all layers in the same CRS (UTM 36N)
- Add the map item — placed in the 80% main area, centered on Red Sea State (with context of Sudan visible)
- Style for clarity — roads/rivers/railway styled distinctly, boundaries clear, population/analysis layers styled readably
- Add a grid — enabled grid on the map, set interval/appearance (solid, very light grey) for a clean look
- Lock the map — critically important before setting up the inset and moving elements. Once locked, the map extent won't shift accidentally
5) Inset Map for Spatial Context
In the upper-right sidebar, we added a second Map item for the inset:
- Zoomed out to show East Africa and the whole of Sudan
- Styled to emphasize location — Sudan shown in a subdued grey, with Red Sea State highlighted in red
- Linked for clarity — the inset shows where the detailed main map sits in the broader region
6) Cartographic Elements — Legend, Scale, North Arrow, Text
- Title & Subtitle — clear, descriptive (answers what/where)
- Legend — added, cleaned up item names (remove unnecessary layers), adjust columns/size for readability
- Scale bar — added and formatted appropriately for the sheet
- North arrow — simple, clean symbol placed in the sidebar
- Notes & Credits — data sources (e.g., OSM), attribution, and any notes about the map
- Attribute table — placed in the lower section with relevant fields, formatted to fit cleanly
7) Atlas — One Map Sheet Per State (Driven by Railway Buffer)
The real power of the Print Layout is the Atlas. Instead of making a separate layout for each feature manually, we automate it — but with a specific selection criterion.
We first created a 5 km buffer around the railway line. We then used a spatial selection to find which states intersect that railway buffer. The resulting selection was saved/exported as a new layer and used as the Atlas coverage layer (so only states that actually intersect the 5 km railway corridor get a map sheet).
- Prepare the corridor — dissolve/create a 5 km railway buffer (style as a hatched/hashed pattern for distinction).
- Select coverage — select states that intersect the 5 km railway buffer, and save/export them as the coverage layer for Atlas.
- Set coverage layer — in Atlas, set that exported intersect layer as the coverage layer and configure the page name from a state attribute.
- Control the map extent — enable "Controlled by Atlas" on the main map so it zooms/pans to each selected state automatically.
- Dynamic labels for railway length — add two labels below/near the state name. Using an expression with
@atlas_geometry, we calculated the total railway length inside each atlas feature:round(sum(length(intersection($geometry, @atlas_geometry)), group_by:=@atlas_id) / 1000, 1) || ' km'One label shows the State Name, the other shows this calculated total railway length in km for that state. - Style the map — show the state boundary, the railway, and the 5 km hashed buffer clearly on each sheet.
- Preview & export — use Atlas Preview to cycle through sheets, then export as a multi-page PDF (300 DPI) with one sheet per covered state.
This matches the client brief: one clean, printable map sheet per district/state of interest — with grid and scale — showing the railway corridor and the total railway length present in each state.
What We Did Live — Scrub Guide
- 00:00 Welcome & mission — map production & Atlas for the week
- 02:55 Recap — rasters vs vectors, Zonal Statistics carried over
- 09:40 Map product & elements — audience, purpose, core elements
- 14:15 Layout structure — guides, 80% map / 20% sidebar / lower section
- 19:40 Main map — layers, styling, CRS check, adding map item, locking
- 24:55 Grids — adding grid, interval, light grey styling
- 28:10 Inset map — spatial context, Sudan overview with Red Sea highlighted
- 32:15 Elements — legend, scale bar, north arrow, title & subtitle
- 36:25 Supporting info — notes, credits, attribute table
- 39:40 Atlas setup — 5 km railway buffer, select states intersecting buffer → export as coverage layer, control map by Atlas
- 41:20 Dynamic railway length — expression with
intersection($geometry, @atlas_geometry)+sum(length(...))to show total railway km per state - 43:15 Export — multi-page PDF at 300 DPI, final checks (railway + hashed 5 km buffer per sheet)
- 45:25 Recap & Q&A — deliverable and next steps
Common Hang-ups and Fixes
- Map pans when you don't want it to: Always lock the main map item once it's at the correct extent and scale. Do this before setting up Atlas/inset adjustments.
- Atlas zooms to the wrong place: Make sure the map item is set to "Controlled by Atlas" and using the correct coverage layer.
- Legend shows unwanted layers: In the legend item properties, uncheck "Auto update" and manually remove or reorder items, or filter to only visible layers as needed.
- Grid looks too heavy: Use a light grey, thin line style. Keep it readable but subtle so it doesn't overpower the map content.
- Attribute table doesn't fit: Resize and limit columns/fields to only what's necessary for the sheet. Use the lower section with guides for clean alignment.
- Export looks blurry: Export at 300 DPI (not screen resolution). Check page size matches what you intend to print.
- Elements misaligned: Use guides and alignment tools in the Print Layout. Keep consistent spacing between elements.
What You Should Have Now
- A clean Print Layout with a logical structure (guides in place)
- Main map per sheet showing the state boundary, railway, and the 5 km hashed railway buffer, with grid added and locked
- Inset map showing Sudan/East Africa for context
- Complete set of elements: title/subtitle, legend, scale bar, north arrow
- Two dynamic labels: State Name and total railway length (km) calculated with
intersection($geometry, @atlas_geometry)over the railway layer - Notes/credits placed cleanly on the sheet
- Atlas configured using states that intersect the 5 km railway buffer as the coverage layer, one sheet per state
- Multi-page PDF exported at 300 DPI as the final deliverable
Deliverable reminder: Submit your multi-page PDF (one sheet per state covered by the railway buffer, at 300 DPI), showing the corridor and the total railway length in km for each state. Keep practicing the layout structure — it's a skill you'll use in every real cartographic project.