# Read PLUTO (Brooklyn only BK) and compute ARA
pluto <- st_read(here::here("nyc_mappluto_24v3_1_fgdb/MapPLUTO24v3_1.gdb"),
query = "select * from MapPLUTO_24v3_1_clipped where Borough = 'BK'", quiet = TRUE)
pluto <- pluto %>%
mutate(ARA = case_when(ResArea == 0 & UnitsRes != 0 ~ 1 * (BldgArea * (UnitsRes/UnitsTotal)) + ResArea,
ResArea > 0 ~ ResArea,
TRUE ~ 0))
# ACS: block groups and tracts for Kings County
bk_bg <- get_acs(geography = "block group",
variables = c(bg_tot_pop = "B03002_001",
bg_white_nh = "B03002_003" ,
bg_black_nh = "B03002_004",
bg_asian_nh = "B03002_006" ,
bg_native_hawaiian = "B03002_007",
bg_other_nh = "B03002_008",
bg_two_more_nh = "B03002_009",
bg_hispanic = "B03002_012"),
year = 2021, output = "wide",
geometry = TRUE, state = "NY",
county = "Kings", survey = "acs5",
progress = FALSE)
bk_tracts <- get_acs(geography = "tract",
variables = c(tract_tot_pop = "B03002_001",
tract_white_nh = "B03002_003",
tract_black_nh = "B03002_004",
tract_asian_nh = "B03002_006",
tract_native_hawaiian = "B03002_007",
tract_other_nh = "B03002_008" ,
tract_two_more_nh = "B03002_009",
tract_hispanic = "B03002_012" ),
year = 2021, output = "wide",
geometry = TRUE, state = "NY",
county = "Kings", survey = "acs5",
progress = FALSE)
# Join census IDs to PLUTO and select needed fields
pluto <- st_transform(pluto, crs = st_crs(bk_bg))
pluto <- pluto %>%
st_join(bk_bg %>% select(block_group_2021 = GEOID, 3, 5, 7, 9, 11, 13, 15, 17))
pluto <- pluto %>%
st_join(bk_tracts %>% select(tract_2021 = GEOID, 3, 5, 7, 9, 11, 13, 15, 17))
pluto <- pluto %>%
select(Borough, Address, OwnerName, LotArea, BldgArea,
ResArea, UnitsRes, ARA, block_group_2021,
starts_with("bg_"), tract_2021, starts_with("tract_"))
# Unit/area totals (for dasymetric weighting)
bk_bg_units <- pluto %>%
as_tibble() %>%
group_by(block_group_2021) %>%
summarise(bg_res_units = sum(UnitsRes, na.rm = TRUE),
bg_ARA = sum(ARA, na.rm = TRUE))
bk_tract_units <- pluto %>%
as_tibble() %>%
group_by(tract_2021) %>%
summarise(tract_res_units = sum(UnitsRes, na.rm = TRUE),
tract_ARA = sum(ARA, na.rm = TRUE))
pluto <- pluto %>% left_join(bk_bg_units)
pluto <- pluto %>% left_join(bk_tract_units)
# Dasymetric population estimates on lots
pluto <- pluto %>%
ungroup() %>%
mutate(bg_tot_dasym = case_when(UnitsRes == 0 & ResArea != 0 ~
bg_tot_popE * (ARA/bg_ARA),
UnitsRes > 0 ~ bg_tot_popE * (UnitsRes/bg_res_units),
TRUE ~ 0),
tract_tot_dasym = case_when(UnitsRes == 0 & ResArea != 0 ~
tract_tot_popE * (ARA/tract_ARA),
UnitsRes > 0 ~ tract_tot_popE * (UnitsRes/tract_res_units),
TRUE ~ 0))
# Floodplain polygons (100-year), validate and union
floods <- st_read("https://data.cityofnewyork.us/api/geospatial/ezfn-5dsb?method=export&format=GeoJSON")
floods <- st_make_valid(floods)
floods <- floods %>%
mutate(flood_plain = "100-Year") %>%
rename(geometry = x)
floods <- floods %>%
st_transform(crs = st_crs(pluto)) %>%
st_union(by_feature = FALSE) %>%
st_as_sf()