
import ulg
ulg.element("wildflower_meadow").fill # '#DADDBC': look colours up, never invent them
ulg.resolve("osm", landuse="meadow", meadow="wildflower") # 'wildflower_meadow'
ulg.resolve("alkis", objart="41008", funktion="4420") # 'green_space'
gdf["element"] = ulg.classify(gdf, "osm") # OSM, ALKIS, XPlanung, CORINE … → elements
ulg.render_svg(gdf, scale=500, path="plan.svg") # print-ready SVG, true to scale
ulg.render_svg(gdf, scale=1500, theme="planzv") # the same data as a Bauleitplan
ulg.indicators(ulg.flatten(gdf)) # sealing, biotope area factor, runoff, canopy
What it is#
- 173 elements in English and German (vegetation, trees, water, ground, 33 surfaces, land use, buildings, furniture, boundaries, planning and analysis overlays), each with a fill, a texture per level of detail, a line or point symbol, aliases and documented coefficients.
- A style that stays GIS-exact. Marks are placed on the ground, not on the feature, so patterns continue across polygons and tile seamlessly; the hand-drawn outline never moves more than half a line width off the true edge.
- 26 crosswalks from OSM tags, ALKIS/NAK, XPlanung, PlanZV, basemap.de, LBM-DE, BKompV, BayKompV, FFH, the Berlin biotope map, DIN 276, CORINE, Urban Atlas, CLC+, EUNIS, HILUCS, LUCAS, ESA WorldCover, LCZ, and the Dutch, Swiss, Austrian and English national models: 3 926 classes, each with a fit grade.
- Seven themes: the mellow house style plus PlanZV, ALKIS, basemap.de, BfN landscape planning, OpenStreetMap Carto and a black-and-white drawing, with the published colour values.
- Standards built in: ISO 11091 and PlanZV status symbols for trees, DIN 18920 root protection zones, Berlin BFF, DIN 1986-100 runoff, the EU Nature Restoration Regulation's urban green space, WCAG-checked legibility including colour-vision deficiencies.
- Everywhere: SVG and Matplotlib; QGIS (QML with the hand-drawn outline and scale-dependent detail); OGC SLD; MapLibre sprites and layers with trees and streets in metres; CSS and DTCG design tokens; a command line; a skill for AI coding agents.

Install#
pip install "urban-landscape-graphics[all] @ git+https://github.com/UrbanSens/Urban-Landscape-Graphics"
Python 3.10+. Core dependencies are NumPy and Shapely; [all] adds GeoPandas and Matplotlib. PNG
output uses rsvg-convert, CairoSVG or Inkscape if one is installed. Check the installation:
ulg check
To try the examples or to work on the library, use a clone:
git clone https://github.com/UrbanSens/Urban-Landscape-Graphics.git
cd Urban-Landscape-Graphics
pip install -e ".[dev]"
python examples/quickstart.py
Documentation#
Start at Contents:
- Origins: from the Englischer Garten and the 1808 Bavarian survey to GIS
- The style guide: principles, palette, textures, symbols, drawing order, legibility
- The catalog: all elements and their coefficients
- Python: drawing, classifying, measuring, the command line
- GIS and web: QGIS, GeoServer, MapLibre, tokens
- Standards: what the style conforms to, with the full standards report
- For AI agents:
ulg agent install - Extending: how the style guide grows

Repository#
src/ulg/ the package; src/ulg/data holds the catalog, palette, themes and crosswalks as JSON
docs/ documentation (German, English in docs/en), generated reference pages, research
examples/ runnable examples, sample data, a MapLibre page
tools/ builders for the documentation images, logo, reference pages and HTML; data formatter
tests/ pytest suite
.github/ tests and the documentation site (GitHub Pages) run on every push
Working on the library: the rules and commands are in Working on ulg (for people and coding agents alike) and in the chapter Extending.
Licence and credit#
ulg is free software under the MIT licence: use it, change it, ship it
in commercial products, and keep the licence notice with the code. The maps and sheets you draw with it are yours.
Please reference us. If ulg or the UrbanSens Ecological Vector Style helped with a map, a plan, a report, a
tender or a paper, say so in the caption or in the list of sources:
Map style: UrbanSens Ecological Vector Style (ulg), urbansens.de
ulg.credit_line() returns it as a string (with the version number; ulg.credit_line("de") gives the German one). The style sheets and the catalog sheets (the inventory of all elements) that
ulg draws carry a small UrbanSens mark in the corner. Leave it on when you share them (credit=False turns it
off); your own maps are never stamped. BibTeX, APA, the logo rules and third-party notices:
Licence and credit.
Status#
Version 0.1.0 (2026-09-30), UrbanSens. See Changelog. Standards were researched on 2026-09-30; the standards report lists what was verified, what is paywalled and what to re-check when standards change.
