# Methodology — Who designed New York's landmarks

A map and search tool for exploring New York City's designated landmark buildings, with a focus on the architects and builders behind them.

## Data source

All building records come from a single dataset:

- **Individual Landmark and Historic District Building Database**, NYC Landmarks Preservation Commission (LPC), published on NYC Open Data.
  - Dataset id: `gpmc-yuvp`
  - URL: https://data.cityofnewyork.us/Housing-Development/Individual-Landmark-and-Historic-District-Building/gpmc-yuvp
  - No API key required. Free, public data.

This is the same dataset that powers the LPC's own "Discover New York City Landmarks" map. It covers buildings that are designated as individual landmarks or that sit inside one of the city's historic districts. It does **not** cover all buildings in New York City — only those with landmark status.

Data was downloaded on 2026-05-20. To refresh, run `python3 prep_data.py`.

## What is included

- **38,105 buildings** with a mappable location.
- Every record retains its source attributes where present: architect/builder, owner/developer, construction date, primary and secondary architectural style, primary building material, original use, building type, historic district, individual-landmark name, address, borough, and Borough-Block-Lot (BBL) identifier.

## Processing steps (`prep_data.py`)

1. **Download** the full dataset as GeoJSON from NYC Open Data (limit 60,000; the set is ~38,000 rows).
2. **Compute a centroid** for each building's polygon footprint using the standard shoelace-formula polygon centroid. For multi-polygon footprints, the largest ring is used. Centroids are rounded to five decimal places (~1 metre). Markers are points at these centroids; original footprints are not drawn.
3. **Clean placeholder values.** LPC uses the string `"0"` as an empty placeholder throughout the dataset; these are treated as blank. Whitespace is normalized.
4. **Normalize unknown architects.** Values such as `"Not determined"`, `"Undetermined"`, `"Unknown"`, and similar are treated as *no attribution* so they do not appear as named architects. Those buildings still appear on the map and are labelled "Not attributed in LPC records."
5. **Derive a numeric year** for filtering from the first four-digit year found in the `date_low`, `date_high`, or `date_combo` fields. Buildings with no parseable year are kept and shown in grey ("Undetermined").
6. **Drop empty fields** from each record to reduce file size, and write everything to `data.js`.

## Counts (as downloaded)

- Total mapped buildings: **38,105**
- Buildings with a named architect or builder: **27,638**
- Distinct architects/builders: **4,687**
- Construction year range: **1652–2016**
- By borough: Brooklyn 17,046 · Manhattan 14,610 · Queens 4,814 · Bronx 1,095 · Staten Island 539

## How fields map to the source dataset

| App field | Source column | Notes |
|---|---|---|
| Architect / builder | `arch_build` | "Not determined" treated as blank |
| Later alterations | `alt_arch_1`, `alt_arch_2` | architects of recorded alterations |
| Owner / developer | `own_devel` | |
| Style | `style_prim`, `style_sec` | |
| Material | `mat_prim` | |
| Original use | `use_orig` | |
| Type | `build_type` | |
| Date | `date_combo` (display), `date_low`/`date_high` (numeric year) | |
| Historic district | `hist_dist` | |
| Individual landmark | `lm_new`, falling back to `lm_orig` | |
| Address | `des_addres` | |
| Borough | `borough` | code expanded to full name |

## Architect name normalization

The raw `arch_build` field records the same firm or person many different ways: with role tags `(architect)` / `(builder)`, with the responsible partner in brackets (`McKim, Mead & White [Stanford White]`), with `(attributed)`, joined to a builder by a comma, or with a co-architect after a slash or semicolon. Left as-is, one firm splits into dozens of entries.

A deterministic canonicalization (`canon_arch` in `prep_data.py`) collapses these for grouping, search, and the architect spotlight:

1. `(or)` uncertainty → keep the first candidate.
2. An explicit `(architect)` tag → drop everything after it (removes the trailing builder).
3. Remove remaining `[...]` and `(...)` qualifiers.
4. Keep the lead entity before a ` / ` or `;` separator.
5. Unify ` and ` → ` & `, collapse whitespace, trim stray punctuation.

This reduced 4,687 raw strings to **4,065 canonical names** and, for example, merged 13 spellings of *McKim, Mead & White* (77 → 127 buildings). The original full attribution is preserved and shown in each building's popup; only the grouping key is canonical. **No fuzzy matching is applied** — names that differ in substance (for example a firm written with and without "& Co.") are not merged, and joint attributions like "Smith (or) Jones" resolve to the first name only.

## Architect information links

Each architect links to an authoritative source. Verified English Wikipedia article URLs were obtained from **Wikidata** (`prep_extras.py`), matching canonical architect names against Wikidata entities restricted to people whose occupation is architect (P106 = Q42973) or entities credited as a building's architect (P84) — this avoids matching same-named places. Verified links were found for **505 architects, covering 5,117 buildings (about 19% of attributed buildings)**; these are overwhelmingly the notable architects. Where no verified entity exists (mostly prolific row-house architects with no encyclopedia article), the link falls back to a Wikipedia search for the name. Links open in a new tab and are labelled "Wikipedia" (verified) or "Search Wikipedia" (fallback).

## Beyond-landmarks layer (Wikidata)

An optional overlay ("Add notable buildings beyond landmarks") shows **1,522 New York City buildings that have a named architect in Wikidata**, regardless of landmark status. This is a genuine extension past the LPC set: it includes non-landmark notable buildings (for example recent civic and cultural buildings).

- Source: Wikidata Query Service (SPARQL), items located in New York City (`wdt:P131*` → Q60) with an architect (P84) and coordinates (P625). Pre-fetched to `wd_source.json`; processed by `prep_extras.py`.
- Each building keeps its architect(s), construction year and style where present, plus links to the building's and architect's Wikipedia articles.
- Markers are hollow magenta rings to distinguish them from the solid era-coloured LPC dots; clusters are magenta.
- The overlay responds to the text search and the architect spotlight (matched by a light normalization key, so LPC "Warren & Wetmore" lines up with Wikidata "Warren and Wetmore"). It does **not** respond to the borough, style, original-use or era controls, because those LPC fields are not directly comparable to the Wikidata schema.
- **Why not other sources:** the city's Historical DOB Permit Issuance dataset (2.4M rows) has no architect field, only the permittee/contractor. The Office for Metropolitan History permit database is a third-party, copyrighted resource and was not scraped. Wikidata is open-licensed (CC0) and carries a structured architect field, so it was used instead.
- **Overlap caveat:** some Wikidata buildings are themselves LPC landmarks and will appear in both layers when both are shown; the layers are not deduplicated against each other.

## Known limitations

- **Designated buildings only.** This is not a citywide architect index. A building with no landmark status will not appear, even if its architect is well documented elsewhere.
- **Attribution gaps.** About 10,500 designated buildings (~27%) have no named architect in LPC records, often because the designer of an older or vernacular structure is unknown.
- **Firm-level grouping.** Architects are grouped on the exact text in the `arch_build` field. A firm written two different ways (for example with and without "& Co.") will appear as two entries, and joint attributions like "Smith (or) Jones" are treated as a single distinct value. No name-splitting or fuzzy matching is applied.
- **Centroids, not footprints.** Each building is a single point at the footprint centroid, not its outline.
- **Dates are approximate.** Many source dates are circa values; the numeric year used for filtering is the earliest four-digit year present.

## Beyond landmarks

For architects of non-landmark buildings, the most complete sources are the Office for Metropolitan History's digitized Manhattan New Building permits (1900–1986) and the city's Historical DOB Permit Issuance dataset. Neither is included here.
