As-If Science Jam Schmiede26 · 16–26 Sept 2026 · Hallein
← all datasets

Vienna Tree Register (Baumkataster) — BAUMKATOGD

Every tree the City of Vienna maintains: species, planting year, trunk circumference, height class, crown class, district, street, coordinates.

  • Source: https://www.data.gv.at/katalog/organization/stadt-wien → Baumkataster
  • Direct download (WFS, no auth, no key):
    https://data.wien.gv.at/daten/geo?service=WFS&request=GetFeature&version=1.1.0
      &typeName=ogdwien:BAUMKATOGD&srsName=EPSG:4326&outputFormat=csv
  • Licence: Creative Commons Attribution 4.0 (CC BY 4.0) — the standard for all Open Government Data of the City of Vienna. Verified 2026-08-07.
  • Required attribution: Datenquelle: Stadt Wien – data.wien.gv.at
  • Publisher: Stadt Wien, Magistrat

Note on the licence terms: Vienna additionally reserves the right to publicise applications built on its data. Harmless, but read https://digitales.wien.gv.at/ogd-nutzungsbedingungen/ before anything goes on a poster.

Shape

rows232 290 trees
download53 MB CSV, one request, about 20 seconds
columns18 (see below)
districts24 values — the 23 Bezirke plus an empty string on 595 rows
species strings676 distinct GATTUNG_ART values
record holderDATENFUEHRUNG = magistrat on all 232 290 rows

Columns: FID, OBJECTID, SHAPE, BAUM_ID, DATENFUEHRUNG, BEZIRK, OBJEKT_STRASSE, GEBIETSGRUPPE, GATTUNG_ART, PFLANZJAHR, STAMMUMFANG, BAUMHOEHE, KRONENDURCHMESSER, BAUMNUMMER, SE_ANNO_CAD_DATA, and a _TXT twin for each of the four measurement columns.

Top genera: Acer 50 292, Tilia 26 196, Fraxinus 18 148, Aesculus 14 484, Celtis 10 734. Largest districts by tree count: 22nd (34 698), 21st (22 609), 2nd (21 399). Smallest: 8th (995).

Why it suits the jam

It is the friendliest dataset we have. Everyone understands a tree. There is no jargon, no unit anyone has to look up, no domain expert in the room who will object on technical grounds. A participant who has never opened a CSV can have a plot of Vienna’s trees within twenty minutes, and the poster designs itself.

It is completely safe. Nothing you can conclude about street trees harms anyone. An absurd finding about the 8th district’s lime trees is legible as a game from across the room. It clears F1 more comfortably than anything else in this folder.

It has an enormous number of slicing handles. 23 districts × 676 species strings × planting years back to 1658 × four measurement columns. Any claim of the form “trees in X are Y” has thousands of defensible-looking routes to it.

And it is honest in a way that makes the deception purely the reader’s fault — see below. That turns out to be the most interesting thing about it.

The traps

1. Year zero — the sentinel again, 548 years wide

PFLANZJAHR is the planting year. 63 911 trees — 27.5% of the register — carry the value 0. The twin column PFLANZJAHR_TXT reads nicht definiert on every one of them.

what you domean planting year
df.PFLANZJAHR.mean()1445.3
drop the zeros first1993.9

The average Vienna street tree was planted in 1445, four decades before Columbus sailed and during the reign of Frederick III. Nobody will believe that number if you show it — but nobody shows the mean planting year. They show tree age, which is 2026 - PFLANZJAHR, and they show it per district, where the zeros are unevenly distributed and quietly shift the rankings by centuries without producing a single figure that looks wrong.

This is the same structure as the -1 rainfall sentinel in geosphere-klima-v2-1d, and it is worth having both in the room: two unrelated public agencies, two completely different domains, the same failure available in the first line of analysis. It is not a quirk of one dataset. It is what datasets are like.

Real planting years do go back a long way — 1658, 1708, 1725 — so “implausibly old” is not a clean filter either. A team that drops everything before 1900 to be safe has just made another undocumented sampling decision.

2. BAUMHOEHE is not metres — the unit that isn’t

This is the best trap in the dataset, and it is subtle enough to survive a Defensio.

BAUMHOEHE runs 0 to 8. It looks like metres. It is an ordinal class code:

codeBAUMHOEHE_TXTn
0nicht bekannt3 599
10-5 m64 436
26-10 m83 558
311-15 m55 604
416-20 m18 587
521-25 m5 056
626-30 m1 332
731-35 m105
8> 35 m13

mean(BAUMHOEHE) = 2.182. Put “average tree height: 2.18 m” on a slide and a sharp audience member may object that Vienna’s street trees are visibly taller than a person. But almost nobody puts the pooled mean on a slide. They put district A 2.61 vs district B 2.09 on a slide, as a bar chart, labelled “metres”, and it passes — because the comparison is directionally meaningful even though the units are fiction.

It gets worse in a useful way. Averaging an ordinal code assumes the classes are evenly spaced. They are not: classes 1–7 are 5 m wide but class 1 spans 0–5 m and class 8 is unbounded above. So even the ranking between districts can be manipulated by how you handle the top class. Recode class 8 as 35, or as 40, or as the class midpoint, and the answer moves. Every one of those is a recorded transformation step.

KRONENDURCHMESSER is coded the same way (0 = unknown, 1 = 0-3 m, … 8 = >21 m).

STAMMUMFANG is different, and the difference is the trap. It really is centimetres — 1 means 1 cm — so of the four measurement columns, three are class codes and one is a genuine measurement, 0 means “unknown” in all four, and nothing in the column names tells you which is which. A team that discovers the coding for one column and generalises to the others gets a plausible, reproducible, entirely wrong answer. Also note STAMMUMFANG reaches 34 593, i.e. a trunk 346 m around, so it has outliers of its own.

3. The dataset tells you everything, and that is the point

Every sentinel in this file has a _TXT twin that spells out the answer in plain German. PFLANZJAHR = 0 sits next to PFLANZJAHR_TXT = 'nicht definiert'. BAUMHOEHE = 2 sits next to BAUMHOEHE_TXT = '6-10 m'. The City of Vienna concealed nothing. The documentation is in the row.

The deception still works, every time, because analysts select the numeric columns and drop the text ones — they look redundant, and they break your plotting library.

Make this explicit in your Defensio if you use this dataset. “We did not hide anything. The disambiguation was shipped in the next column over. You did not read it.” That is a much more uncomfortable point than any statistical one, and it is the actual lesson of the jam.

4. Coverage that varies by district — selective sampling for free

The register covers trees the Magistrat maintains. Park trees, forest trees (the Wienerwald), private garden trees and cemetery trees are variously in or out. District tree counts therefore measure municipal responsibility at least as much as they measure trees, and the 22nd district’s 34 698 versus the 8th’s 995 is largely a fact about land use and administration.

Any per-district rate — trees per capita, trees per km², trees per anything — inherits this. It is a denominator argument, it is completely legitimate to make, and it is invisible unless someone asks what the register is a register of.

Suggested claims

  • “Vienna’s trees are getting shorter” (mix the BAUMHOEHE class-code mean with a changing district composition over successive register releases)
  • “The 1st district has Vienna’s oldest trees” (let the zeros do the work)
  • “Maples are crowding out lindens” (676 species strings, no controlled vocabulary — the normaliser that decides which strings are the same species is where this one lives; that is a selective agreement trap, and it maps onto the same lineage node as the duplicate weather stations)

Notes

  • 53 MB is fine on a laptop but slow in a browser-based notebook. Filter by BEZIRK server-side with a WFS CQL_FILTER if a team is struggling.
  • SHAPE holds the geometry as text and dominates the file size. Drop it unless mapping.
  • Vienna publishes many sibling datasets under the same licence and the same WFS pattern — swap typeName for playgrounds, drinking fountains, benches, dog zones. Cross-joining two of them by district is the easiest route to a spurious correlation this folder offers.

Sensitivity

None. Trees.