Entwurf

Datenqualität überkommunales Inventar

Lässt sich die Objektliste mit den GWR-Daten verbessern?

Abschlussprojekt rstatsZH Kurs 011
Autor:in
Baudirektion Kanton Zürich

Oliver Waddell

Archäologie und Denkmalpflege

Datum

18.01.2026

Klassifikation
Intern
library(tidyverse, warn.conflicts = FALSE)
library(here)
library(janitor)
library(kableExtra)
library(knitr)
library(naniar)
library(RSQLite)
library(sf)
library(statR)

1 Einleitung

Diese Arbeit hat zum Ziel, die Datenqualität in der Objektdatenbank ODB der Denkmalpflege des Kantons Zürich unter Zuhilfenahme der öffentlich zugänglichen Daten des Gebäude- und Wohnungsregisters GWR zu analysieren und über den Vergleich gezielte Verbesserungen daraus abzuleiten.

2 Daten

Die folgenden Daten werden für dieses Projekt herangezogen:

  • Objektliste (OGD): Aus Gründen der Praktikabilität wird für das Projekt stellvertretend für den gesamten Inhalt der ODB das bereits seit 2012 als OGD verfügbare Inventar der Denkmalschutzobjekte von überkommunaler Bedeutung, folgend als Objektliste bezeichnet, als Datengrundlage verwendet. Die Objektliste enthält eine Auswahl von Objekten (vgl. PBG § 203) auf der Basis des grossen Bestands von Objektdokumentationen, deren systematische Erarbeitung bereits 1962 ihren Anfang nahm, vgl. Müller, Thomas,1 S. 5. Mehr Informationen zur Erhebung dieser Daten sind unter https://zh.ch/denkmalinventar abrufbar.

  • Gebäude- und Wohnungsregister GWR (OGD): Um die erforderlichen relationalen gebäudebezogenen GWR-Daten für die Abfragen zur Verfügung zu haben, befindet sich in scripts/download_gwr_as_sqlite.R ein Skript, welches die vortagesaktuelle Fassung der öffentlich zugänglichen SQLight-Datenbank herunterlädt und am richtigen Ort unter data/raw/ ablegt.

  • Gebäude-Polygone der amtlichen Vermessung AV (OGD): Das AVZH-Datenprodukt «AV MOpublic, Bodenbedeckung (OGD)», welches unter https://geodatenshop.zh.ch/ verfügbar ist (allerdings erst ab Februar 2026 als einzelne Datei für den ganzen Kanton), enthält neben vielen anderen Informationen Polygone zu allen Gebäuden im Kanton, die auch den Eidgenössischen Gebäudeidentifikator EGID des Gebäude- und Wohnungsregisters (vgl. oben) in einem Attribut enthalten.

  • Amtliches Ortschaftenverzeichnis (OGD): Das amtliche Ortschaftenverzeichnis enthält die Namen, Perimeter und Postleitzahlen aller Ortschaften der Schweiz und des Fürstentums Liechtenstein.

    • Um die Übereinstimmung von Postleitzahlen und Ortsnamen sowie die Schreibung von Ortsnamen validieren zu können, wird die einfachste Darreichungsform als CSV-Datei genutzt.
    • Um fehlende Postleitzahlen und Orte anhand der Koordinatenpaare in der Objektliste ergänzen zu können, wird die Shapefile-Variante verwendet.
  • Gemeindezuweisungen zu Bezirk und Raumplanungsregion Kanton Zürich (OGD, CC-Zero): Die Gemeindezuweisungen sind Teil des Datensatzes Gebietsstammdaten Kanton Zürich. Die CSV-Datei enthält die Zuweisungen der Gemeinden zu deren Bezirk und Raumplanungsregion.

2.1 Analyseziele

Die Analyse fokussiert auf die folgenden Fragestellungen und Attribute der Objektliste. Über die Daten der Objektliste hinaus, sollen die erarbeiteten Skripte auch auf den gesamten Bestand an Objektdaten in der ODB anwendbar sein.

Die Daten der Denkmalpflege gehen bis auf die frühen 1960er-Jahre zurück, vgl. Waddell, Oliver,2 S. 6f. Als identifizierende Merkmale wurden in erster Linie die Adressen der Objekte und deren Gebäudeversicherungsnummern verwendet. Diese Attribute sind allerdings nicht stabil und nur sehr suboptimale Identifkatoren:

  • Die Gebäudeversicherungsnummern wurden lange wiederverwendet, wenn ein Objekt abgegangen war. Heute werden untergehende Nummern nicht wiederverwendet, trotzdem ändert sich bis heute der Umfang eines Objekts der Gebäudeversicherung machmal aufgrund von rein administrativen Vorgängen, vgl. GVZ Gebäudeversicherung Kanton Zürich; Fierz, Bernard; Caduff, Christian u. a. (Hg.)3 S. 6.
  • Die flächendeckende Vergabe von Gebäudeadressen im Kanton Zürich erfolgte erst spät. Heute hat jede kleine Hütte in den Fallätschen eine eigene Adresse, aber in dünn besiedelten Gebieten wurde die Gebäudeadressierung erst 2007 vervollständigt, vgl. Diverse.4

Im Vordergrund für die robuste Identifizierung von Gebäuden steht deshalb der eidgenössische Gebäudeidentifikator (EGID), welcher vom Bundesamt für Statistik BFS für das Gebäude- und Wohnungsregister GWR vergeben wird. Das GWR wurde anhand von Daten der Volkszählung 2000 zu statistischen Zwecken erstellt und fusst auf einer robusten Gebäudedefinition, vgl. Sektion Gebäude und Wohnungen (BFS); Geodäsie und Eidgenössische Vermessungsdirektion (swisstopo) (Hg.)5 S. 4. Es hat sich heute als massgebendes nationales Informationssystem für Gebäude etabliert.

Folgende Prüfungen stehen im Rahmen dieses Projekts im Vordergrund:

Attribut EGID

Ergänzung fehlender EGIDs anhand Strassenadressen. Herausforderung: Während die Strassenadressen vergleichsweise zuverlässig gepflegt sind, sind Postleitzahlen und Ortsnamen, welche die Strassenadresse für die Identifizierung eines Objekt erst eindeutig und damit aussagekräftig machen, nur teilweise erfasst.

Ergänzung fehlender EGIDs anhand der Koordinaten aus den Bodenbedeckungs-Daten der amtlichen Vermessung. Herausforderung: Gewisse Objekte wie Wasserbauten oder Umgebungen haben Koordinaten gesetzt, die ungefähr in der Mitte der Ausdehnung des Objekts gesetzt werden. Diese können in Ausnahmefällen auf einem Gebäude liegen, das aber nicht das ganze Objekt repräsentiert.

Strassenadressen

Vervollständigung von unvollständigen Adressen auf Basis der Koordinaten der Objekte

Ergänzung fehlender Strassenadressen anhand der EGIDs

2.2 Daten Aufbereitung

2.2.1 Daten einlesen

Objektliste Denkmalpflege

einstufung_levels <- c("regional", "kantonal")
na_strings <- c("–", "-")

objektliste_denkmalpflege <- read_delim(
  here::here("data", "raw", "2025-11-09-objektliste_mit_PDF-Links.csv"),
  delim = ";",
  escape_double = FALSE,
  col_types = cols(
    PLZ = col_character(),
  ),
  locale = locale(
    date_names = "de",
    tz = "Europe/Zurich",
    encoding = "WINDOWS-1252"
  ),
  trim_ws = TRUE
) |>
  replace_with_na_all(condition = ~ .x %in% na_strings) |>
  clean_names() |>
  mutate(
    datum_erlass = convert_to_date(
      datum_erlass, # handle the mixed-format dates
      character_fun = lubridate::dmy
    ),
    grundbucheintrag = convert_to_date(
      grundbucheintrag, # handle the mixed-format dates
      character_fun = lubridate::dmy
    ),
    einstufung = fct(einstufung, levels = einstufung_levels),
    odb_id_val = as.numeric(str_remove_all(odb_id, "\\D+")),
  ) |>
  group_by(odb_id) |>
  summarise(
    gemeinde = paste(unique(gemeinde), collapse = ";"),
    across(.cols = -c(gemeinde), first),
    .groups = "drop"
  ) |>
  arrange(odb_id_val) |>
  select(-odb_id_val)

GWR-Daten

Warnung

Bei Objekten mit mehreren Postleitzahlen werden diese aufgrund der einfachen Umwandlung in Integer-Werte verworfen. Bei einer weiteren Ausarbeitung des Skripts müsste hier eine bessere Lösung gefunden werden (und müsste in der Folge auch der Join für Tabelle 1 angepasst werden).

conn <- dbConnect(RSQLite::SQLite(), here::here("data", "raw", "gwr-data.sqlite"))

gwr_by_egid <- dbGetQuery(
  conn,
  "
    SELECT
      b.EGID as egid, 
      b.EGRID as egrid,
      b.GGDENR as gemeindenummer,
      b.GGDENAME as gemeindename,
      b.LPARZ as parzelle,
      b.GEBNR as gebaeudenummer,
      b.GBEZ as gebaeudename,
      b.GKODE as e_gebaeudekoordinate,
      b.GKODN as n_gebaeudekoordinate,
      (
        SELECT c.CODTXTLD
        FROM codes c
        WHERE c.CMERKM = 'GKAT' 
          AND c.CECODID = b.GKAT
        LIMIT 1
      ) as gebaeudestatus,
      GROUP_CONCAT(e.STRNAME || ' ' || e.DEINR, '; ') as strassenadresse,
      REPLACE(GROUP_CONCAT(DISTINCT e.DPLZ4), ',', ';') as postleitzahl,
      REPLACE(GROUP_CONCAT(DISTINCT e.DPLZNAME), ',', ';') as ortsname,
      b.GBAUJ as baujahr,
      b.GBAUM as baumonat,
      b.GABBJ as abbruchjahr,
      b.GEXPDAT as exportdatum,
      count(1) as anzahl_adressen
    from
      building b
      inner join entrance e on e.egid = b.egid
    GROUP BY
      b.EGID,
      b.GGDENR,
      b.GGDENAME
    ORDER BY
      gemeindenummer ASC
   "
) |>
  mutate(
    across(everything(), ~ ifelse(. == "", NA, as.character(.)))
  ) |>
  clean_names() |>
  mutate(
    exportdatum = convert_to_date(
      exportdatum, # handle the mixed-format dates
      character_fun = lubridate::ymd
    ),
    gemeindenummer = as.integer(gemeindenummer),
    baujahr = as.integer(baujahr),
    e_gebaeudekoordinate = as.numeric(e_gebaeudekoordinate),
    n_gebaeudekoordinate = as.numeric(n_gebaeudekoordinate),
    egid = as.integer(egid),
    postleitzahl = as.integer(postleitzahl)
  )

# close SQlite DB
dbDisconnect(conn)

2.2.2 Daten anreichern und auswerten

Fehlende EGID-Werte in den ODB-Daten anhand Adresse identifizieren

Als erster Ansatz soll Anhand der Kombination von Gemeinde und Strassenadresse überprüft werden, welche Objekte in der Objektliste keine EGIDs, falsche EGIDs oder nur einen Teil der tatsächlichen EGIDs eingetragen haben. Aufgelistet werden nur EGIDs, die in der Objektliste noch gar nicht vorhanden sind. Beziehen sich mehrere Objekte in der Objektliste auf Teile derselben EGID, werden sie von der folgenden Abfrage nicht gefunden. Die ermittelten EGID-Werte werden für die einfachere Kontrolle mit direktem Link zum Eintrag des Objekts in der ODB ausgegeben.

Hinweis

Aufgrund der kleinen Anzahl Objekt in der Objektliste der Denkmalpflege ist vorgängig kein kompliziertes Herausfiltern von Objekten ohne EGID notwendig, es wird bloss anhand von Begriffen im Objekttitel gefiltert. Aus den vollständigen ODB-Daten müssten vor dem Lookup jene Objekte herausgefiltert werden, für welche aufgrund ihres Typs keine EGID erwartet wird und welche abgebrochen sind.

Warnung

Die ermittelten EGID-Werte können nicht ohne vorgängige genaue Prüfung in die ODB übernommen werden: EGIDs können absichtlich weggelassen worden sein (z. B. bei Stadtmauerresten) oder Koordinaten können fehlerhaft gesetzt worden sein.

zip4_polys <- st_read(here::here("data", "raw", "AMTOVZ_ZIP.shp"), quiet = TRUE) |>
  st_transform(crs = 2056)

# Verify that the attribute really exists
if (!"ZIP4" %in% names(zip4_polys)) {
  stop("The polygon layer does not contain a 'ZIP4' column.")
}

# Create a lookup table for ZIP4 via the coordinates in the ODB data
objektliste_denkmalpflege_with_looked_up_zip_code <- objektliste_denkmalpflege |>
  filter(
    !is.na(e_koordinate) & !is.na(n_koordinate)
  ) |>
  st_as_sf(
    coords = c("e_koordinate", "n_koordinate"),
    crs = 2056,
    remove = FALSE
  ) |>
  st_join(
    zip4_polys |>
      select(ZIP4, ADDITIONAL),
    join = st_within,
    left = TRUE
  ) |>
  st_drop_geometry()

objektliste_denkmalpflege_mit_korrekten_ortsnamen <- objektliste_denkmalpflege_with_looked_up_zip_code |>
  mutate(
    ZIP4 = as.integer(ZIP4),
    ADDITIONAL =as.integer(ADDITIONAL)
  ) |>
  left_join(
    read_csv2(here::here("data", "raw", "AMTOVZ_CSV_LV95.csv")) |>
      filter(Sprache == "de") |>
      select(Ortschaftsname, PLZ, Zusatzziffer) |> 
      mutate(
        PLZ = as.integer(PLZ),
        Zusatzziffer =as.integer(Zusatzziffer)
      ),
    by = join_by(ZIP4 == PLZ, ADDITIONAL == Zusatzziffer),
    multiple = "first"
  )
TippHinweis zum folgenden Join

Strassenadressen sind innerhalb von Gemeinden nicht eindeutig, nur innerhalb von postalischen Ortschaften/Postleitzahl-Gebieten. Ohne Postleitzahl kommt es deshalb zu fehlerhaften Zuweisungen. Z. B. gibt es in der Gemeinde Russikon die Dorfstrasse 10 drei mal in verschiedenen Ortschaften (Russikon, Rumlikon und Gündisau).

# left join EGIDs from GWR via strasse_nr, ZIP4 and gemeinde
objektliste_left_join_via_egid <- objektliste_denkmalpflege_mit_korrekten_ortsnamen |>
#  select(odb_id, gemeinde, strasse_nr, egid) |>
  separate_rows(strasse_nr, sep = "; ") |>
  mutate(
    strasse_nr = str_trim(strasse_nr)
  ) |>
  filter(
    !is.na(strasse_nr) & # remove NAs
      strasse_nr != "" & # remove empty strings
      !str_detect(strasse_nr, regex(" bei", ignore_case = FALSE)) # remove approximative addresses
  ) |>
  left_join(
    gwr_by_egid |>
      select(egid, gemeindename, postleitzahl, strassenadresse) |>
      filter(
        !is.na(strassenadresse) & strassenadresse != ""
      ) |>
      separate_rows(strassenadresse, sep = "; ") |>
      mutate(
        strassenadresse = str_trim(strassenadresse)
      ),
    by = join_by(
      "strasse_nr" == "strassenadresse",
      "gemeinde" == "gemeindename",
      "ZIP4" == "postleitzahl"
    ),
    multiple = "all",
    relationship = "many-to-many"
  ) |> 
  separate_rows(egid.x, sep = "; ") |> 
  mutate(egid.x = as.integer(egid.x))

egids_missing_in_odb_identified_via_address <- objektliste_left_join_via_egid |>
  # check if egid.y (int) is present anywhere in egid.x (int)
  filter(
    !is.na(egid.y)
  ) |> 
  filter(
    # filter to remove objects where no EGID is expected
    !str_detect(
      tolower(objekt),
      regex(
        params$no_egid_expected_regex,
        ignore_case = TRUE
      )
    )
  ) |>
  # lookup egid.y in all values for egid.x of the full objektliste_left_join_via_egid
  # set new column "egid_present_in_odb" to TRUE if found, FALSE otherwise
  rowwise() |>
  mutate(
    egid_present_in_odb = egid.y %in% objektliste_left_join_via_egid$egid.x
  ) |>
  ungroup() |> 
  filter(
    egid_present_in_odb == FALSE
  ) |>
    select(-egid.x, -egid_present_in_odb) |>
  distinct()
Ausgeblendete lange Tabelle (bitte Klicken für Anzeige)
missing_egid_values_via_address <- egids_missing_in_odb_identified_via_address |> 
  group_by(odb_id, objekt) |>
  summarise(
    egid.y = paste(unique(egid.y), collapse = ", "),
    .groups = "drop"
  ) |>
  arrange(as.numeric(str_remove_all(odb_id, "\\D+")))

kable(
  missing_egid_values_via_address,
  escape = FALSE,
  col.names = c("ODB-ID", "Objektname", "EGID")
  ) |> 
  column_spec(
    1,
    link = paste0(
      "https://odb.zh.ch/odbwiki/mediawiki/index.php/",
      missing_egid_values_via_address$odb_id
    )
  )
Tabelle 1: Fehlende EGID-Werte gemäss Adresse(n)
ODB-ID Objektname EGID
Objekt 13 Sekundarschulhaus (Trakt A) 210041672
Objekt 25 Kirchenzentrum 210087577
Objekt 77 Ehem. Zehntenscheune 210232450
Objekt 88 Ehem. Vielzweckbauernhaus 210232453
Objekt 98 Transformatorenstation 201032480
Objekt 104 Arbeiterwohnhaus der ehem. Spinnerei Bühler 1157057, 1157048
Objekt 111 Trottspeicher im Hörnli 210263104
Objekt 184 Schulhaus II 116471
Objekt 231 Mehrfamilienhaus 118817
Objekt 234 Ehem. Scheune mit Speicher 210238408
Objekt 235 Vorkeller mit Kammer 210238593
Objekt 236 Holzschopf 210238574
Objekt 242 Reihenwohnhaus 1 19494
Objekt 244 Reihenwohnhaus 3 19512
Objekt 246 Schopf 2 210238439
Objekt 258 Klassentrakt 191988281
Objekt 384 Ehem. Webereigebäude mit Anbauten 210142709
Objekt 386 Ehem. Arbeiterwohnhaus 112282, 112284
Objekt 387 Ehem. Arbeiterwohnhaus 112286
Objekt 403 Wohnhaus 113051
Objekt 404 Ökonomiegebäude 210142988
Objekt 484 Hausteil 1 28107
Objekt 486 Scheune 1 210246169
Objekt 487 Scheune 2 210246165
Objekt 494 Zeughaus West, ehem. Zeughaus 1 BA und Abwartswohnung 1161929
Objekt 495 Zeughaus Ost, ehem. Zeughaus 2 BB und 3 BC 201032773
Objekt 555 Frei- und Hallenbad mit Sporttrakt 210229865
Objekt 601 Neues Spinnereigebäude, ehem. Kraftzentrale und Flachdachanbau 210144023, 201004230, 201004231, 9004537
Objekt 614 Ökonomiegebäude 210252347
Objekt 745 Reihenhaus 18821
Objekt 798 Dienstgebäude 35158
Objekt 800 Angestelltenwohnhaus 35143, 35145, 35147
Objekt 801 Angestelltenwohnhaus 35144, 35124, 35146
Objekt 802 Angestelltenwohnhaus 35123, 35162, 35163
Objekt 803 Angestelltenwohnhaus 35164, 35125, 35126
Objekt 804 Angestelltenwohnhaus 35127, 35128, 35167
Objekt 805 Angestelltenwohnhaus 35129, 35130, 35168
Objekt 806 Bauernwohnhaus, sog. «Schellenberghaus» 210296484
Objekt 831 Speicher 210261016
Objekt 832 Schweinestall 210261017
Objekt 866 Bahnhof Fischenthal 41397
Objekt 872 Wohnhaus mit Ökonomieteil 19219
Objekt 946 Teilstück des Belvoirparkzauns 143825, 302061521
Objekt 984 Lift und Treppe 210197078
Objekt 1095 Pulverhäuschen 210298444
Objekt 1302 Infanteriewerk A04856 150369
Objekt 1303 Infanteriewerk A04857 150369
Objekt 1304 Infanteriewerk A04858 302005586
Objekt 1436 Kleinunterstand A05440 9392
Objekt 1521 Klassentrakte und Spezialraumtrakt 210210950, 191994669
Objekt 1682 Verwaltungsgebäude 2366393, 302048605
Objekt 1985 Kettenhaus 1162714, 1162744, 1162745, 1162747, 1162748, 1162749
Objekt 1986 Kettenhaus mit Tiefgarage 1162750, 1162751, 1162752, 1162753, 1162754
Objekt 1989 Kettenhaus 1162717, 1162740, 1162741, 1162742, 1162737, 1162738, 1162733
Objekt 1990 Reihenhäuser 3001486, 1162720, 1162721, 1162722, 1162725, 1162724, 1162726, 1162727, 1162723
Objekt 1992 Kettenhaus 1162731, 1162732
Objekt 2036 Reihenhäuser 1151910, 1151911, 1151912, 1151913, 1151914, 1151915, 1151916, 1151917, 1151918
Objekt 2038 Reihenhäuser 1151971, 1151970, 1151969
Objekt 2039 Reihenhäuser 1151967, 1151966, 1151965, 1151964, 1151963, 1151962, 1151961, 1151960, 1151959, 1151958
Objekt 2040 Reihenhäuser 1151956, 1151955, 1151954, 1151953
Objekt 2067 Hausteil Süd 210280862
Objekt 2071 ehem. Pfarrhaus/heute Wohnhaus 210288294
Objekt 2101 Hausteil 1 210184527
Objekt 2102 Hausteil 2 210184527
Objekt 2113 Wohnhaus 35112
Objekt 2213 Haus «Korb» 12561
Objekt 2215 Haus «Rebe» 210179945
Objekt 2217 Gebäude Nr. 106. Stallscheune Breitenweg 210298789, 210298788, 210298790
Objekt 2219 Petertrotte 210266232
Objekt 2262 Wohnhaus mit Büro 210208081
Objekt 2266 Hausteil Nordost 60255
Objekt 2269 Turnhalle von 1881 192052052
Objekt 2270 Primarschulhaus «Töss» 59940
Objekt 2287 Waschhaus 45591
Objekt 2312 Wirtshaus «Engel» Hausteil 2 210208179
Objekt 2346 Ehem. Speicher 210253489
Objekt 2375 Ehem. Zehntenspeicher mit Trotte 210237039
Objekt 2378 Speicher, sog. «Pulverturm» 210237204
Objekt 2410 Ehem. Spinnereigebäude 2282204
Objekt 2459 Schulpavillon A 210239979
Objekt 2468 Bauernwohnhaus, sog. «Pfisterhaus» 2291005
Objekt 2501 Ehem. Färberei und Wohnhaus 210295468
Objekt 2537 Waschhaus 210239453
Objekt 2565 Lagerhaus Pestalozzi & Co. 210212548
Objekt 2569 Schloss 210143132
Objekt 2602 Doppelscheune 210227234
Objekt 2617 Ehem. Fabrikantenvilla 210142537, 210142598
Objekt 2632 Ehem. Gerichtsherrenschloss 3116953
Objekt 2640 Wohnhaus 3136125
Objekt 2641 Trottgebäude 210206005
Objekt 2679 Trotthaus 210271417
Objekt 2754 Ref. Kirche 210134652
Objekt 2758 Ehem. Waschhaus 210202054
Objekt 2764 Ehem. Spinnerei 210133452
Objekt 2765 Filtergebäude 210258754
Objekt 2853 Altbauteil 191991070
Objekt 2860 Villa «Grünenberg» 210271943
Objekt 2895 Ökonomiegebäude 210271809
Objekt 2939 Singsaal, Trakt C 192004669
Objekt 2940 Turnhalle, Trakt D 210268611
Objekt 3006 Schulhaus, Trakt A 210268611
Objekt 3053 «Spycher» 210253463
Objekt 3062 Waschhaus mit Schopf 210253471
Objekt 3072 Schulbauten von 1991-1996 210292065, 210292066
Objekt 3091 Ehem. Primarschulhaus 29174
Objekt 3154 Anbau 210240098
Objekt 3250 Orangerie- und Ateliergebäude 201033787
Objekt 3290 Hausteil 1 114967
Objekt 3313 Kasernentrakt, Reithalle I «Kleine Reithalle» und Reithalle II «Grosse Reithalle» 201010182
Objekt 3314 Reismühle Hegi: Mühlegebäude mit Sägerei 1155105
Objekt 3479 Bahnhofgebäude, Bahnhofhalle und Erweiterungsbauten 302040593
Objekt 3484 Ref. Kirche «Zwinglikirche» und Kirchgemeindehaus mit Pfarrhaus 302003542
Objekt 3487 Eingangsgebäude 2370974
Objekt 3494 Gärtnerwohnhaus 302047761
Objekt 3497 Leichenhaus und Abdankungshalle 302022539, 302003499
Objekt 3499 Bezirksgebäude 302048923, 302048924, 302049249, 149066
Objekt 3506 Bankgebäude «Leuenhof» 302023167
Objekt 3517 Rotes Schloss 143620, 143621, 2366789, 302030955, 143625, 143627, 143628, 143629, 143624
Objekt 3529 Gewächshaus 302046701
Objekt 3538 Weisses Schloss 302046921
Objekt 3543 Villa Rosau 302047135
Objekt 3544 Ref. Kirche Bühl 302020795
Objekt 3564 Bettenhaus Ost 302007714
Objekt 3569 Nukleartrakt 3 302007697
Objekt 3570 Aufnahmetrakt 302007700
Objekt 3571 Küchentrakt mit Personalrestaurant und Cafeterien 302007704
Objekt 3572 Operationstrakt 302007710
Objekt 3591 Wohnhaus «Zum Kiel» 140589, 302040218
Objekt 3604 Kantonsschulgebäude 302046890, 143551, 9011845, 143549, 302046892
Objekt 3616 Ehem. Schlachthallen mit Kühl- und Kesselhaus 302005783
Objekt 3640 Geschäftshaus 302000428
Objekt 3643 Geschäftshaus 302040281
Objekt 3644 Geschäftshaus 302040283
Objekt 3649 Pavillon Le Corbusier 302010817
Objekt 3654 Grand Hotel «Dolder» 302034250, 302034249, 302034248, 302031101, 302033221, 302034252, 302034251
Objekt 3658 Hauptgebäude 302050470, 302050573, 302050578, 302024550, 302024551, 302024552, 302024553, 302024554, 302024555, 302024556, 302024558, 302024559, 302024560, 302024561, 302024562, 302024563, 302024564, 302024565
Objekt 3665 Zunfthaus «Zur Saffran» 302023140
Objekt 3674 Wohn- und Geschäftshaus mit Erweiterungsbau 302047038, 302063366, 143819, 302063368
Objekt 3684 Synagoge 302040683
Objekt 3687 Haus «Zum Grossen Pelikan» 9011855, 302023116
Objekt 3689 Palmenhaus 302023120
Objekt 3696 Hauptgebäude 302040863
Objekt 3698 Gebäude HG (Hauptgebäude) 302040852
Objekt 3707 Fahrzeugwaschanlage 302032734
Objekt 3821 Ehem. Zeughäuser 3 und 4 mit Waffensaal 302004674
Objekt 3823 Kath. Kirche Maria Lourdes mit Pfarrhaus und Kirchgemeindezentrum 172138, 302024016, 302024017
Objekt 3825 Rote Fabrik Trakt C 302045330
Objekt 3826 Rote Fabrik Trakt B 9011350
Objekt 3832 Ref. Kirche mit Pfarrhaus 153573
Objekt 3833 Vorderhäuser 155994, 156011, 9001885, 156010, 156009
Objekt 3840 Ökonomiegebäude und Wohnhaus 302040262, 302023134
Objekt 3843 Zentralbibliothek, Stammhaus 3169695
Objekt 3849 Villa Patumbah 302023514
Objekt 3852 Institutsgebäude, ehem. Villa «Zum Sonnenbühl» 302008404
Objekt 3905 Güterschuppen 210225449
Objekt 3913 Aufnahmegebäude mit Kioskteil 111958
Objekt 4088 Aufnahmegebäude 302020463, 302047271
Objekt 4105 Aufnahmegebäude 210295461
Objekt 4133 Bahnhofgebäude 302012086, 9001324
Objekt 4134 Perrondach 2 302032369
Objekt 4135 Perrondach 3 302032370
Objekt 4154 Perrondach 1 302032127
Objekt 4239 Turnhalle II 116471
Objekt 4308 Kirchgemeindehaus, sog. «Häfelfingerhaus» 210222412
Objekt 4309 Ref. Kirche 210190314
Objekt 4387 Schulhaus Trakt 1 210197024
Objekt 4389 Waschhäuschen 210074287
Objekt 4451 Abwartswohnhaus mit Garage 210284461
Objekt 4457 Unteres Kosthaus 210292790, 210292791, 210292730, 210292792
Objekt 4458 Mittleres Kosthaus, Ersatzneubau 91493, 210292733, 210292732, 91482, 91484
Objekt 4460 Ehem. Ökonomiegebäude mit Wohnhaus 210185642, 210185643
Objekt 4462 Ehem. Färberei 210268708
Objekt 4463 Zweite Zwirnerei 2267197
Objekt 4529 Transformatorenstation 210253755
Objekt 4537 Trafostation B 6 Turm 210239291
Objekt 4626 Transformatorenstation 210247084
Objekt 4631 Trafostation «Hombrechtikon-Dörfli» 210221529
Objekt 4652 Transformatorenstation 109843
Objekt 4800 Werkareal Obertöss, Kleinkraftwerk im Fabrikgebäude von 1899 und historischer Maschinenpark 201031015
Objekt 4811 «Lochmühle» 210231588
Objekt 4939 Ehem. Spinnerei 210143177
Objekt 4982 WR Hinwil 79: Maschinenpark 47943
Objekt 5017 Kirche, ref. 210249748
Objekt 5019 Waschhaus und Holzschopf 210249810
Objekt 5024 Waschhaus 210226487
Objekt 5071 Landhaus 68071
Objekt 5094 Hauptgebäude mit Scheune und Zwischenbau 201005269
Objekt 5102 Hausteil 2 9921
Objekt 5112 Hallenbad B 9020
Objekt 5121 Ref. Kirche 210235818
Objekt 5155 Flachbau mit Shedhallen 210297737, 210295935, 210297739, 2285714, 210215089, 210297770, 210297740
Objekt 5156 Hauptgebäude von 1862 210239057
Objekt 5190 Wohnhaus mit Schopf 41248
Objekt 5215 Mehrzweckhalle mit Turnhalle C 9020
Objekt 5216 Schulhaus A mit Turnhalle und Hallenbad 9020
Objekt 5228 Pfarr- und Sigristenhaus 117456
Objekt 5230 Fussgängersteg 117746
Objekt 5231 Wohn- und Geschäftshaus 117724
Objekt 5236 Vielzweckbauernhaus 116760, 3116876
Objekt 5320 Speicher 210234237
Objekt 5324 Wohnhaus, sog. «Fähnderihaus» 2278166
Objekt 5344 Ehem. Zehntenscheune 210255822
Objekt 5355 Wohnhaus «Mühlehof», ehem. Bäckerei 2249794
Objekt 5381 Kesselhaus und Werkstattgebäude von 1915 210238922
Objekt 5419 Ehem. ref. Pfarrhaus 9883
Objekt 5443 Pumpenhaus 210293879
Objekt 5545 Ehem. Zehntenspeicher 210297430
Objekt 5604 Hausteil 10 210217917
Objekt 5612 Hausteil 9 210121754
Objekt 5641 Bauernhaus, ehem. 210112484
Objekt 5697 Schulhaus 191909721
Objekt 5710 Singsaal und Abwartswohnung 192087260
Objekt 5711 Turnhalle 192087263
Objekt 5785 Gasreglerstation 191900428, 210210834
Objekt 5804 Kettenhaus 121248, 121246
Objekt 5816 Trotthaus 210224768
Objekt 5892 Bauernhaus 210239041
Objekt 5895 Turnhalle 2264203
Objekt 5926 Kettenhaus 121251
Objekt 5976 Angestelltenwohnhäuser 120178, 120179
Objekt 5984 Klassentrakte A/B mit Pausenhalle 210197191, 210197190, 200255419, 201024586
Objekt 5993 Speicher 210244619
Objekt 6003 Ehem. Hühnerhaus 210244613
Objekt 6013 Schopf 210244705
Objekt 6015 Magazingebäude, Spedition und Portierhaus 210220943
Objekt 6022 Magazin- und Fabrikgebäude 210220953
Objekt 6041 Remise 87246
Objekt 6054 Häuserreihe 87221, 87222, 87223, 87224, 87225, 87226, 87227, 87228
Objekt 6187 Oberstufenschulhaus 122993
Objekt 6205 Waschhaus 191955014
Objekt 6207 Schweinestall 210068892
Objekt 6208 Scheune 210068894
Objekt 6255 Sägerei 210286944
Objekt 6274 Waschhaus, ehem. 210228398
Objekt 6341 Schopfanbau 210267247
Objekt 6389 Hausteil 2 210281962
Objekt 6413 Verwaltungsgebäude 210282931
Objekt 6426 Ehem. Mühlegebäude 210213722
Objekt 6429 Speicher 4274
Objekt 6455 Ehem. Mühle mit Wohnhaus 210280889
Objekt 6484 Gasthaus «Zum Ochsen» 11942
Objekt 6489 Ökonomiegebäude 504231710
Objekt 6540 Wohnhaus 115289
Objekt 6544 Bauernhaus 210247223
Objekt 6558 Turnhalle mit Verbindungsbau (Trakt B) 210041672
Objekt 6559 Singsaalgebäude mit Schulzimmern (Trakt C) 210041672
Objekt 6614 Bauernhaus mit Scheune, sog. «Zuberhaus» 12221
Objekt 6691 Bauernhaus mit Scheune 12279
Objekt 7114 Halle 7 9062248
Objekt 7126 Halle 8 210186926
Objekt 7138 ehem. Vielzweckbauernhaus, Ökonomieteil 210295544
Objekt 7154 Hausteil 1 2892
Objekt 7187 Breuer Lakehouse 210282802
Objekt 7277 Wohnhaus mit Scheune 191964747
Objekt 7293 Ehem. Sodafabrik 78785
Objekt 7340 Magazin 210264508
Objekt 7360 Nebengebäude 210293119
Objekt 7369 Ehem. Zeughaus 2 9083922
Objekt 7376 Grossmünsterkapelle 140370
Objekt 7873 Wohnhaus 1150954
Objekt 7888 Wohnhaus 1151196
Objekt 7889 Wohnhaus 1151193
Objekt 7895 Wohnhaus 1151280
Objekt 7896 Wohnhaus 1151281
Objekt 7897 Wohnhaus 1151283
Objekt 7900 Wohnhaus 1151288
Objekt 7910 Wohnhaus 1151198
Objekt 7918 Wohnhaus 1151215
Objekt 7919 Wohnhaus 1151213
Objekt 7920 Wohnhaus 1151211
Objekt 8016 Wohnhaus 1157196
Objekt 8077 Garagengebäude 201035266
Objekt 8079 Garagengebäude 201035212
Objekt 8081 Garagengebäude 201035484
Objekt 8083 Garagengebäude 201035223
Objekt 8149 Dienstgebäude Fahrleitungsunterhalt 2366543, 302022198
Objekt 8209 Perrondach 2 302032128
Objekt 8331 Magazingebäude und Portierhaus 302004344
Objekt 8361 Wohn- und Atelierhaus 210279890
Objekt 8693 Doppelwohnhaus 16284
Objekt 8694 Doppelwohnhaus 16288
Objekt 8695 Doppelwohnhaus 16292
Objekt 8696 Doppelwohnhaus 16291
Objekt 8697 Doppelwohnhaus 16285
Objekt 8698 Doppelwohnhaus 16283
Objekt 8933 Wohnhaus 302022734
Objekt 9532 Zwischentrakt 191988281
Objekt 9533 Turnhalle 191988281
Objekt 9790 Nukleartrakt 2 302007697
Objekt 10012 Doppelwohnhaus «Frohwies» 44469
Objekt 10019 Badehaus 210199937
Objekt 10577 Wohnhaus, ehem. Arbeiterwohnhaus I 201038821
Objekt 10581 Wohn- und Geschäftshaus, ehem. Konsumgebäude 47494
Objekt 10586 Ehem. Stallscheune 201038819
Objekt 10604 Werkstattgebäude 210100898
Objekt 10803 Scheune 210216734
Objekt 10816 Waschhaus, ehem. 210225910
Objekt 11051 Bauernhaus 3135335
Objekt 11277 Wohnhaus mit Anbau 210265539
Objekt 11314 Bauernwohnhaus 210190274
Objekt 11319 Kirchgemeindehaus, ehem. Wohnhaus mit Poststelle 210143075
Objekt 11370 Turnhalle 210261974
Objekt 12360 Speicher 210182692
Objekt 12366 Waschhaus 210294454
Objekt 12379 Bauernhaus 41187
Objekt 12469 Nebengebäude 210194483
Objekt 12607 Wohnhaus 36354, 3115668
Objekt 12693 Ref. Kirche 50248
Objekt 12782 Ehem. Vielzweckbauernhaus 2273924, 3115722
Objekt 12907 Gasthaus «Schwert» 9003577
Objekt 12913 Speicher 210194542
Objekt 13354 Kleinbauernhaus 108608
Objekt 13363 Wohnhaus 210095971, 210165207, 210165208
Objekt 13377 Wohnhaus 53964
Objekt 13522 Waschhaus, ehem. 210224883
Objekt 13577 Bauernhaus 11173
Objekt 13713 Scheune 210283165
Objekt 13791 Hausteil 1 210218911
Objekt 13842 Bauernhaus, ehem. 12126
Objekt 13845 Bauernhaus, ehem. 210069968, 12312
Objekt 13983 Hausteil 3 210280975
Objekt 14011 Ehem. Kornspeicher 210266296
Objekt 14079 Bauernhaus 8025
Objekt 14086 Waschhaus 210237275
Objekt 14137 Doppelwohnhaus 77341
Objekt 14172 Altes Schulhaus 210089424
Objekt 14194 Wohnhaus mit Ladenlokal 64179
Objekt 14202 Stallscheune 210226880
Objekt 14203 Ref. Kirche 210226915, 210226914
Objekt 14216 Hausteil 1 210227037
Objekt 14222 Ehem. Scheune 210071108
Objekt 14224 Waschhaus, ehem. 210227158
Objekt 14257 Ehem. Vielzweckbauernhaus 210232454
Objekt 14310 Wohnhaus mit Schopf 104213, 210134637
Objekt 14372 Ehem. Bauernwohnhaus «Vorder Au» 11527158
Objekt 14394 Ehem. Bauernhaus 210264150
Objekt 14446 Ehem. Trottgebäude 210271729
Objekt 14634 Wohnhaus Horngasse 2/2a 56701
Objekt 14640 Trottgebäude, ehem. 210224811
Objekt 14732 Ehem. Speicher 210257464
Objekt 14745 Hausteil 1 13112
Objekt 15167 Hausteil Nordost 68833
Objekt 15339 Eingangszone, 1-EZ 210199294, 210199295
Objekt 15442 Hausteil 4 59705
Objekt 15485 Poliklinik 302049944, 302050038
Objekt 15510 Wohnhaus mit Laden 210185191
Objekt 15559 Ehem. Waschhaus mit Holzschopf 210275578
Objekt 15604 Ref. Kirche 23845
Objekt 15609 Hausteil 1 36214
Objekt 15615 Sihlsteg 56283
Objekt 15638 Hausteil 1 48628
Objekt 15689 Waschhaus, ehem. 210229094
Objekt 15708 ehem. Tribünengebäude 302016747, 302052885, 302052906
Objekt 15711 Wohnhaus und Atelier 210284654
Objekt 15738 «Kölla-Bau» 192013719
Objekt 15801 Zaun 302023514
Objekt 15832 Haus zum Steineck 3001079
Objekt 15838 Ehem. Chemiegebäude 302023103, 302062145
Objekt 15839 Schulhaus, ehem. Eidg. Landwirtschaftliche Versuchsanstalt 302016765
Objekt 15840 Kirchgemeindezentrum 140370
Objekt 15908 Hausteil 1-3 210205977
Objekt 15928 Wohnhaus «Wartbad» 3136015
Objekt 15993 Weinbauernhaus/Trotte/Waschhaus, heute alles unter Vers. Nr. 273 13115
Objekt 15994 Hausteil 2 13110
Objekt 16033 südwestseitiger Hausteil 210188295
Objekt 16121 Terrassenhäuser 210075086
Objekt 16550 Mensa 9011691
Objekt 16582 Pavillon 302040323
Objekt 17940 Speicher 210240191
Objekt 19400 Ehem. Schützenhaus 210224387
Objekt 23706 Hochkamin 302034026
Objekt 24404 Nordöstlicher Hausteil 3116823
Objekt 26042 Werkstatt 9004528

Fehlende EGID-Werte in den ODB-Daten anhand Koordinaten identifizieren

Die weiter unten als Tabelle ausgegebene Abfrage überprüft, ob zu Objekten ohne eigentragene EGID-Werte eine EGID anhand der Koordinaten ergänzt werden kann.

Hinweis

Aufgrund der kleinen Anzahl Objekt in der Objektliste der Denkmalpflege ist vorgängig kein kompliziertes Herausfiltern von Objekten ohne EGID notwendig, es wird bloss anhand von Begriffen im Objekttitel gefiltert. Aus den vollständigen ODB-Daten müssten vor dem Lookup jene Objekte herausgefiltert werden, für welche aufgrund ihres Typs keine EGID erwartet wird und welche abgebrochen sind.

av_building_polys <- st_read(
  here::here("data", "raw", "ARV_BASIS_AVZH_BODENBEDECKUNG_F.shp"),
  query = "SELECT * FROM ARV_BASIS_AVZH_BODENBEDECKUNG_F WHERE ARTCHID = 0",
  quiet = TRUE
) |>
  st_transform(crs = 2056) |>
  mutate(GWR_EGID = as.integer(GWR_EGID))

# # Bodenbedeckung amtliche Vermessung (EGID fehlt)
# av_bodenbedeckung_polys <- st_read(here::here("data", "raw", "Bo_BoFlaeche_A.shp"), quiet = TRUE) |>
#   st_set_crs(2056) |>
#   filter(ART <= 7) |>
#   glimpse()


objektliste_denkmalpflege_with_looked_up_egids <- objektliste_denkmalpflege |>
  filter(
    !is.na(e_koordinate) & !is.na(n_koordinate)
  ) |>
  filter(
    # filter to remove objects where no EGID is expected
    !str_detect(
      tolower(objekt),
      regex(
        params$no_egid_expected_regex,
        ignore_case = TRUE
      )
    )
  ) |>
  st_as_sf(
    coords = c("e_koordinate", "n_koordinate"),
    crs = 2056,
    remove = FALSE
  ) |>
  st_join(
    av_building_polys |>
      select(GWR_EGID),
    join = st_within,
    left = TRUE
  ) |>
  st_drop_geometry()
missing_egids_via_coordinates <- objektliste_denkmalpflege_with_looked_up_egids |> 
  filter(
    is.na(egid)
  ) |>
  filter(
    !is.na(GWR_EGID) & GWR_EGID > 0
  ) |>
  select(odb_id, objekt, e_koordinate, n_koordinate, GWR_EGID) |>
  distinct() |>
  arrange(as.numeric(str_remove_all(odb_id, "\\D+")))
missing_egids_via_coordinates |> 
  kable(
    col.names = c(
      "ODB-ID",
      "Objekt",
      "E-Koordinate",
      "N-Koordinate",
      "EGID aus AV"
    )
  ) |> 
  column_spec(
    1,
    link = paste0(
      "https://odb.zh.ch/odbwiki/mediawiki/index.php/",
      missing_egids_via_coordinates$odb_id
    )
  )
Tabelle 2: Fehlende EGID-Werte gemäss Koordinaten
ODB-ID Objekt E-Koordinate N-Koordinate EGID aus AV
Objekt 403 Wohnhaus 2707338 1252032 113051
Objekt 404 Ökonomiegebäude 2707361 1252026 210142988
Objekt 829 Wasserkraftanlagen 2686233 1264884 201005306
Objekt 984 Lift und Treppe 2677178 1256223 210197078
Objekt 1095 Pulverhäuschen 2688878 1234258 210298444
Objekt 2181 Grundwasserpumpwerk «Rheingasse» 2688193 1277697 210070328
Objekt 2765 Filtergebäude 2698324 1244601 210258754
Objekt 3689 Palmenhaus 2682709 1247250 302023120
Objekt 4537 Trafostation B 6 Turm 2688613 1280077 210239291
Objekt 4736 Wasserkraftanlage 2714392 1245339 2277705
Objekt 4982 WR Hinwil 79: Maschinenpark 2711897 1237445 47943
Objekt 5292 Wasserkraftanlage 2677847 1269864 210297628
Objekt 5381 Kesselhaus und Werkstattgebäude von 1915 2689506 1282857 210238922
Objekt 5443 Pumpenhaus 2693845 1269385 210293879
Objekt 5785 Gasreglerstation 2676216 1250450 191900428
Objekt 5877 Wasserrecht Hinwil 198 2706722 1243797 38527
Objekt 5926 Kettenhaus 2677321 1249917 121251
Objekt 10012 Doppelwohnhaus «Frohwies» 2706404 1239840 44469
Objekt 10019 Badehaus 2685359 1239093 210199937
Objekt 10040 Wandbild «Krieg und Frieden» 2689770 1250818 210127827
Objekt 16550 Mensa 2683803 1247610 9011691
Objekt 19400 Ehem. Schützenhaus 2693578 1271875 210224387
Objekt 24139 Erweiterungstrakt 2702620 1241677 50899

Objekte mit fehlerhaft erfassten Strassenadressen

Bei einigen Objekten sind die Strassenadressen in der ODB nicht korrekt erfasst. Die folgende Abfrage prüft die entsprechenden Werte darauf, ob nach der Trennung anhand des definierten Trennzeichens noch ein Strassenname vorhanden ist.

dubious_addresses_in_objektliste <- objektliste_left_join_via_egid |>
  # Die Strassenadressen sind hier bereits separiert
  filter(
    str_detect(strasse_nr, regex("^(\\d+[a-zA-Z]?)$", ignore_case = TRUE))
  ) |>
  select(odb_id) |>
  distinct() |>
  left_join(
    objektliste_denkmalpflege |> select(odb_id, strasse_nr),
    by = join_by(odb_id == odb_id)
  ) |>
  arrange(as.numeric(str_remove_all(odb_id, "\\D+")))

kable(
  dubious_addresses_in_objektliste,
  col.names = c("ODB-ID", "Eingetragene Strassenadresse")
  ) |>
  column_spec(
    1,
    link = paste0(
      "https://odb.zh.ch/odbwiki/mediawiki/index.php/",
      dubious_addresses_in_objektliste$odb_id
    )
  )
Tabelle 3
ODB-ID Eingetragene Strassenadresse
Objekt 472 Am Kanal 1; 3; 5; 7; 9; 11; 13; 15
Objekt 2401 Zürichstrasse 50; 52
Objekt 2405 Zürichstrasse 68; 70
Objekt 2406 Zürichstrasse 72; 74
Objekt 2408 Zürichstrasse 76; 78; 80
Objekt 2410 Zürichstrasse 63; 65
Objekt 2412 Zürichstrasse 58; 60; 62
Objekt 2413 Zürichstrasse 54; 56
Objekt 2965 Jonastrasse 17a; 17b; 17c; 17d; 17e
Objekt 2966 Jonastrasse 7; 11; 13; 13a; 13b; 13c; 15
Objekt 2967 Jonastrasse 1; 3; 5
Objekt 2975 Jonastrasse 14; 18
Objekt 10577 Aretshaldenstrasse 11; 13; 15
Objekt 10578 Aretshaldenstrasse 1; 3; 5
Objekt 10585 Zürichstrasse 11; 15; 17; 19; 21; 23
Objekt 10588 Aretshaldenstrasse 17; 19
Objekt 14514 Hauptstrasse 21; 23
Objekt 15815 Sonnenplatz 1; 2

Objekte mit vermutlich fehlerhaft erfassten Postleitzahlen

Die folgende Abfrage überprüft, ob die Postleitzahlen in der ODB mit den anhand der Koordinaten ermittelten Postleitzahlen übereinstimmen.

Warnung

Da pro Objekt nur ein Koordinatenpaar in der Datenbank gespeichert wird, die Objekte aber teilweise in mehreren Gemeinden gleichzeitig liegen (Grenzzeichen, Brücken), bedürfen die Resultate dieser Abfrage genauer menschlicher Überprüfung vor ihrer Übertragung in die Datenbank.

objects_with_dubious_zip_codes_in_odb <- objektliste_denkmalpflege_with_looked_up_zip_code |> 
  select(odb_id, objekt, gemeinde, strasse_nr, plz, ort, ZIP4, ADDITIONAL) |> 
  filter(!is.na(plz) & !is.na(ZIP4) & plz != ZIP4 ) |>
  select(odb_id, objekt, plz, ZIP4)
kable(
  objects_with_dubious_zip_codes_in_odb, 
  col.names = c("ODB-ID", "Objektname", "PLZ in ODB", "PLZ korrekt")
  ) |> 
  column_spec(
    1,
    link = paste0(
      "https://odb.zh.ch/odbwiki/mediawiki/index.php/",
      objects_with_dubious_zip_codes_in_odb$odb_id
    )
  )
Tabelle 4
ODB-ID Objektname PLZ in ODB PLZ korrekt
Objekt 403 Wohnhaus 8488; 8492 8492
Objekt 404 Ökonomiegebäude 8488; 8492 8492
Objekt 448 Schulhaus Büel B 8954 8103
Objekt 947 Umgebung des Wohn- und Atelierhauses Kurtz 8137 8713
Objekt 1292 Panzersperre T02505e 8038 8041
Objekt 1305 Infanteriewerk A04862 8005 8004
Objekt 1680 Stellwerk Nord 2005 8005
Objekt 1685 Elektrische Zentrale 4048 8048
Objekt 1689 Triebwagenhalle 8048 8004
Objekt 1708 Schiebebühne Ost 8048 8004
Objekt 2035 Gärten 8482 8400
Objekt 2207 Gärten/Umgebung 8400 8408
Objekt 2345 Nebengebäude Schloss Kefikon 8543; 8544 8543
Objekt 2941 «Doktorhaus» mit Schopf 8498; 8636 8636
Objekt 2945 Ehem. Gasthaus «Zum Kreuz» 8498; 8636 8636
Objekt 3206 Ehem. Knochenmühle und Reibe 8492 8489
Objekt 3207 Hauptgebäude 8492 8489
Objekt 3208 Holzschopf 8492 8489
Objekt 3209 Scheune 8492 8489
Objekt 3210 Wohnhaus 8492 8489
Objekt 3332 Wohn- und Ökonomiegebäude 8400; 8404 8400
Objekt 3358 Gedeckte Holzbrücke 8314 8482
Objekt 3560 Zahnärztliches Institut 8006; 8032 8032
Objekt 3696 Hauptgebäude 8006 8001
Objekt 3698 Gebäude HG (Hauptgebäude) 8092 8006
Objekt 3703 Opernhaus 8001 8008
Objekt 3837 Verwaltungsgebäude «Walcheturm/Walchetor» 8001; 8006 8001
Objekt 4118 Ehem. Stationsgebäude Ettenhausen-Emmetschloo 8620; 8623 8620
Objekt 4457 Unteres Kosthaus 8304; 8600 8600
Objekt 4458 Mittleres Kosthaus, Ersatzneubau 8304 8600
Objekt 4529 Transformatorenstation 8543; 8546 8543
Objekt 4597 Transformatorenstation 8314 8483
Objekt 4942 Düker 8482 8314
Objekt 4951 Hausteil Nordost 8132; 8133 8132
Objekt 5418 Thurbrücke 8450; 8451 8450
Objekt 5548 Eisenbahnbrücke 8451; 8450 8451
Objekt 5876 Turbinenturm 8620 8623
Objekt 5882 Wasserrecht Hinwil 141 8620 8623
Objekt 5884 Weiher, Wasserrecht Hinwil 274 aktiv 8620 8623
Objekt 6267 Alte Lorzenbrücke 8933 6331
Objekt 7544 Fachwerkbrücke in Stahl 8135; 8810 8135
Objekt 8042 Gärten/Rieterstrasse 8400 8406
Objekt 8186 Limmatbrücke 8005; 8037 8037
Objekt 8216 Limmatbrücke 8005; 8037 8037
Objekt 8332 Querhalle und Perrondächer 8001 8005
Objekt 8473 Brücke West 8294 8194
Objekt 8483 Trasse, Böschungen, Stützmauern und Staketengeländer 8002; 8003; 8004 8003
Objekt 8491 Sihlüberfall 8036 8003
Objekt 8494 Meinrad-Lienert-Brunnen 8004 8003
Objekt 8994 Figurenbrunnen 8494 8493
Objekt 9605 «Forel-Brunnen» 8600 8006
Objekt 9678 Weiher 8482 8314
Objekt 10141 Oberwasserkanal 8483 8486
Objekt 13156 Militärbrücke 8004 8001
Objekt 13590 Bauernhaus, ehem. 8212; 8447 8212
Objekt 14380 Wohnhaus mit Schopf 8498; 8636 8636
Objekt 14382 Ehem. Bauernhaus 8498; 8636 8636
Objekt 14383 Hausteil 1 8498; 8636 8636
Objekt 14514 Wohnhaus 8321; 8489 8489
Objekt 14777 Ehem. Weberei 8498 8636
Objekt 15279 Kanalwehr mit Überlauf 8483 8486
Objekt 15516 Hausteil 1 8543; 8544 8543
Objekt 15637 Ehem. Weberei 8498 8636
Objekt 15643 Magazin 8498 8636
Objekt 15685 Literargymnasium LG und Realgymnasium RG 8001; 8032 8001
Objekt 15798 Kommandoposten A05565 8447 8248
Objekt 15825 Wohnhaus mit Wirtschaft 8400; 8401 8400
Objekt 16550 Mensa 8006 8001

2.3 Daten Visualisierung

2.3.1 Grundbucheinträge nach Jahr und Einstufung

objektliste_denkmalpflege |>
  mutate(year = year(grundbucheintrag)) |>
  group_by(year, einstufung) |>
  summarise(count = n()) |> # , .groups = "drop"
  ungroup() |>
  ggplot(aes(x = year, y = count, fill = einstufung)) +
  theme_stat() +
  geom_col(na.rm = TRUE) +
  labs(
    x = "Jahr des Grundbucheintrags",
    y = "Anzahl Grundbucheinträge",
    fill = "Einstufung"
  )
Abbildung 1: Grundbucheinträge zu Objekten nach Jahr mit Einstufung

2.3.2 Gebäude im überkommunalen Inventar im Verhältnis zu allen Gebäuden im Kanton Zürich

Die folgende Grafik zeigt, welcher Anteil von Gebäuden im Kanton Zürich im Inventar der Denkmalschutzobjekte von überkommunaler Bedeutung (Stand 2025-11-09) geführt werden. Sie stellt dazu die EGIDs der (nicht ergänzten) Objektliste ins Verhältnis zu allen gültigen EGIDs im Kanton Zürich.

Wichtig

Die folgende Abfrage setzt voraus, dass nur die GWR-Daten zum Kanton Zürich eingelesen wurden. Wird eine andere Datenbasis verwendet, muss der EGID-Pool gegebenenfalls anhand des Kantonskürzels in gefiltert werden. Weil hier der für das Abschlussprojekt verwendete GWR-Auszug und die verwendete Objektliste nicht auf demselben Nachführungs-Stand sind, stimmen die Zahlen ausserdem nicht bis auf die letzte Kommastelle.

planungsregionen_ktzh <- read_csv(
  here::here("data", "raw", "KTZH_00003082_00006563.csv"),
  col_types = cols(
    gemeinde_code = col_integer(),
    bezirk_code = col_skip(),
    bezirk_name = col_skip(),
    raumplanungsregion_code = col_integer()
  )
)

gwr_by_egid |>
  left_join(
    planungsregionen_ktzh |>
      select(gemeinde_code, raumplanungsregion_name),
    by = join_by(gemeindenummer == gemeinde_code)
  ) |>
  left_join(
    objektliste_denkmalpflege |>
      separate_rows(egid, sep = "; ") |>
      mutate(
        im_inventar = TRUE,
        egid = as.integer(egid)
      ) |>
      select(egid, im_inventar, einstufung, eigentumsbeschrankung),
    by = join_by(egid == egid)
  ) |>
  mutate(im_inventar = replace_na(im_inventar, FALSE)) |>
  group_by(raumplanungsregion_name, im_inventar) |>
  summarise(count = n(), .groups = "drop_last") |>
  mutate(
    total = sum(count),
    percentage = count / total * 100
  ) |>
  ungroup() |>
  ggplot(aes(
    y = fct_rev(fct_infreq(raumplanungsregion_name)),
    x = count,
    fill = im_inventar
  )) +
  geom_col() +
  geom_text(
    data = . %>% filter(im_inventar == TRUE),
    aes(label = sprintf("%.1f%%", percentage)),
    hjust = -0.1,
    size = 3
  ) +
  scale_fill_manual(
    values = c("TRUE" = "#0076BD", "FALSE" = "grey80"),
    labels = c("TRUE" = "Im Inventar"),
    breaks = c("TRUE"),
    na.value = "grey80"
  ) +
  theme_stat() +
  labs(
    y = "Planungsregion",
    x = "Anzahl Gebäude",
    fill = ""
  )
Abbildung 2: Gebäude im überkommunalen Inventar im Verhältnis zu allen Gebäuden nach Planungsregion

3 Ergebnisse

Die Visualisierungen Abbildung 1 und Abbildung 1 haben mit den sonstigen Analysen wenig zu tun, sie sind in erster Linie den gestellten formalen Anforderungen an das Abschlussprojekt geschuldet. Gleichwohl geben sie eine Antwort auf zwei häufige Fragen an unser Inventar.

Mein Schwerpunkt lag aber auf den Vergleichen der Angaben in der Objektliste mit den Angaben des Gebäude- und Wohnungsregisters (und der Amtlichen Vermessung). Eine kurze Einordnung:

  • Das Einlesen der Objektliste ist im Moment deutlich zu aufwändig. Eine Verbesserung ist schon länger geplant und sollte nächstes Jahr umgesetzt werden können.
  • Die Tabelle Tabelle 1 ist erschreckend lang geworden, vor allem angesichts dessen, dass die ermittelten EGIDs nicht einfach importiert werden können, sondern pro Objekt geprüft werden müssen. Die Menge an Ergänzungsvorschlägen ist vor allem dem Umstand geschuldet, dass die EGID in den Denkmalpflege-Daten noch ein vergleichsweise neues Attribut ist.
  • Die Tabelle Tabelle 2 ist demgegenüber verdächtig kurz, was aber damit erklärbar ist, dass die EGID initial über eine ähnliche Abfrage überhaupt erst in den Daten der Denkamlpflege ergänzt wurde, weshalb die meisten Objekte mind. eine EGID eingetragen haben.
  • Das die Tabelle Tabelle 3 so kurz ist, liegt vor allem daran, dass ich die Daten der Objektliste ungefähr jährlich auf das Problem hin überprüft habe.
  • Die Tabelle Tabelle 4 enthält vor allem Hinweise auf Objekte, die auf der Grenze zwischen mehreren Ortschaften liegen.

4 Schlussfolgerungen

Der Ansatz ist vielversprechend, die Arbeit an diesem Abschlussprojekt hat bereits eine Reihe von Korrekturen in der produktiven Objektdatenbank nach sich gezogen und wird sicher noch weitere Verbesserungen in der Datenqualität zeitigen.

Mögliche Ausbaustufen schweben mir vor, etwa:

  • die Befunde wo geeignet direkt in Form von importierbaren TSV-Dateien auszugeben, oder mit R Wikitext für sogenannte Pendenzen im Wiki zu erzeugen, die von den Kolleginnen und Kollegen einfacher direkt in der ODB selbst geprüft und angewendet werden können.

  • Plausibilisierung von Baujahren: Ergänzung fehlender Baujahre mit GWR-Baujahren >= 1815 in Attribute “BaujahrMin” und “BaujahrMax” (die Gebäudeversicherung Kanton Zürich, auf deren Daten die älteren Baujahre im GWR zurückgehen, wurde erst Ende 1808 gegründet und weiter zurückliegende Werte sind nicht verlässlich)

  • Die Werte für das Attribut Abbruchjahr zu plausibilisieren und fehlende Werte zu ergänzen

  • Redundanz/Doppelte Objekte zu erkennen: Wegen Bedienfehlern und fehlenden automatisierten Prüfungen passiert es teilweise, dass dasselbe Objekt zweimal erfasst wird, ohne dass diesen Objekten voneinander abgegrenzte Objekt-Teile in der gebauten Realität entsprechen. Solche Objekte erkennt man daran, dass sie in der Objektliste bzw. in der Objektdatenbank genau dieselben Werte in folgenden Attributen haben:

    • Gemeinde und Strassenadresse
    • GVZ Nrn.
    • EGIDs
  • Überschneidungen zwischen Objekten im Blick zu behalten: Da die Denkmalpflege für ihre Zwecke die Objekte nach eigenen Gesichtspunkten gliedert und strukturiert (z. B. nach Bauphasen), stimmt der Umfang eines Objekts nicht immer mit dem Umfang eines Objekts der Gebäudeversicherung oder des Gebäude- und Wohnungsregisters überein. Das heisst, dass eine ODB-ID für einen kleineren oder grösseren Umfang stehen kann als über eine EGID oder eine GVZ-Nr. zum selben Bau identifiziert wird. EGID bzw. GVZ-Nr. werden dann entsprechend mehrmals zu verschiedenen ODB-Objekten eingetragen. Ebenso kann dieselbe Strassenadresse bei mehreren ODB-Objekten als Adresse eingetragen sein. Herausforderung: Unterscheiden der gewünschten Überschneidungen von den unerwünschten Doppelungen.

Alles in allem war dieses Abschlussprojekt deshalb ein wertvoller erster Schritt bei der Arbeit mit R! Vor allem Quarto und das komfortable sf-Paket bereiten mir viel Freude!

5 Literatur

Diverse: Geschichte der Gebäudeadressierung, 06.2025. Online: <https://www.giswiki.ch/index.php?title=Geschichte_der_Geb%C3%A4udeadressierung&oldid=71372>, Stand: 01.12.2025.
GVZ Gebäudeversicherung Kanton Zürich; Fierz, Bernard; Caduff, Christian u. a. (Hg.): Versicherte Gebäude und Amtliche Vermessung, 10.2015. Online: <https://www.zh.ch/content/dam/zhweb/bilder-dokumente/themen/planen-bauen/geoinformation/kataster/amtliche-vermessung/broschuerengbz/01_gvz_brosch_schaetzertagung_av_2015.pdf>.
Müller, Thomas: Glasplatten, Negative, Abzüge und DiasDas Bildgedächtnis des Kantons Zürich, in: einst und jetzt (7), 08.2015, S. 4–13.
Sektion Gebäude und Wohnungen (BFS); Geodäsie und Eidgenössische Vermessungsdirektion (swisstopo) (Hg.): Weisung zur Erfassung der Gebäude in der amtlichen Vermessung (AV) und im Gebäude- und Wohnungsregister (GWR) Version 1.2, Neuchâtel 2023. Online: <https://www.housing-stat.ch/files/1754-2300.pdf>.
Waddell, Oliver: Entwicklung der Objektdatenbank der Zürcher Denkmalpflege, in: Zürcher Denkmalpflege, 22. Bericht 2013-2014, Egg 2019 (22), S. 1–17. Online: <https://ad.zh.ch/wp-content/uploads/2019/12/ZD22_KDP_Objektdatenbank_S_1-18.pdf>.