QGIS Plugin · Urban Visualization

Publication-Ready
2.5D Building Styling
for QGIS

Turn any polygon layer or bounded OSM building footprints into stunning 2.5D maps — three renderers, 10 curated material themes, 23 per-floor palettes, and full QML import/export. No pip dependencies.

3
Renderers
10
Material Themes
23
Color Palettes
0
pip dependencies
✔ QGIS 3.28+ ✔ QGIS 4.x ✔ OSM Integration ✔ Processing Algorithm ✔ QML Export ✔ GPL-2.0-or-later 👤 Yusuf Eminoğlu
About

One focused tool.
One perfect result.

QGIS 2.5D Styling performs one focused task: producing publication-ready 2.5D building symbology. Use an existing polygon layer or explicitly download bounded OSM building footprints. OSM building:levels values drive floor counts; missing values use a visible, configurable three-floor default.

The compact right dock provides three renderers, projection and material controls, 10 curated themes (each with its own matching floor gradient), 23 per-floor palettes, live preview, previous-style restoration, and QML import/export. A single Processing algorithm applies styling headlessly. No pip dependencies are required.

👤 Yusuf Eminoğlu [email protected]
Keywords & Tags

Search terms on the QGIS Plugin Hub:

2.5d buildings osm overpass building levels extrusion shading floor bands qml symbology isometric thematic map urban planning cartography geometry generator rule-based renderer Qgs25DRenderer processing provider QGIS 4 Qt6
Quick Info
Version
1.0.0
Category
Vector
License
GPL-2.0-or-later
QGIS Min
3.28
QGIS Max
4.99
pip deps
None
Features

Everything you need for
2.5D building maps

A single focused tool that does one thing exceptionally well: transforming flat building polygons into rich, layered 2.5D visualizations.

🏙

OSM Building Acquisition

Asynchronously download bounded OSM building footprints directly for the current map view. Automatic metric CRS, local cache, mirror fallback, and building:levels floor-count extraction.

🎨

Three Distinct Renderers

Geometry Generator with full facade/roof/shadow control, Per-Floor Color Bands with 23 palettes and a live swatch preview, and Native QGIS 2.5D using layer-scoped expression variables.

🏛

10 Material Themes

Curated themes adapted from the proven 02CartoLab 2.5D style collection. Warm Civic, Cool Slate, Limestone and Teal, Night Copper, and six more — each ships its own matching floor gradient.

Directional Solar Shading

Control sun azimuth from 0° to 359° with six named shortcuts. Dynamic compass labels, configurable shading depth and shadow opacity for dramatic lighting effects.

📐

building:levels Intelligence

OSM building:levels drives floor counts. Explicit height tags estimate floors automatically. Missing values fall back to a visible, user-configurable 3-floor default.

💾

QML Import & Export

Export any applied renderer as a QML style file for reuse. Import community or previous QML styles. Non-destructive restore returns the original renderer at any time.

Debounced Live Preview

Slider edits trigger debounced preview refresh — no stuttering on every step. Adaptive delay for large layers automatically guards performance.

🔬

Headless Processing Algorithm

apply_25d_style runs the full renderer stack without the dock — ideal for batch workflows, QGIS Model Builder, and CI pipelines.

🛡

Smart Preflight Checks

Filters non-polygon layers, detects height fields case-insensitively, warns on geographic CRS, and reports feature count and height source in the dock status bar.

Rendering Engines

Three renderers, one result

Pick the approach that best matches your workflow — from expressive geometry generation to production-grade native QGIS rendering.

01

Geometry Generator

Builds facades, roofs, optional drop shadows, and floor division lines entirely through QGIS geometry expressions. Feature draw ordering ensures taller buildings paint above shorter neighbors.

facade controlshadowfloor linesdraw order
02

Per-Floor Color Bands

A rule-based renderer that assigns a distinct color to each floor level. Live ten-floor swatch preview, 23 curated palettes, automatic or explicit floor limit, and the default renderer for OSM downloads.

23 paletteslive swatchrule-basedOSM default
03

Native QGIS 2.5D

Delegates to QGIS's built-in Qgs25DRenderer via layer-scoped expression variables. Integrates with QGIS 3D views and respects global rendering settings.

Qgs25DRendererlayer variables3D ready
Material Themes

10 handcrafted
visual identities

Every theme ships a matched set of facade color, roof accent, shading depth, shadow opacity, projection angle — and its own per-floor gradient derived from that theme’s own palette.

Warm Civic Cool Slate Limestone and Teal Night Copper Urban Core Gold Suburban Pastoral Cyberpunk Night Nordic Minimalist Emerald Metropolis Terracotta Mediterranean

🎨 Architectural Palette Matrix

Every theme coordinates facade base colors, roof tints, directional sun shadows, and vertical floor height bands into a single cohesive visual identity.

Warm Civic
Stone roofs & terracotta facades
Cool Slate
Blue-grey analytical massing
Night Copper
Copper roofs & deep night shadows
Emerald Metropolis
Emerald & deep forest cores
Per-Floor Color Palettes

23 palettes,
infinite expression

10 theme-derived gradients plus 13 standalone curated palettes. A live ten-floor swatch preview lets you compare options before committing.

Teal to Yavru Ağzı default
Civic Spectrum
Planning Bands
Turbo Height
Viridis Height
+ 18 more palettes included

🏢 Vertical Floor Elevation Ramp

Buildings are sliced into programmatic vertical floor bands with automated floor-to-height classification.

Roof / Penthouse (Fl 8+)
Upper Residential (Fl 5-7)
Mid Offices (Fl 2-4)
Ground Commercial / Retail (Fl 1)
Five-Step Workflow

From data to
publication in minutes

The compact right-side dock guides you through every step. Each stage is clearly separated — OSM, Form, Light, Floors, Themes.

01

Select a layer or download OSM buildings

Pick any polygon layer from your project, or click “Download Buildings” to fetch OSM footprints for the current map view. building:levels and height tags are extracted automatically.

02

Choose a renderer

Geometry Generator for full control, Per-Floor Color Bands for floor-level gradients, or Native QGIS 2.5D for integration with QGIS’s own 3D rendering pipeline.

03

Configure projection, materials & lighting

Set the projection angle (0–359°, six shortcuts), facade and roof colors, outline width, shading depth, shadow opacity, and story height. Debounced live preview updates instantly.

04

Apply a theme or tune per-floor palettes

Select one of 10 material themes — the dock updates all controls and automatically switches the Floor Palette to that theme’s matching gradient. Or pick any of the 23 standalone palettes.

05

Apply, export QML, or restore

Click Apply to commit the renderer. Export a QML style file for reuse. Restore returns the original renderer non-destructively at any time. Settings persist across sessions.

Processing Algorithm

Headless styling pipeline

Use qgis_25d_styling:apply_25d_style in QGIS Model Builder, Python scripts, or CI/CD pipelines — no dock required.

Python
import processing
 
result = processing.run(
  "qgis_25d_styling:apply_25d_style",
  {
    "INPUT": buildings_layer,
    "RENDERER_MODE": "geometry_generator",
    "THEME": "Night Copper",
    "PROJECTION_ANGLE": 315,
    "FACADE_COLOR": "#2ec4b6",
    "ROOF_COLOR": "#f4a261",
    "FALLBACK_HEIGHT": 3,
    "OUTPUT": "memory:",
  }
)

Parameters

  • INPUTPolygon layer to style — project layer or memory layer
  • RENDERER_MODEgeometry_generator · per_floor · native_25d
  • THEMEOne of 10 named themes (overrides individual color params)
  • PROJECTION_ANGLE0–359 degrees (315 = NW standard isometric)
  • FACADE_COLORHex color for wall faces (default: soft teal)
  • ROOF_COLORHex color for roof face (default: yavru ağzı peach)
  • FALLBACK_HEIGHTDefault floor count when building:levels is absent
  • OUTPUTDestination layer (memory:, file path, PostGIS)
Compatibility

Tested on every runtime

Release verification runs on both QGIS LTR and the current stable release. No external dependencies means zero install friction.

🟢
QGIS 3.28+
Minimum requirement. Full feature support on all 3.x releases.
✔ Verified
🔵
QGIS 3.44 LTR
Primary release target. Every version is verified on LTR before publishing.
✔ Release Runtime
QGIS 4.2
Qt6/QGIS 4 verified. No deprecated API usage in the plugin codebase.
✔ Release Runtime
📦
Zero pip deps
Pure QGIS API — qgis.core, qgis.gui, Processing. No external packages.
✔ No Install
🌎
Network optional
Used only when the user explicitly starts an OSM download. Fully offline otherwise.
✔ Offline Ready
💻
Win · Linux · macOS
Platform-agnostic Python. Tested primarily on Windows (OSGeo4W).
✔ Cross-platform
Installation

Up and running
in 30 seconds

01

Plugin Manager (Recommended)

Open QGIS → Plugins → Manage and Install Plugins → Search for the plugin name → Install.

qgis_25d_styling
02

Install from ZIP

Download the latest release ZIP from GitHub → Plugins → Manage and Install Plugins → Install from ZIP → select the file.

qgis_25d_styling.zip
03

Development Install

Clone the repository to your QGIS plugin path and set QGIS_PLUGINPATH to the parent directory. Restart QGIS.

QGIS_PLUGINPATH=.../qgis_plugins
⇓ Open in QGIS Plugin Hub
Changelog

Release history

v1.0.0 2026-08-21 Initial Release
Asynchronous OSM building download with local cache and mirror fallback
building:levels floor-count handling with auditable levels_source attribute
Compact right-side dock with OSM, Form, Light, Floors and Themes tabs
Three renderer modes: Geometry Generator, Per-Floor Bands, Native 2.5D
10 material themes from 02CartoLab — each with matched floor gradient
23 per-floor color palettes with live ten-floor swatch preview
Debounced live preview with adaptive delay for large layers
Non-destructive restore of pre-apply renderer
QML style import and export with last-directory persistence
Dynamic compass labels and six named projection shortcuts
Headless Processing algorithm with renderer and fallback-height params
Feature-count, CRS, height-source, and geographic-CRS diagnostics
Default soft teal facade + yavru ağzı roof accent across all surfaces
Theme switching auto-syncs Floor Palette to theme’s own gradient
Height-tag estimation of floors with distinct levels_source status
512 px transparent plugin icon