File size: 5,683 Bytes
6a82282 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | # Phase 8 β `nycha_development_exposure` specialist (first output)
## Status
**First end-to-end output on Red Hook (Brooklyn) validates.** Same
join pattern as the MTA-entrance specialist, but for *polygon* assets:
the metric of interest is "% of the development's footprint that
intersects the flood layer" rather than point-in-polygon.
## What it does
Per queried (lat, lon), returns up to N NYCHA developments whose
centroid is within `radius_m` (default 2 km β developments are
sparser than subway entrances), enriched with:
| Field | Source | Tier |
|---|---|---|
| `development`, `tds_num`, `borough` | `data/nycha.geojson` (NYC Open Data, 218 developments) | reference |
| `centroid_lat/lon`, `distance_m`, `footprint_km2` | computed | computed |
| `rep_elevation_m`, `rep_hand_m` | USGS 3DEP DEM + derived HAND, sampled at the polygon's representative interior point | proxy |
| `pct_inside_sandy_2012` | area-fraction overlap with `data/sandy_inundation.geojson` | **empirical** |
| `pct_in_dep_extreme_2080` (any depth) | area-fraction overlap with NYC DEP 3.66 in/hr / 2080 SLR scenario | modeled |
| `pct_in_dep_extreme_2080_deep` | area-fraction overlap with DEP `Flooding_Category=3` ("Deep Contiguous, >4 ft") only | modeled |
| `pct_in_dep_moderate_2050` (any depth) | area-fraction overlap with NYC DEP 2.13 in/hr / 2050 SLR scenario | modeled |
Plus rollup counts: `n_majority_inside_sandy_2012`,
`n_with_dep_2080_overlap`.
All overlap math runs in **EPSG:2263** (NYC State Plane, feet) so
area arithmetic is correct citywide.
## First output β Red Hook (40.6745, -74.0090)
```json
{
"n_developments": 2,
"n_majority_inside_sandy_2012": 2,
"n_with_dep_2080_overlap": 2,
"developments": [
{
"development": "RED HOOK WEST",
"footprint_km2": 0.0761,
"rep_elevation_m": 3.16,
"rep_hand_m": 4.39,
"pct_inside_sandy_2012": 84.49,
"pct_in_dep_extreme_2080": 8.33,
"pct_in_dep_moderate_2050": 1.91
},
{
"development": "RED HOOK EAST",
"footprint_km2": 0.0808,
"rep_elevation_m": 3.37,
"rep_hand_m": 4.6,
"pct_inside_sandy_2012": 59.83,
"pct_in_dep_extreme_2080": 16.1,
"pct_in_dep_moderate_2050": 4.73
}
]
}
```
The Red Hook campuses are exactly the asset-level claim the work
plan calls for: **84% of Red Hook West's footprint sits inside the
2012 Sandy Inundation Zone** (empirical evidence β water actually
came in here), at a representative interior elevation of 3.16 m, and
the same campus has 8% overlap with DEP's modeled Extreme-2080
extreme-rainfall scenario. Red Hook East is similar β 60% Sandy
overlap at elev 3.37 m.
These are NYCHA's most-mentioned Sandy-affected campuses, and the
specialist surfaces the empirical + modeled exposure cleanly with
a single doc-message-shaped JSON object per development.
## Honest scope
- **Exposure, not damage forecast.** "84% of the development's
footprint sits inside the 2012 Sandy zone" is a structural claim
about the shape of the flood that day β not a prediction that
the next storm will flood the same area to the same depth.
- **Polygon overlap is the right unit, not building count.** A
development is many buildings on a campus; the % overlap conveys
"how much of the campus footprint is exposed" without overstating
per-unit impact. Building-level inundation requires a separate
join against MapPLUTO + DOB footprints.
- **30 m DEM resolution.** `rep_elevation_m` is sampled at the
polygon's `representative_point()`. Useful for borough-level
comparisons; not building-by-building precision.
- **No NYCHA-internal Sandy-recovery records yet.** The 2014 NYCHA
Sandy Recovery Plan and HUD CDBG-DR allocations name specific
developments; folding those citations in is a follow-up before
app/ integration.
## Reproduce
```bash
.venv/bin/python experiments/08_nycha_developments/specialist.py \
--lat 40.6745 --lon -74.0090 --radius 1500 --max 4
# Red Hook West + Red Hook East (Brooklyn)
.venv/bin/python experiments/08_nycha_developments/specialist.py \
--lat 40.5760 --lon -73.9836 --radius 1500 --max 4
# Coney Island Houses (Brooklyn)
```
## Open work (before app/ integration)
1. **MapLibre rendering.** Filled polygons color-graded by
`pct_inside_sandy_2012`, dashed outline if no DEP overlap.
2. **Doc-message emitter.** `nycha_dev_<tds_num>` doc_id format,
one per development; reuse the dev_check phrasing patterns.
3. **NYCHA Sandy Recovery Plan (2014) citations.** Per-development
recovery dollars (or program tiers) folded in as a second
evidence layer.
4. **Coney Island / Hammel / Carleton Manor validation runs.**
Three sites that should produce the most demo-friendly outputs.
5. **Hollis silence test.** Hollis (no NYCHA in 2-km radius) should
return `available=False, n_developments=0` cleanly.
6. **FSM wiring.** Add `step_nycha` to `app/fsm.py` parallel-fanout
block, gated on whether the planner classified the query as
`single_address` / `neighborhood` / `development_check`.
7. **pytest integration test.** Lock the Red Hook result shape;
skip if `data/nycha.geojson` is missing.
## Sharp edges encountered
- **Sandy GeoJSON had a hole-orientation issue** that blew up
`unary_union` with `TopologyException`. `buffer(0)` fixes it
without changing the footprint at sub-foot precision.
- **DEP column is `Flooding_Category` (int16), not `depth_class`.**
Documented; `Flooding_Category == 3` is "Deep Contiguous (>4 ft)".
License: NYC OD NYCHA developments + NYC OEM Sandy + NYC DEP
stormwater + USGS 3DEP DEM β all public-record, civic-tech-clean,
already in use elsewhere in Riprap.
|