Datenquellen
Kategorien
- Grenzen & Geometrie — Wo liegt das Grundstück, wie groß ist es, was steht darauf?
- Widmung & Schutz — Was darf hier gebaut werden, was plant die Gemeinde?
- Risiko & Klima — Was bedroht das Grundstück (Wasser, Boden, Wetter)?
- Realnutzung & Infrastruktur — Was ist vor Ort und drumherum verfügbar?
- Förderung — Wer finanziert die Aktivierung mit?
- Immobilienpreise — Wie entwickeln sich Preise nach Region und Zeit?
Übersicht (sortiert nach Reife / Risiko)
| Quelle | Kategorie | Format | Lizenz | Risiko | POC-Use |
|---|---|---|---|---|---|
| basemap.at Orthofoto | 1 | WMS / WMTS / Tiles | OGD CC BY 4.0 | Niedrig | ✅ Erste Wahl Hintergrundkarte |
| GeoSphere Austria | 3 | REST JSON | OGD CC BY 4.0 (meist) | Mittel (Rate-Limit) | ✅ Erste Wahl Klima |
| PVGIS (EU-JRC) | 3 | REST JSON | frei, keine Nutzungsbeschränkung | Niedrig | ✅ Default PV-Ertrag (standortgenau) |
| Google Solar API | 3 | REST JSON | Maps Platform ToS (nicht persistierbar) | Mittel (Kosten/ToS) | 🔒 Premium dachgenau, wo Coverage |
| NÖGIS Widmung | 2 | WFS / WMS / JSON | OGD CC BY | Mittel | ✅ Erste Wahl Widmung |
| NÖGIS Geogene Gefahren | 3 | WMS / WFS | OGD CC BY | Niedrig | ⚠️ Nicht im NÖ-OGD-Dienst (offen, Briefing M6) |
| Schutzgebiete (Natur + Wasser, NÖ) | 2, 3 | WMS-GetFeatureInfo | OGD CC BY 4.0 | Niedrig | ✅ Live (Naturschutz/Natura 2000/Wasserschutz) |
| Lärminfo | 3 | WMS-GetFeatureInfo (Strategische Lärmkarten) | OGD CC BY 4.0 | Niedrig | ✅ Live (Straße/Schiene, Lden+Lnight) |
| ÖV-Güteklassen (ÖROK/BMIMI) | 2, 4 | Shapefile-Jahreslieferung → PostGIS-Mirror | Haftungsausschluss (keine Lizenzauflagen) | Niedrig | ✅ Live (Pilot-Mirror, Klassen A–G) |
| OpenStreetMap — POI-Dichte / 15-Min | 4 | GeoFabrik-Extrakt → PostGIS-Mirror | ODbL 1.0 (Share-Alike) | Niedrig | 🟡 Phase 2 (Pilot-Mirror, Nahversorgungs-Score) |
| Grundbuch (JustizOnline) | 1, 2 | PDF-Auszug (kostenpflichtig, kein OGD) | Bundesabgabenordnung | Hoch (Kosten + kein API für Massenabfrage) | MVP (B2C on-demand) — siehe ADR-0016 |
| ALSAG / Altlastenportal | 3 | WFS | OGD | Hoch (Verdachtsflächenkataster seit 1.1.2025 weg) | ✅ POC |
| Microsoft Building Footprints | 1 | GeoJSON Bulk | ODbL (Share-Alike) | Niedrig | ✅ POC |
| BEV Kataster / INSPIRE | 1 | WFS 2.0.0 GML | Standardnutzungsrechte | Hoch (Export kritisch) | ✅ POC |
| Sentinel-2 / Copernicus | 3, 4 | EU Copernicus | Frei | Niedrig | Phase 2 + |
| geoland.at Aggregator | 1, 2 | WMS / WFS | OGD je Bundesland | Niedrig | Phase 4 (Skalierung) |
| BDA Denkmalschutz | 2 | Statische CSV (parzellenscharf, build-time → JSON) | OGD (freies Werk) | Niedrig | ✅ Live (NÖ, KG+GstNr-Match) |
| RTR Breitbandatlas | 4 | REST + WMS / WFS | OGD | Niedrig | Phase 3 |
| Brachflächen-Dialog (BMLUK) | 4 | Karte öffentlich, API unklar | OGD (Karte) | Hoch (SPoF) | Phase 2 (sofern Magnus klärt) |
| HORA 3.0 | 3 | WMS via LFRZ | Reseller-Vertrag offen | Hoch (kommerzielle Lizenz) | Erst nach Lizenz-Klärung |
| Gemeinderatsprotokolle | 2 | HTML / PDF / gescannt | öffentlich, kein API | Mittel (DSGVO + DQ) | Phase 3 + |
| KPC / LEADER / KMU.DIGITAL / aws | 5 | Webportal, kein API | Förderdaten | Mittel (kein API) | RAG-Pipeline Phase 2 + |
| Mapillary | 1 (Street-Level) | API | CC BY-SA 4.0 | Mittel (Coverage dünn) | Phase 3 + (städtisch) |
| Google Street View / Bing Streetside | 1 (Street-Level) | API (kommerziell) | Maps Platform ToS | Hoch — AI-Auswertung verboten | ❌ Niemals für AI-Auswertung |
Implementierungsstatus (getestet / implementiert)
Quellen mit lauffähigem, idempotentem Ingest-Script (ADR-0005 Spiegelung). „Live verifiziert" = End-to-End gegen Live-Endpoint geprüft; „Script vorhanden" = implementiert, Pilot-Scope getestet, Statewide-/Cron-Ausbau dokumentiert.
| Quelle | Status | Script |
|---|---|---|
| BEV Kataster / DKM | ✅ Verifiziert (Pilot-bbox inkl. SW-Erweiterung Gänserndorf-Stadt; ~29,8k Parzellen via /vsicurl-Range statt 35-GB-Download) | scripts/ingest-parzellen.mjs |
| NÖGIS Widmung | ✅ Verifiziert (Pilot Bez. Gänserndorf; Statewide ~73k per all-Flag) | scripts/ingest-widmung.mjs |
| ALSAG / Altlasten | ✅ Verifiziert (INSPIRE-Predefined GML, Stand 2020-10-15; nur publizierte Altlasten, R-03) | scripts/ingest-altlasten.mjs |
Eurostat prc_hpi_q | ✅ Live verifiziert (AT bis Q4/2025, EU/EA + alle MS) | scripts/ingest-prices-eurostat.mjs |
| Statistik Austria HPI | ✅ Live verifiziert (OGD-Cube, 5 Messgrößen, AT gesamt) | scripts/ingest-prices-statat.mjs |
| OeNB Fundamentalpreisindikator | ✅ Live verifiziert (Dashboard-ZIP, 1989-Q1 → 2025-Q4, 296 Datenpunkte AT + Wien; AT 2025-Q4 = +4,60 %, Wien = +12,31 %) | scripts/ingest-prices-oenb.mjs |
| EZB Data Portal (HICP Wohnmieten) | ✅ Live verifiziert (ICP/M.U2.N.041000.4.INX, Euroraum 2010-01 → 2025-12, Index 120,39; generisch über SDMX-JSON-Flows) | scripts/ingest-prices-ecb.mjs |
| OECD Analytical House Prices | ✅ Live verifiziert (50 Länder, AT 2025=167,3 · 2015=100; SDMX-CSV-Bulk mit Labels) | scripts/ingest-prices-oecd.mjs |
BIS Property Prices (WS_SPP / WS_DPP / WS_CPP) | ✅ Live verifiziert — WS_SPP 61 Länder (AT 2025-Q4 Nominal-Index 2010=100 = 211,51); WS_DPP Detailed Residential (AT-Wien Flats All 2025-Q4 = 310,8 · Index 2000=100; #88); WS_CPP Commercial 19 Länder ohne AT (DE Office 2025-Q4 = 163,7 · Index 2010=100; #88); SDMX-CSV mit labels=both, Multi-Dim-Slugs | scripts/ingest-prices-bis.mjs |
| Eurostat Census 2021 1km-Bevölkerungsraster | ✅ Live verifiziert (#98, INSPIRE-Endpoint; 42.966 populated AT-Zellen, ∑ Bev. = 8,97 Mio.; 13 STAT-Kategorien je Zelle; Spatial-Join auf 18.263 Parzellen verifiziert) | scripts/ingest-bevoelkerungsraster.mjs |
| Ediktsdatei (Zwangsversteigerungen) | 🟡 Stufe 1 — Schema + Ingest implementiert, Magnus-Defaults am 2026-05-26 abgenickt (Retention 365 d, Wertband ±20 %, Adress-Maskierung inkl. Villa/Bungalow/Hütte + null-Default, Connector = Playwright-Sandbox). Live-Lauf wartet auf Playwright-Connector-Issue + BMJ-Info-Mail. Discovery: discovery/edikte-discovery.md. | scripts/ingest-edikte.mjs + lib/edikte/policies.ts |
| OpenStreetMap POI-Dichte | 🟡 Code + Migration + Ingest implementiert (#101/#250 Phase 2, Pre-Ingest PostGIS-Mirror, Pilot-bbox Gänserndorf). Offline-Schritt (GeoFabrik-Extrakt + osmium/ogr2ogr-Tag-Filter) + Daten-Ingest stehen aus; ODbL-Share-Alike + Radius/Schwellen als Magnus-Punkt offen. | scripts/ingest-osm-pois.mjs + lib/geo/poi-dichte.ts |
Gemeinsame Helfer: scripts/lib/ (jsonstat.mjs, sdmx-json.mjs mit
v1+v2-Parser, statat-ogd.mjs, xlsx-mini.mjs, csv.mjs RFC-4180,
prices-db.mjs, ingest-runs.mjs). Alle Scripts idempotent
(ON CONFLICT Upsert), Lauf-Tracking in ingest_runs (Migration 0014),
Cron-fähig (ADR-0011). Nächste Spiegelungs-Kandidaten mit bekanntem
Endpoint: basemap.at, GeoSphere, Microsoft Building Footprints.
Detail pro Quelle
basemap.at Orthofoto
- Endpoints: WMS/WMTS Standard
- Auflösung: 20 cm in besiedelten Gebieten, 50 cm sonst
- Aktualität: 2 – 3 Jahre
- Lizenz: CC BY 4.0 (OGD), kommerzielle Nutzung explizit erlaubt
- Attribution-Pflicht: „Kartendaten © basemap.at, CC BY 4.0" sichtbar im Frontend und auf PDF-Reports
- Verwendung: Hintergrundkarte für MapLibre, Solar-Score-Berechnung mit DGM
BEV Kataster / INSPIRE
- Endpoints: WFS 2.0.0, CSW für Metadaten, GML/GeoJSON-Output
- Lizenz: Standardnutzungsrechte (nicht voll OGD); kommerzieller Planer-Export lizenzrechtlich kritisch
- ⚠️ Offener Blocker — Owner Magnus: schriftliche Klärung der Nutzungsrechte für (a) dauerhafte Speicherung der gespiegelten DKM und (b) kommerziellen Planer-Export ausstehend. Phase 2 bis dahin „spekulativ". Tracking: #77, Risiko RISKS.md R-02
- DKM ≠ Grundbuch: Geometrie nicht zentimetergenau; Toleranzmargen bei Flächenberechnung pflicht
- Kataster-Status (RSTATUS):
G= Grenzkataster (Grenzen rechtsverbindlich/vermessungsgenau, engere Anzeige-Toleranz),E= Grundsteuerkataster (Grenzen nur ersichtlich gemacht, NICHT rechtsverbindlich → größere Toleranz). Wird ausparzellen.rstatusdurchgereicht und im Report ausgewiesen; Anzeige-Toleranz heuristisch (keine Rechtsgarantie) - Aktualität/Stichtag: DKM erscheint quartalsweise mit neuem Stichtag.
parzellen.bev_stichtag(aus dem GPKG-Dateinamen) hält den echten Datenstand; der Report zeigt diesen statt nur Spiegelungs-/Abfragedatum. Re-Ingest idempotent. Vercel-Cron/api/cron/ingest-parzellen(quartalsweise) detektiert neue Stichtage und schreibtingest_runs.status='pending_manual'— der eigentlicheogr2ogr-Lauf bleibt manuell, weil Vercel kein GDAL hat (ADR-0034, Issue #83). Script:scripts/ingest-parzellen.mjs - Opt-in-Disclaimer für Endnutzer pflicht („errechnete Szenarien ersetzen keine rechtsverbindliche Vermessung")
- DACH-Skalierung: Deutschland hat 16 separate Landes-APIs (ALKIS) — geoland.at-Vergleich AAA-Modell
GeoSphere Austria
- Base-URL:
*.hub.geosphere.at(alte ZAMG-URLs deprecated, Migration abgeschlossen) - Format: REST, JSON / CSV / NetCDF
- Datensätze: TAWES (Stationen 10 min), INCA (1 km Raster), HISTALP (homogenisiert seit 1760), ÖKS15 Klimaszenarien bis 2100, SPARTACUS, SNOWGRID, Strahlung, Trockenheitsindex
- Lizenz: CC BY 4.0 (meist), teils CC0
- Rate-Limit: 5 req/sec, 240 req/h, max 1 M Werte / Response → aggressives Caching ab Tag 1
- Caching-Strategie: Historische Aggregate pro 1×1-km-Zelle in PostGIS pre-computed; Live-Calls nur für TAWES-Aktuelldaten via Redis
PVGIS (EU-JRC) — IMPLEMENTIERT (Default PV-Ertrag, ADR-0037)
- Base-URL:
re.jrc.ec.europa.eu/api/v5_3(PVcalc), Modullib/geo/solar.ts#getPvgisYield - Liefert: spez. Jahresertrag [kWh/kWp] bei optimaler Ausrichtung (AC), Einstrahlung, optimale Neigung/Azimut →
report.solar - Lizenz: frei, keine Registrierung, keine Nutzungsbeschränkung (EU-JRC, EU-gehostet)
- Nutzung: ersetzt die Konfig-Pauschale
1140standortgenau (Engine liestreport.solar?.spez_ertrag_kwh_pro_kwp ?? Pauschale). Klimatologisch stabil → 30-Tage-Cache.
Google Solar API (Building Insights) — IMPLEMENTIERT (Premium-Live-Overlay, ADR-0037)
- Endpoint:
solar.googleapis.com/v1/buildingInsights:findClosest,requiredQuality=MEDIUM(NICHTbuildings:, KEINexperiments=EXPANDED_COVERAGE— bricht AT) - Liefert: dachgenaue max. kWp/Belegung, Dachflächen, Bildqualität — DC-Werte →
report.solar.google - Tier-Gate: nur
premium/planer+GOOGLE_SOLAR_API_KEY(lib/report/tier.ts); fail-open auf PVGIS; nur HTTP 404 = keine Coverage - Lizenz/ToS (R-07): Google Maps Platform — kein Caching > 30 Tage / Datenbankaufbau. Daher Live-Overlay, vor Persistenz entfernt (
stripGoogleSolar). Billing-Konto erforderlich, auch innerhalb des kostenlosen Google-Kontingents (10.000 Building-Insights-Calls/Monat). AT-Coverage: Städte/Kleinstädte ≥ ~2,3k EW (HIGH/MEDIUM), Dörfer 404.
NÖGIS Widmung
- Format: WFS / WMS / JSON / SHP / KML
- Auflösung: OGD, teils generalisiert
- Verwendung: Bauland / Grünland / Industrie / Sonder — als rechtliche Ampel
- Wichtig: Keine rechtsverbindliche Auskunft, nur Indikation
- Zwei-Stufen-Lookup (
lib/geo/widmung.ts): (1) exakter PostGIS-Mirror (NÖ-weit, ~73k Flächen,scripts/ingest-widmung.mjs --all); (2) Live-Fallback überRRU_WI_HUELLE(NÖ-OGD WMS-GetFeatureInfo, liefertWI_ART/WIDMUNG/LAND_DATUMje Punkt) — greift bei Mirror-Lücke oder DB-Ausfall, gleiche Klassifikation ohne exakte Fläche.widmung.source=dkm_mirror|wms. - Skalierung: geoland.at als Aggregator für andere Bundesländer prüfen
ALSAG / Altlastenportal
- Endpoint:
https://altlasten.umweltbundesamt.at/altlastenwfs/kontaminierteFlaechen/wfs - Hintergrund: Verdachtsflächenkataster seit 01.01.2025 abgeschafft — nur publizierte Flächen abfragbar
- Implementation: PostGIS
ST_Intersectszwischen BEV-Parzelle und ALSAG-Polygonen - Disclaimer pflicht: „Nicht-Listung garantiert keine Schadstofffreiheit"
Hochwasser-Abflussbereiche (NÖ-OGD) — IMPLEMENTIERT (Pfad B)
- Status: Live im öffentlichen Report (
lib/geo/hochwasser.ts), fail-open. - Quelle: Land Niederösterreich, Hochwasserabflussbereiche HQ30/HQ100/HQ300
(Layer
HYD_HW30,HYD_HW100,HYD_HW300ETC). - Format: WMS-GetFeatureInfo (NÖ-OGD-GeoServer
sdi.noe.gv.at, WMS 1.1.1,INFO_FORMAT=text/plain, gemeinsamer Helperlib/geo/noegis.ts); serverseitiges Punkt-in-Polygon, FeldJAEHRLICHKEIT(30/100/300). - Lizenz: CC BY 4.0 (OGD NÖ), „Datenquelle: Land Niederösterreich (data.noe.gv.at)".
- Ampel: HQ30/HQ100 → rot (häufig / Bemessungshochwasser); HQ300 → gelb (selten); keine Zone → grün. Indikator, kein Gefahrenzonenplan.
- Verhältnis zu HORA (Pfad A): löst die HORA-Lizenzsperre für das Hochwasser-Signal, weil die NÖ-Abflussbereiche frei sind. HORA bleibt für die 10-Gefahren-Matrix (Pfad A) offen.
- Scope: Niederösterreich (Pilot). Statewide-Erweiterung = weitere Landes-WMS.
HORA 3.0
- WMS via LFRZ (Landwirtschaftliches Rechenzentrum)
- Daten: Hochwasser HQ30 / HQ100 / HQ300, hypothetische Versagensszenarien
- ⚠️ Lizenz-Risiko: Kommerzielle Nutzung kann Reseller-Vertrag erfordern — nicht zwingend OGD-frei
- Workaround: WFS-Vektoren ziehen, eigene Intersection berechnen, keine WMS-Bilddaten im Produkt reproduzieren
- Status: Hochwasser-Signal vorerst über NÖ-OGD-Abflussbereiche abgedeckt (siehe oben); HORA-10-Gefahren-Pass vor Phase-3-Launch klären (siehe RISKS.md)
Microsoft Building Footprints
- Bereitstellung: GeoJSON Bulk-Download, AT-flächendeckend
- Lizenz: ODbL — kommerziell erlaubt, Share-Alike-Klausel auf abgeleitete Datensätze
- Verwendung: „Was steht auf der Parzelle?" — Realbestand-Indikator, Solar-Potenzial
- Update: Statischer Datensatz, nicht live
Sentinel-2 / Copernicus
- Daten: 10 m Auflösung, 5-Tages-Update, optisches Satellitenbild
- Lizenz: Frei, EU-weit
- Verwendung: NDVI für „Brache überwuchert?", Change Detection, Versiegelungsgrad
- Phase: ab Phase 2 für Brachflächen-Score
geoland.at
- Was: Gemeinsames Geoportal aller österreichischen Bundesländer
- Format: INSPIRE-konforme WMS / WFS
- Strategischer Wert: Reduziert Bundesländer-Anbindung von 9 separaten Landes-APIs auf einen Aggregator
- Phase: ab Phase 4 (Skalierung 2. Bundesland)
BDA Denkmalschutz — IMPLEMENTIERT (NÖ, parzellenscharf)
- Status: Live im öffentlichen Report (
lib/geo/denkmal.ts). - Quelle: Bundesdenkmalamt — Denkmalverzeichnis §3 DMSG, NÖ-CSV (10.891 Objekte,
Spalten u. a.
KG,Grundstücksnummern,Objekttitel,Denkmalschutz Status). - Format: Statische CSV pro Bundesland, keine REST-/Geo-API, jährliches Update.
- Pipeline (bewusst kein DB-Ingest/Geocoding): Build-Time-Generator
scripts/build-denkmal-noe.mjs(Auto-Discovery der aktuellen NÖ-CSV auf bda.gv.at) erzeugt eine nachKG-Code::GstNrindizierte JSON (lib/geo/data/denkmal-noe.json, ~1,1 MB, committet). Laufzeit-Lookup rein in-memory — kein Netz, keine DB, kein Cron. Jährlicher Refresh = Skript erneut laufen lassen + JSON committen. - Matching: exakt über Katastralgemeinde-Code + Grundstücksnummer (beide
liefert die BEV-WMS-Sofortabfrage im Report; live verifiziert, inkl.
Bauparzellen-Punkt-Notation
.1/.33). Kein Buffer, keine Fuzzy-Geokodierung. - Lizenz: Denkmalverzeichnis = freies Werk (kein Urheberrechtsschutz), Attribution „Bundesdenkmalamt".
- Ampel: gelistet → rot (Veränderung/Abbruch bewilligungspflichtig), sonst grün.
- Grenzen (R-03): Ensembles/Umgebungsschutz + nicht parzellengenau geführte Einträge sind nicht erfasst; Liste laut BDA nicht rechtsverbindlich. Verbindliche Auskunft nur durch das BDA.
RTR / Breitbandatlas (Festnetz) — IMPLEMENTIERT
- Status: Live im öffentlichen Report (
lib/geo/breitband.ts), fail-open. - Format: WMTS-GetFeatureInfo (GeoWebCache,
breitbandatlas.gv.at), LayerFestnetz, TileMatrixSetEPSG:3857. Liefert je 100×100-m-Rasterzellemax_downloadrate(Mbit/s) +max_downloadrate_klasse(Text). - Achtung: Die früher dokumentierte REST-/HTTP-API wurde per 30.06.2025
eingestellt — der WMTS-GFI-Pfad ist der verbleibende Live-Zugang. Kein
Ingest/Mirror, eine Tile-Query pro Report (Tile-Mathematik in
wmtsTile). - Lizenz: CC BY 3.0 AT (lt. GetCapabilities
ows:AccessConstraints), Attribution „Quelle: Breitbandatlas, Breitbandbüro / BMWKMS, CC BY 3.0 AT". - Verwendung: Versorgungs-Indikator (Ampel ≥ 100 / ≥ 30 / < 30 Mbit/s); Mobilfunk nicht berücksichtigt. Standortfaktor auch für Gewerbe-Szenarien (Co-Working, Rechenzentrum).
Brachflächen-Dialog · BMLUK
- Status: Karte öffentlich auf BMLUK-Domain; API-Zugang nicht belastbar bestätigt
- Falsch-Positiv-Rate: KI-Klassifikation erkennt Schotter / Lagerflächen fälschlich als Brachen
- Human-in-the-Loop: Korrekturen durch Nutzer veredeln Rohdaten zu eigenem Asset
- Strategie: USP-Verstärker, aber nicht alleinige Datenbasis (siehe Eigener Brachflächen-Score in docs/POC-PLAN.md)
Gemeinderatsprotokolle
- Quelle: öffentlich, heterogen (HTML, PDF, gescannt) pro Gemeinde
- Pipeline: Wöchentlicher Scraper → OCR → RAG-Index (Vektor-DB) → LLM-Extraktion
- DSGVO: Klarnamen vor RAG-Index NER-anonymisieren (siehe COMPLIANCE.md)
- Wert: Signalisiert Planungsabsichten vor der offiziellen NÖGIS-Änderung
- Risiko: Siehe RISKS.md — DSGVO + Datenqualität
Förderdatenbank · KPC / LEADER / KMU.DIGITAL / aws
- Keine API. KPC „Online" nur für Antragsteller (PIN-geschützt)
- Pipeline: RAG mit kuratierten PDF-Richtlinien in Vektor-DB
- Konkrete Beträge: KPC Flächenrecycling — bis 75 % bzw. max 60 000 € Konzept, 50 000 € Detailuntersuchung
- Validierung: Quartalsweise manuelle juristische Prüfung der Förder-Logik
Mapillary
- Format: REST API, Crowdsourced Street-Level-Panoramen
- Lizenz: CC BY-SA 4.0 — AI-Auswertung erlaubt, Share-Alike beachten auf abgeleitete Daten
- Coverage AT: Städte gut, ländlich dünn → nicht MVP-kritisch, eher Phase 4 + für städtische Cases
Google Street View · Bing Streetside
- Lizenz: Maps Platform ToS verbietet ML-Training, Bulk-Download, dauerhaftes Caching (> 30 Tage) und Datenbank-Aufbau
- Was geht: Embed-Player als UI-Element, Static-API-Bilder (~ $0,007 / Anfrage) nur zur reinen Anzeige
- Was nicht geht: Jegliche AI-Auswertung der Bilder
- Konsequenz: Verstoß = API-Konto-Sperre + zivilrechtliche Schritte → Lizenz-Compliance-Audit vor Phase-3-Launch
- Saubere Alternative: Eigene Fassaden-Erfassung beim 490-€-Beratungstermin (siehe Phase-3-Plan)
NÖGIS Geogene Gefahren — NICHT OGD-verfügbar (Stand 2026-05)
- Quelle: NÖ-Atlas (atlas.noe.gv.at), Layer „Geogene Gefahrenhinweiskarten"
- ⚠️ Befund: Im NÖ-OGD-GeoServer (
sdi.noe.gv.at/.../OGD/wms, 221 Layer) ist kein Rutschungs-/Steinschlag-/Massenbewegungs-Layer vorhanden — die Hinweiskarten liegen nur im Atlas-Viewer (nicht als OGD-Dienst). Kein autonom-baubarer Live-Pfad. - GBA/GeoSphere geprüft (2026-05): Die GBA-Massenbewegungsdaten sind ein Inventar beobachteter Ereignisse (kartierte Rutschungen/Steinschläge), kein flächendeckendes Parzellen-Suszeptibilitäts-Zoning. Ein per-Parzelle-Indikator daraus hätte niedrige Recall und würde „kein Ereignis kartiert" fälschlich als „kein Risiko" suggerieren (R-03-Verstoß) — daher bewusst nicht gebaut. Die ArcGIS-WMS-Dienste sind zudem nicht sauber als OGD-GetFeatureInfo-Punktabfrage nutzbar.
- Rechtlich relevanter Pfad — jetzt erschlossen: Der Wildbach-/Lawinen-Gefahrenzonenplan (WLV) ist doch als einheitlicher, bundesweiter Punkt-Dienst verfügbar (LFRZ
inspire.lfrz.gv.at/000901, WMS-GFI) — die frühere Annahme „nur pro Gemeinde, kein OGD-Punkt-Dienst" war falsch. Implementiert (siehe nächster Abschnitt). Deckt die Wildbach-/Lawinen-Dimension ab; Rutschung/Steinschlag-Suszeptibilität bleibt offen (s. o.). - Status: Rutschung/Steinschlag offen (kein qualitativ vertretbarer Live-Pfad); Wildbach/Lawine gelöst via WLV-GZP.
Wildbach & Lawine Gefahrenzonenplan (WLV) — IMPLEMENTIERT
- Quelle: Wildbach- und Lawinenverbauung (WLV/BML), Gefahrenzonenpläne, über LFRZ
https://inspire.lfrz.gv.at/000901/wms(WMS-GetFeatureInfo,text/plain, gleicher Infrastruktur-Pfad wie Lärminfo). - Layer:
WLV_GZP(Gruppe; liefert je Treffer mehrere FeatureTypes — RRB = Raumrelevanter Bereich, SZ_WB/SZ_LA = Summenzonen Wildbach/Lawine, …). SchlüsselfeldObjektart. - Ampel: „Rote Zone" → rot (ständige Gefährdung, Bebauung i. d. R. ausgeschlossen); sonst Treffer (Gelbe/Summen-Zone, Raumrelevanter Bereich) → gelb; kein Treffer → grün. „Keine Zone" ist ein gültiges Ergebnis — Gefahrenzonenpläne existieren nur für Gemeinden mit Wildbach-/Lawinengefahr (überwiegend alpiner Raum).
- Lizenz: frei (INSPIRE-Metadaten „no limitations on public access / no conditions apply"). Attribution „Datenquelle: Wildbach- und Lawinenverbauung (WLV/BML)".
- R-03: Indikator, kein Gefahrenzonenplan-Gutachten; rechtsverbindliche Zonen-Auskunft + Bauauflagen nur über Gemeinde/WLV. Datengrundlage gehört zu
lib/geo/wlv.ts(getWlv/classifyWlv), pure-getestet + fetch-gestubbter Glue-Test.
Seveso/Störfallbetriebe & Hochspannungs-/Gasleitungen — NICHT OGD-verfügbar (NÖ, Stand 2026-05)
- ⚠️ Befund (Recherche 2026-05, gesamter NÖ-GeoServer + LFRZ + data.gv.at geprüft): Für Niederösterreich existiert kein öffentlicher Geodienst für Seveso-/Störfallbetriebe (Betriebsbereiche nach Industrieunfall-VO) — die Behörden publizieren nur HTML-Listen/Kundmachungen (EDM, Störfallinformations-VO), keinen WMS/WFS mit GetFeatureInfo. (Tirol/Salzburg haben einzelne offene INSPIRE-PF-Dienste, NÖ nicht.)
- ⚠️ Leitungen: Hochspannungs-Freileitungen (APG/Netz NÖ) liegen zwar als INSPIRE-Dienst vor, sind aber Art. 13(1)(b)-zugriffsbeschränkt (Token „auf Anfrage") — kein anonymer Live-Pfad; APG zudem nur Umspannwerke, keine Leitungen. Gas-Hochdruckleitungen: kein öffentlicher Dienst.
- Status: offen, nicht autonom baubar (keine öffentliche Quelle). Falls künftig relevant: nur über behördliche Datenfreigabe / Token.
Schutzgebiete (Natur + Wasser, NÖ-OGD) — IMPLEMENTIERT
- Status: Live im öffentlichen Report (
lib/geo/schutzgebiete.ts), fail-open. - Quelle: Land Niederösterreich (NÖ-OGD-GeoServer
sdi.noe.gv.at), LayerRNA_NSGEB(Naturschutzgebiet),RNA_NATIONALPARK,RNA_N2K_FFH/RNA_N2K_VS(Europaschutz/Natura 2000),RNA_LSGEB(Landschaftsschutz),RNA_NATURPARK,N_VSEL_OGD_BSRNK_SCHUTZ_SCHON(wasserrechtliche Schutz-/Schongebiete). - Format: WMS-GetFeatureInfo (
text/plain, gemeinsamer Helperlib/geo/noegis.ts); serverseitiges Punkt-in-Polygon, je Layer ein Treffer. - Lizenz: CC BY 4.0 (OGD NÖ), „Datenquelle: Land Niederösterreich (data.noe.gv.at)".
- Ampel: streng (Naturschutz-/Europaschutz-/Nationalpark-/Wasserschutzgebiet) → rot; milder (Landschaftsschutz/Naturpark/Wasserschongebiet) → gelb; kein Treffer → grün.
- Verwendung: Bebauungs-/Nutzungs-Restriktion; ergänzt Widmungs-Layer. Indikator, keine Rechtsauskunft — konkrete Regeln aus der jeweiligen Verordnung.
- Scope: Niederösterreich. (Frühere Planung „PostGIS-Mirror der WFS-Geometrie" ersetzt durch Live-GFI — kein Ingest nötig.)
Lärminfo — IMPLEMENTIERT
- Status: Live im öffentlichen Report (
lib/geo/laerm.ts), fail-open. - Quelle: lärminfo.at (Umweltbundesamt), strategische Lärmkarten der EU-Umgebungslärmrichtlinie 2002/49/EG, Kartierungsrunde 2022.
- Format: WMS-GetFeatureInfo (LFRZ,
inspire.lfrz.gv.at/000804/wms, WMS 1.1.1,SRS=EPSG:4326,INFO_FORMAT=text/plain). Serverseitiges Punkt-in-Polygon je Layer;text/plainliefert nur die Attribute (~300 B statt ~4 MB Geometrie über die parallel verfügbare OGC API). Abgefragt:2022_STRASSE_24H_ZONEN_OE+…_NACHT_…(Straße Lden/Lnight) und2022_SCHIENE_24H_ZONEN_OE+…_NACHT_…(Schiene Lden/Lnight). - Datenmodell: disjunkte Isophonen-Bänder,
category=LdenXXYY/LnightXXYY/…GreaterThanNN(5-dB-Klassen, berechnet nicht gemessen). - Lizenz: CC BY 4.0 (OGD Österreich), Attribution „Datenquelle: www.laerminfo.at".
- Scope (bewusst): nur Hauptquellen Straße + Schiene oberhalb der EU-Meldeschwellen; Flug/Industrie/lokaler Lärm nicht im Report-Block (Layer existieren, Folge-Erweiterung). Ampel: Lden ≥ 70 oder Lnight ≥ 60 → rot; sonst kartierte Zone → gelb; keine Zone → grün.
- Verwendung: Differenziert Nutzungsszenarien (Wohnen vs. Gewerbe/Lager) — eine an einer Hauptverkehrsstraße gelegene Parzelle ist für Wohnen anders zu bewerten als eine ruhige Lage.
- Update-Rhythmus: 5-Jahres-Zyklus (zuletzt 2022).
ÖV-Güteklassen (ÖROK/BMIMI) — IMPLEMENTIERT
- Status: Live im öffentlichen Report (
lib/geo/oev.ts), Pilot-Mirror (#101 Phase 2). Außerhalb der Spiegelung ehrlichdegraded(ausserhalb_pilot_spiegelung). - Quelle: ÖROK + BMIMI, österreichweit einheitliches Güteklassen-Modell
(A beste … G); bereitgestellt von AustriaTech
(
files.austriatech.at, Share33971b2d51a348a5958d, verlinkt von mobilitydata.gv.at und data.gv.at). - Format: jährliches ZIP (~160 MB) mit Shapefiles. Genutzt:
02_beschlossenes ÖV-Güteklassensystem/OeV_Gueteklassen_Polygone_*.shp— österreichweit genau 7 aufgelöste Features (eine Klasse je Feature, EPSG:3035). Kein amtlicher WMS/WFS → Datei-Mirror statt Live-Abfrage. - Ingest:
scripts/ingest-oev.mjs(Migration0027_oev_gueteklassen.sql). Wichtig: GDAL-clipdststatt-spat— alle 7 Österreich-Polygone schneiden jede bbox, erst der Clip macht den Pilot-Extrakt klein (~370 KB). Tabelleoev_gueteklassen(gkl, geom 4326, stand); Lookup: beste Klasse am Punkt (ORDER BY gkl ASC, Klassen-Polygone überlappen A⊂B⊂C…). - Lizenz: „Kein(e) Lizenz und kein Vertrag" — die beiliegenden Nutzungsbedingungen (ÖROK-Haftungsausschluss, im ZIP) enthalten keine Nutzungseinschränkung und keine Attributionspflicht — allerdings auch keine ausdrückliche Nutzungsrechtseinräumung; die Nutzung stützt sich auf die OGD-Listung (data.gv.at) und die freie Bereitstellung „zur Verbesserung der Abstimmung von Siedlungsentwicklung und ÖV-Erschließung". Attribution machen wir trotzdem (ÖROK/BMIMI, AustriaTech). Formale Lizenz-Bestätigung als offener Punkt (analog BEV #77).
- Ampel (deterministisch,
classifyOev): A–C → grün, D–G → gelb, keine Klasse → rot. Schwellen-Interpretation = Magnus-Review-Punkt (Briefing M11). - Verwendung: Kern-Standortfaktor (Wohn- wie Betriebsnutzung, widmungs- und wertrelevant); Steckbrief + eigener Report-Block.
- Update-Rhythmus: jährlich (Lieferung ~April, Fahrplan-Referenz Oktober des Vorjahres; aktuell Stand 2025-10-29).
OpenStreetMap — POI-Dichte / 15-Minuten-Score
- Status: 🟡 Phase 2 (#101/#250) — Code/Migration/Ingest-Script
implementiert (
lib/geo/poi-dichte.ts), Pilot-Mirror. Der Offline- Schritt (GeoFabrik-Extrakt → Tag-Filter → GeoJSON) und der eigentliche Daten-Ingest stehen noch aus; außerhalb der Spiegelung ehrlichdegraded(ausserhalb_pilot_spiegelung). - Quelle: OpenStreetMap, bezogen als GeoFabrik-Extrakt Österreich
(
austria-latest.osm.pbf, geofabrik.de). Kein Live-Overpass im Request-Pfad — Overpass ist hart rate-limitiert (~10 req/min, Scraper-Ban); ein Call je Adresse riskiert IP-Ban und nicht reproduzierbare Reports → Datei-Mirror (wie ÖV-Güteklassen). - Format:
.osm.pbf→ osmium/ogr2ogr-Tag-Filter je Kategorie → GeoJSON-Punkte (Polygon-POIs auf Repräsentativpunkt reduziert) → PostGIS-Clip auf die Pilot-bbox. - Ingest:
scripts/ingest-osm-pois.mjs(Migration0028_osm_pois.sql). Tabelleosm_pois(geom Point 4326, stand); der CHECK lässtoev_haltaus Bestandsgründen noch zu, der Extrakt liefert es aber nicht mehr. Lookup:ST_DWithinaufgeographyim 900-m-Radius, Kategorie-Zähler in einem Roundtrip. - POI-Kategorien (5; evidenzbasiert, #250):
nahversorger(shop=supermarket/convenience/bakery/butcher, amenity=marketplace),bildung(kindergarten/school),gesundheit(pharmacy/doctors/clinic/ hospital),gastro(restaurant/cafe/bar/pub),gruenraum(leisure=park/playground/garden, landuse=recreation_ground). ÖV bewusst NICHT enthalten — separat über die ÖV-Güteklasse (Doppelzählung vermeiden, Recherche #250). - Lizenz: ODbL 1.0 → Pflicht-Attribution „© OpenStreetMap
contributors, ODbL 1.0 — openstreetmap.org/copyright" sichtbar in
Web + PDF (Report = „Produced Work", nur Attribution). Der
osm_pois- Mirror ist eine „Derivative Database" → bei Weitergabe unter ODbL bereitzustellen. Details: MAGNUS-REVIEW-POI-DICHTE.md, RISKS §R-OSM. - Ampel (deterministisch,
classifyPoiDichte): Score = erreichte Kategorien / 5 × 100. ≥4/5 → grün, 2–3/5 → gelb, ≤1/5 → rot. Radius 900 m und Schwellen evidenzbasiert (Recherche #250: 15 min ≈ ~900 m Luftlinie); Präsenz-Indikator, keine gewichtete Erreichbarkeit. - Verwendung: Lage-Indikator „Lage & Versorgung" (ergänzt ÖV-Güte und Erreichbarkeit; keine Restriktion); Steckbrief „Nahversorgung (15 Min)" + eigener Report-Block.
- Update-Rhythmus: monatlich/quartalsweise (POIs ändern sich schneller als ÖV-Güteklassen; Cron-Wiring als Folge-Punkt, #250).
Grundbuch (JustizOnline)
- Quelle: justizonline.gv.at, BRZ (Bundesrechenzentrum)
- Format: PDF-Auszug Hauptbuch (A1/A2/B/C-Blatt), keine OGD-API
- Kosten: ca. €17–25 pro Einlagezahl-Abfrage (Stand 2026, abhängig von Schnittstelle)
- Was im Kataster (BEV) nicht steht:
- B-Blatt: Eigentümer, Anteile (¼, ½, ⅛ …), Adressen — kritisch für „Wer muss zustimmen?"-Frage bei Brachflächen
- C-Blatt: Belastungs- und Veräußerungsverbote, Vorkaufsrechte, Wohnungsgebrauchsrechte, Dienstbarkeiten (z. B. Wasserableitungsrecht über Nachbargrundstücke), Hypotheken
- A2-Blatt: Erbauungseintragungen, Rechte gegenüber/zugunsten anderer Grundstücke
- Warum unverzichtbar für landnutzen: Eine Brachfläche, die mehreren Erben gemeinsam gehört und mit Vorkaufsrechten kreuz-und-quer belegt ist (typischer Praxisfall), kann nur durch Einstimmigkeit aktiviert werden. Ohne B/C-Blatt-Auswertung kann landnutzen keine belastbare „Aktivierungsfähigkeit"-Einschätzung liefern.
- Implementations-Strategie: On-demand-Abruf nur bei Premium-Pfad (490-€-Beratung oder explizite User-Anforderung), nicht für kostenlose Ersteinschätzung
- Cache-Strategie: Hash auf Einlagezahl + Bezirksgericht, 90-Tage-TTL — Eigentumsverhältnisse ändern sich selten
- Detail-Spec: ADR-0016 — Grundbuch-Modul im MVP
Ediktsdatei (Zwangsversteigerungen)
- Endpoint:
edikte.justiz.gv.at(§ 89j GOG) - Format: HTML — kein OGD-API, kein SLA, Ajax/Dojo-driven (Discovery 2026-05-26 — Connector kann nicht einfacher
fetch-Chain sein, siehe discovery/edikte-discovery.md) - Lizenz: öffentlich (amtliche Bekanntmachung); kein OGD-CC-Hinweis → automatisierter Zugriff erfordert vorsichtige Frequenz und kennzeichnenden User-Agent
- Crawler-Regeln: kein
/robots.txt, aber explizite<meta name="robots" content="nofollow,noarchive,noimageindex,nomediaindex">plusmsnbot=nocache,googlebot=nosnippet— Spirit klar: keine Re-Publikation/Indexierung. Default-Policy lib/edikte/policies.ts: 1500 ms zwischen Requests, identifizierender User-Agent - Strategischer Wert: doppelter Nutzen aus einer freien Quelle
- Wert-Proxy: Gerichtlich bestellter Schätzwert ist der erste adressscharfe, lizenzfreie Liegenschaftswert — schärft Szenario-Engine (R-04), ergänzt Aggregat-HPI (Kategorie 6).
- Aktivierungs-Lead: „in Verwertung = in Bewegung" — Eigentümer ist motiviert oder hat das Asset verloren.
- Stufenmodell (ADR-0032): Stufe 1 = anonymer Vergleichswert (MVP-Backlog, P2/3); Stufe 2 = Lead im Gemeinde-Dashboard (Phase 3+, gesondertes ADR).
- Datenminimierung — DSGVO-Kontrakt: Persistiert werden nur liegenschaftsbezogene Felder (EZ, KG, BG, Adresse, Schätzwert, geringstes Gebot, Termin, Edikt-ID, Liegenschaftstyp). Name/Anschrift des Verpflichteten werden beim Parsen verworfen — nicht pseudonymisiert, kein Hash. Vom Test verifiziert:
tests/ingest/edikte.test.mjsprüft, dass kein Personen-Token in einem SQL-Param landet. - Pflicht-Disclaimer im Report: „Gerichtlich bestellter Schätzwert ≠ Marktpreis" (Zwangsversteigerungs-Abschlag, Sachverständigen-Methodik, Stichtag). Der Wert ist interner Kalibrierungs-Proxy, nicht „Verkehrswert".
- Schema-Drift-Monitoring: HTML-Layout kann brechen (kein API/SLA). Der Parser wirft
EDIKTE_PARSE_DRIFT, wenn weder Geschäftszahl noch Schätzwert erkennbar sind; Drift erscheint iningest_runs.rows_skipped→ Admin-Übersicht. - Idempotenz:
UNIQUE(edikt_id)+ON CONFLICT DO UPDATE— Re-Runs aktualisieren Termin/Beträge. - Spatial-Join: PostGIS-View
v_edikte_parzellenjoint best-effort überkg+ez(EZ vorläufig als gnr — präziser EZ↔GNR-Mapper in Folgemigration). - Offene Fragen (vor Stufe-2-Aktivierung klären):
- Retention abgeleiteter Werte nach justizseitiger Edikt-Löschung — Owner Magnus (juristisch).
- Nutzungsbedingungen / robots.txt von
edikte.justiz.gv.atfür automatisierten Abruf (Frequenz, Kennzeichnung). - Reproduktion des gerichtlichen Schätzwerts im Report (Anzeige vs. nur intern kalibrierend).
- Adress-Edge-Case Einzelhaus = Wohnanschrift des Verpflichteten → personenbeziehbar trotz fehlender Namensspalte.
- Detail-Spec: ADR-0032 — Ediktsdatei property-only · Issue #95
Immobilienpreise (frei lizenzierte Statistik) — Kategorie 6
Aggregierte Preis-/Indexzeitreihen (Region × Zeit × Indikator), keine
Einzelinserate, kein Personenbezug — bewusste DSGVO-/Datenbankrecht-
Abgrenzung gegenüber Scraping kommerzieller Portale (willhaben);
Begründung siehe RISKS.md. Schema: lib/db/schema/property-prices.ts,
Migration 0012_property_prices.sql, Ingest scripts/ingest-prices-*.mjs.
| Quelle | Format | Lizenz / Attribution | Reife | Script |
|---|---|---|---|---|
| Quelle | Dataset / Key | Format | Lizenz / Attribution | Reife |
| --- | --- | --- | --- | --- |
| Eurostat | prc_hpi_q (purchase=TOTAL, unit I15_Q + RCH_A) | JSON-stat 2.0 REST | frei, „Source: Eurostat" | ✅ live verifiziert — AT bis Q4/2025 (=169,3 · 2015=100), EU/EA + alle MS, Länderebene |
| Statistik Austria | OGD_hpi2015_HPI_15_1 (+ _hpi2010_, _hpivr_) | OGD-Cube-CSV | CC BY 4.0, „Quelle: STATISTIK AUSTRIA" | ✅ live verifiziert — Häuserpreisindex, 5 Messgrößen (Gesamt/Neu/Bestand/Häuser/Whg.), AT gesamt, Q+Jahr |
| EZB Data Portal | Generisch über SDMX-Flows; Default ICP/M.U2.N.041000.4.INX (HICP-Wohnmieten, Euroraum) | SDMX-JSON 1.0-cts | frei, „Source: ECB" | ✅ live verifiziert — Euroraum-Mieten 2025-12 = 120,39; RPP-AT (Property Prices) ist veraltet (endet 2018-Q4), daher HICP-Wohnen als immo-adjacenter Default |
| OECD Data Explorer | OECD.ECO.MPD,DSD_AN_HOUSE_PRICES@DF_HOUSE_PRICES,1.0 | SDMX-CSV (csvfilewithlabels) | OECD Terms of Use — „Source: OECD" | ✅ live verifiziert — 50 Länder, AT 2025 (HPI nominal, 2015=100) = 167,3; Messgrößen HPI/RHP/RPI/HPI_RPI/HPI_YDH |
| BIS Property Prices | WS_SPP (Selected) — Defaults; WS_DPP (Detailed, Apartments/Häuser × Stadt/Land), WS_CPP (Commercial — Office/Retail) per BIS_FLOW | SDMX-CSV (labels=both) | frei, „Source: BIS" | ✅ live verifiziert — WS_SPP 61 Länder AT 2025-Q4 (2010=100) = 211,51 (Real-YoY −1,7 %); WS_DPP AT-Wien Flats All 2025-Q4 (2000=100) = 310,8 (#88); WS_CPP DE Office 2025-Q4 (2010=100) = 163,7 (#88) |
| OeNB | Fundamentalpreisindikator (Über-/Unterbewertung) | ZIP-Download aus dem Wohnimmobilien-Shiny-Dashboard (Long-Form-CSV Wohnimmobilienmarkt_Fundamentalpreisindikator_*.csv) | frei, „Quelle: OeNB" | ✅ live verifiziert (#87) — AT 2025-Q4 = +4,60 % (gerundet „5 %" im Dashboard), Wien = +12,31 %; Backfill 1989-Q1 .. 2025-Q4, 296 Quartals-Datenpunkte |
-
Granularität: Quartal/Jahr, AT-gesamt bzw. Länder-/NUTS-Ebene (Index, Veränderungsrate). Adress-/Bezirks-€/m² braucht weiterhin eine lizenzierte Transaktionsquelle (IMMOunited/Grundbuch, vgl. ADR-0016).
-
OeNB-Befund: Der OeNB-Wohnimmobilienpreisindex deckt sich inhaltlich mit dem via Eurostat/Statistik Austria geführten HPI; einzig der OeNB-Fundamentalpreisindikator (Über-/Unterbewertung) ist OeNB- exklusiv. Seit 2026-Q2 ist er nicht mehr als XLSX, sondern nur noch über das Wohnimmobilien-Shiny-Dashboard verfügbar — der „Markt"- Tab exportiert ein ZIP mit FPI als Long-Form-CSV. Der Connector liest beide Pfade (
run()für XLSX-Backfill,runFromDashboardZip()für den neuen Stand). Die Shiny-Session-URL ist nicht stabil, daher einmal pro Quartal manueller Download (siehe Issue #87). -
Aktualität: Idempotenter Re-Run der Ingest-Scripts; automatisiert via Vercel Cron (ADR-0034, siehe
vercel.json#cronsundapp/api/cron/prices-*): ECB monatlich, Eurostat/STATAT/OeNB/OECD/BIS quartalsweise.price_facts.ingested_attrackt den letzten Sync je Grain. OeNB-Cron skippt, solange keine aktuelle Quartals-OENB_FPI_XLSX-URL gesetzt ist. -
Speicherort/Kosten: dieselbe Neon-Postgres (ADR-0002, EU-Region); Volumen < ~50 MB → 0 € Zusatzkosten (Free-Tier 0,5 GB; im Launch-Tier vernachlässigbar gegenüber den PostGIS-Geometrien).
-
Cross-Source-Joins (#89): Eurostat/EZB/BIS/STATAT nutzen ISO-2 (
AT), OECD nutzt ISO-3 (AUT). Die Tabellecountry_codes(Migration 0017) hält das Mapping plus EU-/Euro-Area-Flags; der Viewv_price_facts_countryjointprice_regionsüber beide Schemata. Aggregate (EU27_2020,EA20, …) erscheinen mitiso2 IS NULL.Beispiel — „AT-HPI über alle 5 Quellen für 2025-Q4":
SELECT ps.slug AS source, v.region_scheme, pi.slug AS indicator, pp.code AS period, v.value FROM v_price_facts_country v JOIN price_sources ps ON ps.id = v.source_id JOIN price_periods pp ON pp.id = v.period_id JOIN price_indicators pi ON pi.id = v.indicator_id WHERE v.iso2 = 'AT' AND pp.code = '2025-Q4' ORDER BY ps.slug, pi.slug;→ liefert Eurostat (HPI 169,34), STATAT (5 Messgrößen, ~169,3), BIS (Index 211,51 · 2010=100), OeNB FPI (+4,60 %); für OECD separat auf Jahresfrequenz (
pp.code='2025'→ HPI 167,33). -
Bevölkerungs-Spatial-Join (#98):
bev_raster_cells(Migration 0018) hält 42.966 populated 1km-Zellen aus dem Eurostat Census 2021 EU-Grid (CC BY 4.0). Viewv_parzellen_bevoelkerungjoint perST_Contains(brc.geom, ST_Centroid(parzellen.geom)):SELECT parzelle_id, kg, gnr, cell_id, pop_total, pop_lt15, pop_15_64, pop_ge65 FROM v_parzellen_bevoelkerung WHERE parzelle_id = $1;Im Pilot-Backfill: 18.263 Parzellen mit Cell-Mapping (in bewohnten Zellen), 6.255 ohne (Felder/Wald —
pop_total=NULLsignalisiert „keine Bewohner im 1km-Umkreis"). Cell-IDs nach INSPIRE-SchemaAT_CRS3035RES1000mN<NORTH>E<EAST>.
Freizeit-/Zweitwohnsitz-Beschränkungsgemeinden — IMPLEMENTIERT (Salzburg-Pilot)
- Status: 🟡 Phase 2 (#257) — Salzburg-Pilot live (committete JSON,
91 Gemeinden). Restriktions-Indikator
report.zweitwohnsitz. - Befund: NÖ hat KEIN Zweitwohnsitz-Beschränkungsregime (NÖ ROG 2014) → jede NÖ-Adresse „nicht erfasst" (grün). Wert kommt vom Rot-Pfad in Ländern mit Regime (Salzburg/Tirol/OÖ/Vbg).
- Quelle: RIS Landesrecht (ris.bka.gv.at). v1 Salzburg: „Zweitwohnung-Beschränkungsgemeinden-Verordnung 2024", LGBl 26/2024, Gesetzesnummer 20001469, §1-Dok LSB40028014 (in Kraft 2024-03-01). Die Gemeinde-Liste ist Komma-Prosa je Bezirk im §1-XML (kein Dataset, keine GKZ) → maschinell geparst. Tirol (142, PDF) + OÖ (~25) = Folge.
- Keying:
gem_nr(5-stellig, Statistik Austria) aus dem Radon-Layer; Name→gem_nrzur Build-Zeit übergemliste_knz.csv. - Build:
scripts/build-zweitwohnsitz-gemeinden.mjs(RIS-§1 + Statistik →lib/geo/data/zweitwohnsitz-gemeinden.json); Re-Run pro VO-Novelle, Ergebnis committen. Kein DB-Ingest (Denkmal-Muster). - Ampel: rot = in geltender Landes-VO gelistet; grün = nicht erfasst;
kein Block + degraded, wenn
gem_nrfehlt (R-03, kein stilles Grün). Statischer Disclaimer „Indikation, keine Rechtsauskunft" (RIS + Gemeinde maßgeblich). Legal-Review des Wortlauts vor produktiver Freischaltung. - Lizenz: RIS CC BY 3.0 AT, Statistik-Gemeindeliste CC BY 4.0.
- Discovery: discovery/zweitwohnsitz-beschraenkung-discovery.md.
Backlog — recherchierte Erweiterungsquellen
Noch nicht getestet, reine Recherche-Kandidaten. Sortiert nach Hebel × Differenzierung. Alle OGD/frei sofern nicht anders vermerkt. Diese Quellen erweitern v. a. Kategorie 4 (Erreichbarkeit/Mikrolage/Demografie) und Kategorie 3 (Boden/Geologie/Historie als Risiko-Proxy) — beides heute nur qualitativ abgedeckt.
| Quelle | Kat. | Format | Lizenz | Risiko | Phase | Warum interessant |
|---|---|---|---|---|---|---|
| GIP.at — Verkehrsgraph AT | 4 | OGD Bulk (GeoPackage ab GIP 2.0) | CC-BY 4.0 (ÖVDAT) | Mittel (1,5 GB; braucht Self-Hosted-Routing) | P4 (Phase 2: OSM, Phase 3: ORS-Self-Hosted) — siehe ADR-0036 | Echte Isochronen (Autobahn/Schule/Spital) statt Luftlinie |
| ÖV-Güteklassen (ÖROK/VAO) | 2,4 | OGD | Niedrig | ✅ implementiert (Pilot-Mirror, siehe §ÖV-Güteklassen) | ÖV-Erschließungsklasse — widmungs- & wertrelevant | |
| OpenStreetMap (Overpass) | 4 | ODbL (Share-Alike) | Niedrig | 🟡 Phase 2 implementiert (Pilot-Mirror, siehe §OpenStreetMap) | POI-Dichte → 15-Minuten-Score; füllt Kat-4-Lücke | |
| Statistik Austria Bevölkerungsraster 250 m/1 km | 4 | — | — | — | ✅ Live (#98) | siehe oben — über Eurostat Census 2021 EU-Grid bereitgestellt |
| Radonpotenzialkarte (ÖNRAP/AGES) | 3 | OGC API Features (Live) | OGD CC BY 4.0 | Niedrig | ✅ Live (#132) — Live-Query via lib/geo/radon.ts, kein DB-Spiegel (Datenmenge minimal, Latenz < 500 ms) | Baurechtliches Gesundheitsrisiko, im Markt unbeachtet — Discovery #99, siehe discovery/radon-onrap-discovery.md |
| Wien Luftbildplan 1938 / 1956 / heute | 3 | WMTS (mapsneu.wien.gv.at/wmts/{lb1938,lb1956,lb}) | CC BY 4.0 | Niedrig | 🟡 Wien-Pilot live (#134) — Report-Block-Umsetzung in #135 | Altlasten-Wahrscheinlichkeit (frühere Tankstelle/Fabrik) — visueller Indikator, Discovery #100; FK 1829 als Raster bei Wien-OGD nicht verfügbar — Mapire-Abo-Entscheidung in #137 |
| Ediktsdatei — Zwangsversteigerungen | 6 | HTML (edikte.justiz.gv.at) | öffentlich, kein OGD-API | Mittel (Scraping/DSGVO) | 🟡 Stufe 1 (#95) | siehe oben — Schema + Ingest implementiert (ADR-0032, property-only) |
| Freizeit-/Zweitwohnsitz-Beschränkungsgemeinden | 2 | Länder-VO (RIS/PDF) → committete JSON | CC BY 3.0 AT (RIS) | Mittel (heterogen) | 🟡 Phase 2 implementiert (Salzburg-Pilot, siehe §Detail) | Harte Restriktion auf Ferienwohnungs-Szenarien |
| eBod / BFW Digitale Bodenkarte | 3 | WMS/WFS | OGD | Niedrig | P3 | Bodenbonität: Grünland-Bewertung, Entsiegelung |
| GBA — Geologie/Altbergbau/Hydrogeologie | 3 | WMS/WFS | OGD | Niedrig | P3 | Baugrund, Hohlraum-/Setzungsrisiko, Geothermie |
| 3 | WMS-GFI | OGD | — | ✅ IMPLEMENTIERT | Amtl. Gefahrenzonen (LFRZ 000901, lib/geo/wlv.ts) — s. Detail-Abschnitt | |
| Fernwärme-Netzgebiete | 4 | Gemeinde/Versorger-GIS | heterogen | Hoch (kein einheitl. API) | P3 | Anschlussverfügbarkeit = großer Aktivierungskostenfaktor |
| BEV ALS Laserscan (DGM/DOM) | 1,3 | OGD Raster | BEV | Niedrig | P3 | Exakte Hangneigung/Höhe/Verschattung > basemap |
| RIS Landesrecht — Bebauungspläne/Bausperren | 2 | XML/HTML | öffentlich | Mittel (DQ) | P3 | Rechtsverbindl. Endprodukt zur Protokoll-Pipeline |
| GTFS Österreich | 4 | GTFS Feed | OGD | Niedrig | P3 | Echte Taktdichte statt nur Haltestellen-Nähe |
| Lohnsteuerstatistik / Pendlerverflechtung (STAT) | 4 | OGD CSV | CC BY 4.0 | Niedrig | P3 | Kaufkraft-Proxy, Schlafgemeinde vs. Jobzentrum |
| Wanderungs-/Geburtenbilanz je Gemeinde (STAT) | 4 | OGD CSV | CC BY 4.0 | Niedrig | P3 | Nachfrage-Frühindikator vor Preiszeitreihen |
| Luftgüte-Messnetz (UBA/EEA) | 3 | REST/WMS | OGD | Niedrig | P3 | Wohnqualitäts-Score |
| Hitzeinseln / Urban Heat (Copernicus, Stadtklima) | 3 | Raster | frei (EU) | Niedrig | P4 | Klimaresilienz — zunehmend wertrelevant |
| Erdbebenzonen (ÖNORM B 1998 / GeoSphere Seismik) | 3 | Karte/Tabelle | OGD | Niedrig | P4 | Baukostentreiber je Zone |
| Bautätigkeits-/Baubewilligungsstatistik (STAT) | 4 | OGD CSV | CC BY 4.0 | Niedrig | P4 | Umfeld-Dynamik-Indikator |
| OECD / BIS House Prices | 6 | SDMX/CSV | frei m. Quelle | Niedrig | P4 | Lange intl. Zeitreihen (Connector wiederverwendbar) |
Top-5-Empfehlung (höchster Hebel, alle OGD): GIP-Isochronen (Phasen-Plan via ADR-0036: Phase 2 OSM-basiert, Phase 4 GIP.at — die GIP-Daten sind freigegeben [CC-BY 4.0], aber lohnen sich erst nach Self-Hosted-Routing-Stack), Bevölkerungsraster, Radonkarte, historischer Kataster (Altlasten-Proxy), Ediktsdatei (Schätzwerte + Leads). Die Ediktsdatei ist strategisch besonders relevant, weil sie das Preis-/Transaktions-Lizenzproblem aus ADR-0016 teilweise umgeht (gerichtlicher Schätzwert ist öffentlich) — Spec & DSGVO-Strategie: ADR-0032 (property-only, Personendaten werden verworfen). Der historische Kataster ist diskovery-seitig in Discovery-Notiz historische Orthofotos bewertet — Wien sofort einsetzbar (CC BY 4.0), NÖ + restliche Bundesländer hängen an Direktanfragen / Mapire-Abo.
Grundbuch-Zugang: Schließt offene Frage #1 von ADR-0016. Kein freies OGD-API; Produktiv-Weg = Vertrag mit einer vom BMJ/BRZ ermächtigten Verrechnungsstelle plus Adapter-Pattern im Code. Spec & Auswahlkriterien: ADR-0033. Kandidaten-Korrektur (2026-07-01): Von den in ADR-0033 genannten Kandidaten steht nur Manz auf der offiziellen BMJ-Liste; IMD ist in Manz aufgegangen, ZT-Datenforum/Infina sind Reseller. Versandfertiges Anfrage-Set + Vergleichsraster: Verrechnungsstellen-Anfrageset (Issue #96). Kein Tech-Blocker — offen ist nur die Anbieter-Auswahl (Owner Magnus).
Attribution-Maintenance
| Pflicht | Wo |
|---|---|
| Footer-Komponente im Frontend | Persistent in MapLibre + Footer-Zeile |
| Datenquellen-Block in PDF-Reports | Letzte Seite oder Fußbereich |
/datenquellen-Seite (Public Frontend) | Vollständige Liste mit Lizenzen, Versionen, letzten Update-Zeitpunkten |
/admin/data-sources (Admin-UI) | Statischer Katalog aus dieser Datei + Live-Frische aus ingest_runs und den Ziel-Tabellen — siehe lib/admin/data-sources.ts. Headless: GET /api/v1/admin/data-sources (admin-Scope-Key). |
Diese Datei (DATA-SOURCES.md) | Maintenance-Pflicht beim Einbinden neuer Quellen |
Nicht-funktionale Anforderungen
- Aktualität-Tracking: Pro Quelle Datum des letzten erfolgreichen Sync in DB festhalten (Tabelle
ingest_runs, Migration0014; allescripts/ingest-*.mjsschreiben automatisch einen Lauf-Eintrag). - Fallback bei Quellen-Ausfall: Cached letzte Antwort + Status-Banner statt Silent Failure
- Schema-Validierung: OGC-XML / GML mit Schema-Check beim Import; Alert bei null-Feldern