gelistet auf data.gv.at

Prototyp: acht Werte je Ort. Produkt: 220 × 220 m um die Schrankgasse 10, jede Ebene aus der Datei gezeichnet, die die App lädt.
Stadt Wien Open Data (Leuchten), CC BY 4.0 · OpenStreetMap (Bänke, Schutzwege), ODbL
Straßeninformationssystem der Stadt Wien (SISBELAGOGD) · 720 Belagsflächen in 220 × 220 m
Familie
Spittelberg · Für die meisten
Σ (Wert × Gewicht) ÷ Σ Gewicht × 10
Spittelberg
✓ Besonders stark
ⓘ Der Kompromiss
Für die Perspektive „Familie“ zählt Nachtleben nicht. Es kann also nie ihr Kompromiss sein.
-- api.py · load_place(): der Ort mit seinem Bezirk SELECT p.*, b.name AS bezirk_name, b.miete_qm, b.kaufpreis_qm FROM place p JOIN bezirk b ON b.nr = p.bezirk_nr WHERE p.id = ?; -- load_weights(): die Gewichte der Perspektive SELECT dimension, weight FROM persona_weight WHERE persona_key = 'default'; -- ranking(): alle Grätzl, sortiert wird in Python SELECT p.*, b.name AS bezirk_name FROM place p JOIN bezirk b ON b.nr = p.bezirk_nr WHERE p.kind = 'graetzl';
# engine.py · ohne Flask, ohne Datenbank testbar def living_score(values, weights): used = {d: w for d, w in weights.items() if w > 0 and d in values} total = sum(used.values()) if total == 0: raise ValueError("Mindestens ein Gewicht > 0") return round(sum(values[d] * w for d, w in used.items()) / total * 10, 1) def tradeoff(values, weights): # die schwächste Schicht, die DIESER # Perspektive wichtig ist (Gewicht ≥ 8 %) relevant = [(values[d], d) for d, w in weights.items() if w >= 0.08] return min(relevant)[1] if relevant else None
16 Tests · jeder Push, jeder Pull Request
on: push: pull_request: jobs: tests: runs-on: python steps: - name: clone repo run: git clone "https://ci:${{ forgejo.token }}@…" . - name: checkout commit run: git checkout ${{ forgejo.sha }} - name: install dependencies run: pip install -r requirements.txt - name: run tests run: python -m unittest discover -s tests -v
- prebuild Syntax-Check über 177 Dateien, die der Compiler nicht sieht
- build
tsc -b && vite build, über 750 Seiten werden vorgerendert - test Golden-Tests · Zahlen-Check gegen den Datensatz · Banned-Words-Gate über jeden generierten Text
- push = deploy Cloudflare Pages baut aus
main - nach dem Deploy Live-Smoke-Test gegen die echte Domain
- monatlich Cron-Jobs ziehen Wien OGD, OSM, GeoSphere neu
- wöchentlich Selbstheilungs-Audit der Bilder
21. Dezember, 14:00Das Haus gegenüber zeichnet die Linie. Wer darüber wohnt, hat Wintersonne.
Azima-Bühne · Schrankgasse 10, Wien-Neubau
Dieselbe Minute, im ZimmerSonnenkarten hören an der Hausmauer auf. Azima rechnet weiter: durchs Fenster, bis auf den Boden.
Azima-Bühne · Grundriss aus dem Exposé
21. Juni, 13:05Sonnenlast je m² Boden, gerechnet auf der Grafikkarte des eigenen Geräts. Der Grundriss verlässt es nie.
relativ zum sonnigsten Raum, kein Temperaturwert


Azima-Bericht als PDF · Schrankgasse 10 · 16 Seiten
- QuellenStadt Wien OGD (WFS) · OpenStreetMap · Wiener Linien · GeoSphere · Statistik Austria · Copernicus
- Build-Skripte~15 Generatoren ziehen, filtern, kuratieren. Monatlich per Cron, nie zur Laufzeit.
- Statische DatenVersionierte JSON/GeoJSON, ~42.570 Punkte, 13 Karten-Ebenen, eigene Vektor-Tiles
- EngineDeterministisch, per Golden-Tests eingefroren. Die KI übersetzt nur.
- GatesBanned-Words, Zahlen-Check, Bild-Prüfung, Smoke-Test nach jedem Deploy
| Merkmal | Prototyp (FH) | Vienna Living Map · Azima |
|---|---|---|
| Orte | 122 (Bezirke + Grätzl) | jede Adresse Wiens |
| Schichten | 8 Werte je Ort | 6 Score-Dimensionen, 8 Atmosphäre-Achsen, Licht, Lärm, Hitze, Bäume, Belag |
| Rechnen | gewichtetes Mittel | Engine, Sonnenstand astronomisch, Verbauungshorizont aus dem LOD2-Dachmodell |
| Darstellung | HTML-Karte, CLI | MapLibre GL und Three.js auf einer Bühne |
| Daten | 1 Seed-Datei | ~42.570 Punkte, eigene Vektor-Tiles |
| Sprache | – | KI als Übersetzer, nie als Quelle |
| Stack | Python · Flask · SQLite | TypeScript · React · Cloudflare · PWA |
- Die KI erfindet nie.Sie übersetzt Wünsche in Gewichte. Gerankt wird nur von der Engine.
- Jede Stärke hat einen Trade-off.Kein Ort wird als perfekt beschrieben.
- Ein fehlender Sinn wird benannt.Sommerhitze: „modelliert, kein gemessener Temperaturwert“.
- Ein gemessener Nachteil bleibt.Fluglärm, Schatten, Hitze werden besser erklärt, nie ausgeblendet.
Case Study · FHWien der WKW
Wie möchtest du leben?
Wohnungssuche in Wien beginnt fast immer falsch herum: mit einem Inserat, einem Bezirksklischee oder einer Karte voller Pins. Menschen denken nicht in „Öffis = 0,4, Grün = 0,3“. Sie denken in Wünschen.
Ein Prototyp aus dem Master Digital Technology & Innovation an der FHWien der WKW, gebaut von Lucas Jakubeit, der Vienna Living Map und Azima entwickelt.
Woher es kommt
Vienna Living Map
Ein kostenloser Wohn-Kompass für Wien: Er zeigt nicht nur, wo etwas ist, sondern wie es sich dort lebt. Alles aus offenen Daten, ohne Konto, ohne Cookies.
Open Data · Schicht für Schicht
Was eine Straße ausmacht, liegt in offenen Daten
Der Prototyp nutzt acht Werte je Ort: Sicherheit, Grün, Öffis, Luft, Ruhe, Alltag, Preis-Leistung, Stadtleben. Das Produkt geht bis auf die Straße hinunter: Belag, Dachmodell, Bäume, Leuchten, Sonnenstand. Schalte um.
Erklärt · Warum 0 bis 10Rohdaten haben verschiedene Einheiten: Anzeigen pro 1.000 Einwohner, Prozent Parkfläche, Haltestellen im Umkreis. Erst auf eine Skala gebracht lassen sie sich gewichten und addieren. Lärm ist umgedreht: hoher Wert heißt ruhig, damit überall „mehr ist besser“ gilt.
Noch einmal dieselbe Stadt
Jede Laterne dort, wo die Stadt sie verzeichnet
172.296 öffentliche Leuchten, 21.978 Bänke, 11.248 Schutzwege. Keine Schätzung, kein Zufallsmuster: Jeder Punkt steht an seiner echten Stelle.
Der Boden ist gemessen
Kopfstein liegt dort, wo die Stadt Kopfstein führt
Jede Belagsfläche mit Typ, Material und Bordstein. Daraus werden Fahrbahn, Gehsteig und Pflaster, statt Asphalt nach Straßenklasse zu raten.
Perspektiven statt Filter
Dieselbe Stadt, anders gelesen
Eine Perspektive ist nur eine Gewichtung. Die Familie legt Sicherheit und Grün nach vorne. Oben stehen Grätzl am Stadtrand, mit Wald und Weinbergen.
Perspektive wechseln
Gleiche Daten, andere Antwort
Wer Stadtleben will, gewichtet Öffis, Nahversorgung und Urbanität. Die Rangliste dreht sich: MuseumsQuartier, Westbahnstraße, Schottenring. Kein Bezirk ist objektiv der beste.
Die Engine
Eine Formel, die man nachrechnen kann
Der Living Score ist der gewichtete Mittelwert der acht Schichten, auf 0 bis 100 gebracht. Kein Machine Learning, keine Blackbox. Ab 90 heißt das Hervorragend, ab 80 Sehr gut, ab 70 Gut.
Radikale Ehrlichkeit
Jede Stärke hat einen Kompromiss
Die Engine nennt die stärksten Schichten und den Kompromiss, der für die gewählte Perspektive wirklich zählt: die schwächste Schicht, die dieser Perspektive wichtig ist. Kein Ort ist perfekt.
Für Entwickler:innen
Eine Antwort, vier Gesichter
Karte, JSON, SQL und Python sind dieselbe Antwort aus verschiedenen Blickwinkeln. Das Frontend fragt die REST-API und zeigt an, mehr nicht. Schalte um.
Erklärt · Warum das JSON so aufgebaut istDie Antwort folgt der Reihenfolge, in der die Karte sie braucht: erst die Identität (id, name, bezirk), dann das Ergebnis (score, verdict), dann der Beleg (dimensions mit Wert, Gewicht, Stufe), zuletzt die Deutung (strengths, tradeoff). Ein Frontend muss nichts nachrechnen.
Zweites Frontend
Dasselbe im Terminal
Der CLI-Client spricht mit derselben API. Ein Frontend tauschen heißt hier: eine Datei tauschen.
Vier Komponenten
Datenbank, Backend, API, Frontend
Für Agile Software Engineering hat das Team den Kern neu gebaut, mit Python, Flask und SQLite statt TypeScript und Cloudflare. Die Engine hängt weder an Web noch an Datenbank und ist deshalb einzeln testbar.
Erklärt · Wie und warum die Daten reduziert sindAus Vienna Living Map übernimmt der Prototyp je Ort nur die acht Kernwerte, als Seed-Datei. Grätzl tragen fünf eigene Werte, drei erben sie vom Bezirk. So passt der Kern in fünf Tabellen, jede Zahl ist mit dem Taschenrechner nachprüfbar, und vier Personen können ihn in einem Semester bauen und gegenseitig reviewen.
Der Git-Weg
Keine Änderung ohne zweites Augenpaar
git flow: main ist der abgegebene Stand, develop der laufende. Jedes Feature entsteht auf einem eigenen Branch und kommt per Pull Request zurück, mit Review einer zweiten Person und grünen Tests.
CI/CD
Dieselbe Idee, zwei Größen
Für den Prototyp reichen 16 Zeilen: Bei jedem Push klont der Forge-Runner das Repo, installiert Flask und lässt die Tests laufen. Im Produkt ist die Kette länger, das Prinzip gleich: Jede Prüfung steht im Code.
Erklärt · YAML, CI und CDDie YAML-Datei sagt dem Forge, was er nach jedem Push tun soll. CI (Continuous Integration): Jede Änderung wird sofort gegen alle Tests geprüft, nicht erst am Abgabetag. CD (Continuous Delivery): Derselbe Push löst den Deploy aus. Der Prototyp hat CI, bewusst ohne CD, damit die Gruppe den Schritt zum Live-Stellen selbst versteht.
Wo es weitergeht · Licht
Die Stockwerk-Lotterie
Vienna Living Map baut jede Adresse als 3D-Welt im Browser: Gebäudehöhen aus dem amtlichen Dachmodell der Stadt Wien, Bäume aus dem Baumkataster, echtes Gelände. Die Sonne wandert, der Schatten wandert mit.
Azima
Die Sonne im Zimmer
Daraus ist Azima entstanden, der Licht-Check für Wohnungen. Er liest den Grundriss aus dem Exposé-PDF, stellt die Wohnung ins echte Haus und rechnet, wann direkte Sonne auf den Boden fällt. Raum für Raum.
Gerechnet auf deinem Gerät
Sonnenlast, kein Upload
Die Berechnung läuft auf der Grafikkarte des eigenen Handys oder Laptops. Der Grundriss verlässt das Gerät nie, und Azima sagt offen, wenn die Daten für eine Antwort nicht reichen.
Ausblick: Der nächste Schritt rechnet das Licht im Innenraum aus dem Grundriss. Das gibt es für Wien bisher nicht. Wie genau, wird noch nicht verraten.
Azima · Der Bericht
Alles in einem PDF, Raum für Raum
Am Ende sichert Azima das Ergebnis als Bericht: wann die Sonne in welchen Raum kommt, an drei Stichtagen und übers Jahr, was das Haus gegenüber verdeckt, was daraus für Beschattung und Arbeitsplatz folgt. Dazu „Auf dem Dach“: Photovoltaik laut Solarkataster der Stadt und die begrünbare Fläche aus dem Dachmodell. Schalte um.
Jede Zahl mit Quelle, jede Grenze benannt: kein Gutachten, kein Nachweis nach ÖNORM, sondern ein nachvollziehbares Modell.
Die Datenfabrik
Keine Datenbank, die jemand füllt
Build-Skripte holen offene Daten, kuratieren sie und schreiben statische Dateien. Alles Endliche wird einmal vorgerechnet, nie zur Laufzeit. Stimmt eine Gesamtzahl über das Produkt nicht mehr, wird der Build rot.
Erklärt · Wie die Systeme ineinandergreifenDie Skripte schreiben Dateien, die App liest sie, die Engine rechnet den Score, die Karte zeigt ihn. Die KI sitzt nur an zwei Übergängen: Wunsch → Gewichte und Fakten → Satz. Fällt sie aus, rechnet alles weiter. Der Prototyp hat denselben Aufbau im Kleinen: Seed-Datei → SQLite → Engine → API → Karte.
Ehrlich gesagt
Wie abgespeckt der Prototyp ist
Der Prototyp zeigt den Kern in rund 400 Zeilen Python. Das Produkt dahinter rechnet für jede Adresse Wiens den Sonnenstand, baut aus dem Dachmodell einen Verbauungshorizont und rendert das Umfeld in 3D. Wer die Formel versteht, versteht auch, was die große Version mehr weiß.
Prinzipien, die im Code stehen
Das Gegenteil von Immobilien-Marketing
Diese Regeln sind in Vienna Living Map Build-Gates, keine Absichtserklärungen. Der Prototyp übernimmt die ersten beiden wörtlich in seine Engine.
Das größere Bild
Vom Prototyp zum Produkt
Eine Suche, die Wünsche in Alltagssprache versteht, ein Atmosphäre-Fingerabdruck mit acht Achsen, das echte Licht jeder Adresse. Alles kostenlos, gebaut in Wien, für Wien.
Live · der Prototyp im Browser
Probier die Engine selbst
Wähle einen der 122 Orte und eine Perspektive, oder gewichte selbst. Gerechnet wird hier, mit der Engine des Prototyps (engine.py, nach JavaScript übertragen) auf den Daten vom 1. Oktober 2026. Die Flask-App selbst geht mit der Abgabe im Jänner 2027 online.
Perspektive
Selbst gewichten
–
Live · Azima im Inserat
Das Licht-Widget, eben in deinem Browser gerechnet
Eine Zeile Code zeigt auf jeder Inseratsseite, wie viele Stunden direkte Sonne eine Wiener Adresse am 21. März, 21. Juni und 21. Dezember bekommt, aus den amtlich gemessenen Gebäudehöhen der Stadt Wien. Darunter „Auf dem Dach“: Photovoltaik-Potenzial und begrünbare Fläche. Die Karte unten ist das echte Widget, nicht ein Bild davon.
<script src="https://viennalivingmap.com/einbetten.js" data-adresse="Schrankgasse 10, 1070 Wien" data-etage="3" data-partner="DEIN-SCHLUESSEL" async></script>
<iframe src="https://viennalivingmap.com/einbetten#adresse=Schrankgasse%2010%2C%201070%20Wien&etage=3" title="Sonne an dieser Adresse" loading="lazy" style="width:100%;max-width:560px;height:440px;border:0"></iframe>
Kein Cookie, kein Tracking: Adresse und Schlüssel stehen im Fragment des Rahmens und erreichen nie einen Server. Alles zum Widget →
Was Wiens offene Daten noch können
Fünf Geschichten aus denselben Daten
Weiter
Das Produkt hinter der Case Study
Der Prototyp zeigt die Formel. Vienna Living Map zeigt die Stadt, Azima das Licht in der Wohnung.
API des Prototyps
Elf Endpunkte, alle JSON
| GET | /api/v1/places?q=Spittelberg | Orte suchen |
| GET | /api/v1/places/<id>?persona=familie | Score-Karte eines Ortes |
| GET | /api/v1/ranking?persona=urban&kind=graetzl | Rangliste |
| GET | /api/v1/compare?a=<id>&b=<id> | Wo gewinnt welcher Ort? |
| POST | /api/v1/score | eigene Gewichtung |
| GET · POST · PATCH · DELETE | /api/v1/favorites | Merkliste |
Fehler kommen als {"error": "…"} mit 400 oder 404. 16 Unit-Tests laufen bei jedem Push.
Daten & Quellen
23 Bezirke und 99 Grätzl aus Vienna Living Map, beruhend auf Wiener Open Government Data (data.wien.gv.at, CC BY 4.0), OpenStreetMap (ODbL), der Kriminalstatistik, dem Umweltbundesamt und Statistik Austria. Preise sind Bezirks-Mediane. Bilder: Azima-Bühne und Open-Data-Grafiken, Schrankgasse 10, Wien-Neubau.
Lehrveranstaltung Agile Software Engineering, Master Digital Technology & Innovation (Kohorte 1.28), FHWien der WKW, Wintersemester 2026/27. Keine Wohnungsberatung.