cmande62 commited on
Commit
c47a6e2
·
1 Parent(s): 600dbe3

Initial dashboard deployment

Browse files
README.md CHANGED
@@ -1,11 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
- title: GIS322FinalProject
3
- emoji: 🚀
4
- colorFrom: yellow
5
- colorTo: blue
6
- sdk: docker
7
- pinned: false
8
- short_description: GIS322 Final Project Dashboard in Solara
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  ---
10
 
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
1
+ # Urban Vegetation Dashboard — Maricopa County, AZ
2
+
3
+ Christian Anderson
4
+ GIS 322
5
+ Spring 2026
6
+ Instructor: Debayan Mandal
7
+
8
+ ---
9
+
10
+ ## Description
11
+
12
+ This interactive Solara dashboard explores the relationship between NDVI vegetation index, tree equity scores, and U.S. Census demographics at the block-group level across Maricopa County, Arizona. Users can visualize a bivariate choropleth map comparing greenness to demographic variables (Income, % Minority), toggle a Tree Equity Score overlay, and inspect a summary statistics table and chart of the top 15 block groups most in need of tree canopy investment.
13
+
14
+ ---
15
+
16
+ ## Screenshot
17
+
18
+ ![Dashboard preview](screenshot.png)
19
+
20
+ ---
21
+
22
+ ## Data Sources
23
+
24
+ | Dataset | Source | License |
25
+ |---|---|---|
26
+ | NDVI (vegetation index) | [Google Earth Engine](https://earthengine.google.com) — Landsat/Sentinel composites | Free for research/education |
27
+ | Block-group demographics | [U.S. Census Bureau ACS 5-Year Estimates](https://api.census.gov) | Public domain |
28
+ | Tree Equity Scores | [American Forests — Tree Equity Score](https://treeequityscore.org/map/) | Free download |
29
+ | Block-group boundaries | [U.S. Census TIGER/Line Shapefiles](https://www.census.gov/geographies/mapping-files/time-series/geo/tiger-line-file.html) | Public domain |
30
+
31
  ---
32
+
33
+ ## Environment Setup
34
+
35
+ ### 1. Virtual environment
36
+ ```anaconda prompt
37
+ pip install -r requirements.txt
38
+ ```
39
+
40
+ ### 2. Census API key *(free)*
41
+ Sign up at https://api.census.gov/data/key_signup.html, then either paste your key into `data_pipeline.py` when defining CENSUS_API_KEY
42
+
43
+ ### 3. Google Earth Engine *(free for students)*
44
+ 1. Sign up at https://earthengine.google.com with your Google account.
45
+ 2. Authenticate in anaconda prompt:
46
+ ```
47
+ python -c "import ee; ee.Authenticate()"
48
+ ```
49
+ 3. Create a project at https://console.cloud.google.com (free tier).
50
+ 4. Paste your project ID into `data_pipeline.py` where it says ee.Initialize(project="gis322final").
51
+
52
+ ### 4. Tree Equity Scores *(free)*
53
+ 1. Go to https://treeequityscore.org/map/
54
+ 2. Click **Download Data** → Arizona → Shapefile
55
+ 3. Save to `data/raw/az_tes.shp`
56
+
57
+ ### 5. Build the database
58
+ Run this once (~5 min) to fetch and process all data into `processed_dashboard.db`:
59
+ ```anaconda prompt
60
+ python data_pipeline.py
61
+ ```
62
+
63
+ ---
64
+
65
+ ## Run Instructions
66
+
67
+ ```anaconda prompt
68
+ solara run app.py
69
+ ```
70
+
71
  ---
72
 
73
+ ## Project Files
74
+
75
+ | File | Purpose |
76
+ |---|---|
77
+ | `data_pipeline.py` | Run once to fetch data and build `processed_dashboard.db` |
78
+ | `app.py` | Solara dashboard — launch with `solara run app.py` |
79
+ | `dashboard_helpers.py` | Map and chart builder functions used by `app.py` |
80
+ | `requirements.txt` | Python dependencies |
81
+ | `data/raw/` | Place downloaded raw files here |
Screenshot 2026-05-06 102333.png ADDED

Git LFS Details

  • SHA256: 4e0879f8802fdfb19892a838bd212c78d7362094d13357c90f494c615f7b0813
  • Pointer size: 131 Bytes
  • Size of remote file: 498 kB
app.py ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import duckdb
2
+ import solara
3
+ from dashboard_helpers import (
4
+ build_bivariate_map,
5
+ build_bivariate_legend,
6
+ build_summary_stats,
7
+ build_need_chart,
8
+ build_need_map,
9
+ )
10
+
11
+ # 1. Connect to database
12
+ con = duckdb.connect("processed_dashboard.db", read_only=True)
13
+
14
+ baseline_df = con.sql("SELECT * FROM city_baselines").df()
15
+ baseline_ndvi = float(baseline_df["baseline_ndvi"].iloc[0])
16
+ baseline_income = float(baseline_df["baseline_income"].iloc[0])
17
+ baseline_minority = float(baseline_df["baseline_minority_pct"].iloc[0])
18
+ # 2. Reactive state
19
+
20
+ # X axis:
21
+ x_col = solara.reactive("ndvi_mean")
22
+
23
+ X_OPTIONS = {
24
+ "ndvi_mean": "NDVI (Vegetation)",
25
+ "tree_equity_score": "Tree Equity Score",
26
+ }
27
+
28
+ # Y axis:
29
+ y_col = solara.reactive("median_income")
30
+
31
+ Y_OPTIONS = {
32
+ "median_income": "Median Income",
33
+ "pct_minority": "% Minority",
34
+ }
35
+
36
+ # 3. Components
37
+
38
+ @solara.component
39
+ def BivariateMapCard():
40
+ x_label = X_OPTIONS[x_col.value]
41
+ y_label = Y_OPTIONS[y_col.value]
42
+ m = build_bivariate_map(con, x_col.value, x_label, y_col.value, y_label)
43
+ solara.Markdown(f"#### Bivariate Choropleth — {x_label} × {y_label}")
44
+ solara.display(m)
45
+
46
+ @solara.component
47
+ def LegendCard():
48
+ x_label = X_OPTIONS[x_col.value]
49
+ y_label = Y_OPTIONS[y_col.value]
50
+ fig = build_bivariate_legend(x_label, y_label, y_col.value)
51
+ with solara.Card(title="Legend"):
52
+ solara.FigureMatplotlib(fig, dependencies=[x_col.value, y_col.value])
53
+
54
+ @solara.component
55
+ def SummaryStatsCard():
56
+ x_label = X_OPTIONS[x_col.value]
57
+ y_label = Y_OPTIONS[y_col.value]
58
+ styled = build_summary_stats(con, x_col.value, y_col.value)
59
+ with solara.Card(title=f"Summary Stats — {x_label} × {y_label}"):
60
+ solara.display(styled)
61
+
62
+ @solara.component
63
+ def NeedChartCard():
64
+ fig = build_need_chart(con, y_col.value)
65
+ with solara.Card(title="Top 15 Block Groups by Tree Program Need"):
66
+ solara.FigureMatplotlib(fig, dependencies=[y_col.value])
67
+
68
+ @solara.component
69
+ def NeedMapCard():
70
+ m = build_need_map(con, y_col.value)
71
+ with solara.Card(title="Top 15 Block Groups — Location"):
72
+ solara.display(m)
73
+
74
+ # 4. Page
75
+
76
+ @solara.component
77
+ def Page():
78
+ solara.Title("Urban Vegetation Dashboard — Phoenix, AZ")
79
+
80
+ with solara.Column():
81
+
82
+ # Header
83
+ with solara.Column(align="center"):
84
+ solara.Markdown("# Understanding Urban Vegetation and Socioeconomic Demographics in Maricopa County",
85
+ style={"text-align": "center"})
86
+ solara.Markdown(
87
+ "<div style='text-align:center;color:#8b949e'>"
88
+ "Exploring tree equity across Maricopa County block groups using NDVI, "
89
+ "Tree Equity Scores, and Census demographics.<br>"
90
+ "Data: Google Earth Engine · U.S. Census ACS 5-Year · American Forests"
91
+ "</div>"
92
+ )
93
+
94
+ with solara.GridFixed(columns=2):
95
+ with solara.Card(title="Maricopa County Baselines"):
96
+ with solara.Row():
97
+ solara.Markdown(f"**Avg NDVI:** `{baseline_ndvi:.3f}`")
98
+ solara.Markdown(f"**Median income:** `${baseline_income:,.0f}`")
99
+ solara.Markdown(f"**% Minority:** `{baseline_minority:.1f}%`")
100
+
101
+ with solara.Card(title="Map Controls"):
102
+ with solara.Row():
103
+ with solara.Column():
104
+ solara.Select(
105
+ label="X axis",
106
+ value=x_col,
107
+ values=list(X_OPTIONS.keys()),
108
+ )
109
+ with solara.Column():
110
+ solara.Select(
111
+ label="Y axis",
112
+ value=y_col,
113
+ values=list(Y_OPTIONS.keys()),
114
+ )
115
+
116
+ # Bivariate map (full width)
117
+ BivariateMapCard()
118
+
119
+ # Legend + stats side by side
120
+ with solara.GridFixed(columns=2):
121
+ LegendCard()
122
+ SummaryStatsCard()
123
+
124
+ # Need chart + map full width
125
+ with solara.GridFixed(columns=2):
126
+ NeedChartCard()
127
+ NeedMapCard()
dashboard_helpers.py ADDED
@@ -0,0 +1,292 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ dashboard_helpers.py — Map-building and chart functions used by app.py
3
+ """
4
+
5
+ import numpy as np
6
+ import pandas as pd
7
+ import geopandas as gpd
8
+ import leafmap
9
+ import matplotlib
10
+ import matplotlib.pyplot as plt
11
+ import matplotlib.patches as mpatches
12
+ import matplotlib.colors as mcolors
13
+
14
+
15
+ def _classify_terciles(series):
16
+ out = pd.Series(-1, index=series.index, dtype=int)
17
+ mask = series.notna()
18
+ if mask.sum() < 3:
19
+ return out
20
+ labels = pd.qcut(series[mask], q=3, labels=[0, 1, 2], duplicates="drop")
21
+ out[mask] = labels.astype(int)
22
+ return out
23
+
24
+
25
+ # Bivariate palette
26
+ # X axis = environmental variable (NDVI or TES): color (red=low, yellow=mid, green=high)
27
+ # Y axis = demographic variable: shade (dark=high % community of concern, light=low % community of concern)
28
+
29
+ BIVARIATE_COLORS = [
30
+ "#8B0000",
31
+ "#B8860B",
32
+ "#1B5E20",
33
+ "#CD5C5C",
34
+ "#DAA520",
35
+ "#4CAF50",
36
+ "#F4CCCC",
37
+ "#FFF9C4",
38
+ "#C8E6C9",
39
+ ]
40
+
41
+ CMAP_NAME = "bivariate_9"
42
+
43
+
44
+ # Bivariate choropleth map
45
+
46
+ def build_bivariate_map(con, x_col, x_label, y_col, y_label):
47
+ df = con.sql(f"""
48
+ SELECT GEOID, geometry_wkt, {x_col}, {y_col}
49
+ FROM block_groups
50
+ WHERE total_pop > 0
51
+ AND {x_col} IS NOT NULL
52
+ AND {y_col} IS NOT NULL
53
+ """).df()
54
+
55
+ gdf = gpd.GeoDataFrame(
56
+ df,
57
+ geometry=gpd.GeoSeries.from_wkt(df["geometry_wkt"]),
58
+ crs="EPSG:4269"
59
+ ).drop(columns="geometry_wkt")
60
+
61
+ gdf["x_class"] = _classify_terciles(gdf[x_col])
62
+ # For minority %, invert so that high minority = dark
63
+ if y_col == "pct_minority":
64
+ gdf["y_class"] = _classify_terciles(gdf[y_col]).map({2: 0, 1: 1, 0: 2, -1: -1})
65
+ else:
66
+ gdf["y_class"] = _classify_terciles(gdf[y_col])
67
+
68
+ gdf["bv_class"] = gdf.apply(
69
+ lambda r: int(r["y_class"]) * 3 + int(r["x_class"])
70
+ if r["x_class"] >= 0 and r["y_class"] >= 0 else float("nan"),
71
+ axis=1
72
+ )
73
+
74
+ gdf_valid = gdf[gdf["bv_class"].notna()].copy()
75
+ gdf_valid["bv_class"] = gdf_valid["bv_class"].astype(float)
76
+
77
+ cmap = mcolors.ListedColormap(BIVARIATE_COLORS, name=CMAP_NAME)
78
+ try:
79
+ matplotlib.colormaps.register(cmap, name=CMAP_NAME)
80
+ except Exception:
81
+ pass
82
+
83
+ gdf_valid["hex_color"] = gdf_valid["bv_class"].apply(
84
+ lambda c: BIVARIATE_COLORS[int(c)] if not np.isnan(c) else "#cccccc"
85
+ )
86
+
87
+ # Save to a temp file and load via leafmap
88
+ import tempfile, os
89
+ tmp = tempfile.NamedTemporaryFile(suffix=".geojson", delete=False)
90
+ tmp.close()
91
+ gdf_valid[["geometry", "bv_class", "hex_color", "GEOID"]].to_file(tmp.name, driver="GeoJSON")
92
+
93
+ import folium
94
+ m = folium.Map(location=[33.45, -112.07], zoom_start=10,
95
+ tiles="CartoDB dark_matter")
96
+
97
+ for _, row in gdf_valid.iterrows():
98
+ folium.GeoJson(
99
+ row.geometry.__geo_interface__,
100
+ style_function=lambda f, c=row["hex_color"]: {
101
+ "fillColor": c,
102
+ "fillOpacity": 0.75,
103
+ "color": "#444",
104
+ "weight": 0.4,
105
+ }
106
+ ).add_to(m)
107
+
108
+ return m
109
+
110
+
111
+ # Bivariate legend
112
+
113
+ def build_bivariate_legend(x_label, y_label, y_col):
114
+ palette = [
115
+ ["#8B0000", "#B8860B", "#1B5E20"], # low Y: dark shades
116
+ ["#CD5C5C", "#DAA520", "#4CAF50"], # mid Y: medium shades
117
+ ["#F4CCCC", "#FFF9C4", "#C8E6C9"], # high Y: light shades
118
+ ]
119
+
120
+ fig, ax = plt.subplots(figsize=(3.5, 3.5), facecolor="#1a1a2e")
121
+ ax.set_facecolor("#1a1a2e")
122
+
123
+ for row in range(3):
124
+ for col in range(3):
125
+ rect = mpatches.FancyBboxPatch(
126
+ (col, row), 1, 1,
127
+ boxstyle="square,pad=0",
128
+ facecolor=palette[row][col],
129
+ edgecolor="#333", linewidth=0.5
130
+ )
131
+ ax.add_patch(rect)
132
+
133
+ ax.set_xlim(0, 3)
134
+ ax.set_ylim(0, 3)
135
+
136
+ ax.set_xticks([0.5, 1.5, 2.5])
137
+ ax.set_xticklabels(["Low", "Med", "High"], color="#c9d1d9", fontsize=8)
138
+
139
+ ax.set_yticks([0.5, 1.5, 2.5])
140
+ if y_col == "pct_minority":
141
+ ax.set_yticklabels(["High", "Med", "Low"], color="#c9d1d9", fontsize=8)
142
+ else:
143
+ ax.set_yticklabels(["Low", "Med", "High"], color="#c9d1d9", fontsize=8)
144
+
145
+ ax.set_xlabel(x_label, color="#c9d1d9", fontsize=9, labelpad=8)
146
+ ax.set_ylabel(y_label, color="#c9d1d9", fontsize=9, labelpad=8)
147
+ ax.tick_params(length=0)
148
+ for spine in ax.spines.values():
149
+ spine.set_visible(False)
150
+
151
+ fig.subplots_adjust(left=0.22, bottom=0.18, right=0.95, top=0.95)
152
+ return fig
153
+
154
+ # Summary stats table
155
+
156
+ def build_summary_stats(con, x_col, y_col):
157
+ df = con.sql(f"""
158
+ SELECT {x_col}, {y_col}, tree_equity_score, ndvi_mean, total_pop
159
+ FROM block_groups
160
+ WHERE total_pop > 0
161
+ AND {x_col} IS NOT NULL
162
+ AND {y_col} IS NOT NULL
163
+ """).df()
164
+
165
+ df["x_tercile"] = _classify_terciles(df[x_col]).map(
166
+ {-1: "No data", 0: f"Low", 1: f"Mid", 2: f"High"}
167
+ )
168
+
169
+ summary = (
170
+ df.groupby("x_tercile")
171
+ .agg(
172
+ Block_Groups=(x_col, "count"),
173
+ **{f"Avg_{x_col}": (x_col, lambda x: round(x.mean(), 2))},
174
+ **{f"Avg_{y_col}": (y_col, lambda x: round(x.mean(), 1))},
175
+ Avg_TES=("tree_equity_score", lambda x: round(x.mean(), 1) if x.notna().any() else np.nan),
176
+ Avg_NDVI=("ndvi_mean", lambda x: round(x.mean(), 3) if x.notna().any() else np.nan),
177
+ )
178
+ .reindex(["Low", "Mid", "High"])
179
+ .reset_index()
180
+ .rename(columns={"x_tercile": "Group"})
181
+ )
182
+
183
+ styled = summary.style.background_gradient(
184
+ cmap="RdYlGn", subset=[f"Avg_{x_col}"]
185
+ ).hide(axis="index")
186
+
187
+ return styled
188
+
189
+
190
+ # Tree-need bar chart
191
+
192
+ def build_need_chart(con, y_col):
193
+ df = con.sql(f"""
194
+ SELECT GEOID, ndvi_mean, tree_equity_score, {y_col}
195
+ FROM block_groups
196
+ WHERE ndvi_mean IS NOT NULL AND tree_equity_score IS NOT NULL
197
+ AND {y_col} IS NOT NULL AND total_pop > 0
198
+ """).df()
199
+
200
+ if df.empty:
201
+ fig, ax = plt.subplots(facecolor="#161b22")
202
+ ax.text(0.5, 0.5, "No data yet", ha="center", va="center", color="#8b949e")
203
+ return fig
204
+
205
+ def minmax(s):
206
+ mn, mx = s.min(), s.max()
207
+ return (s - mn) / (mx - mn) if mx > mn else s * 0
208
+
209
+ df["ndvi_norm"] = minmax(df["ndvi_mean"])
210
+ df["tes_norm"] = minmax(df["tree_equity_score"])
211
+ df["need"] = (1 - df["ndvi_norm"]) * 0.5 + (1 - df["tes_norm"]) * 0.5
212
+
213
+ if y_col == "pct_minority":
214
+ df["shade_norm"] = minmax(df[y_col]) # high = darker
215
+ else:
216
+ df["shade_norm"] = 1 - minmax(df[y_col]) # low income = darker
217
+
218
+ top15 = df.nlargest(15, "need").reset_index(drop=True)
219
+ labels = [str(g)[-6:] for g in top15["GEOID"]]
220
+ x = np.arange(len(top15))
221
+
222
+ fig, ax = plt.subplots(figsize=(10, 3.2), facecolor="#161b22")
223
+ ax.set_facecolor("#161b22")
224
+
225
+ for i, row in top15.iterrows():
226
+ alpha = 0.3 + 0.7 * row["shade_norm"]
227
+ ax.bar(i, row["need"], color="#e05c5c", alpha=alpha, width=0.6)
228
+
229
+ # Shade legend
230
+ y_label = "% Minority" if y_col == "pct_minority" else "Median Income"
231
+ from matplotlib.patches import Patch
232
+ legend_elements = [
233
+ Patch(facecolor="#e05c5c", alpha=1.0,
234
+ label=f"High concern ({('high' if y_col == 'pct_minority' else 'low')} {y_label})"),
235
+ Patch(facecolor="#e05c5c", alpha=0.3,
236
+ label=f"Lower concern ({('low' if y_col == 'pct_minority' else 'high')} {y_label})"),
237
+ ]
238
+
239
+ ax.set_xticks(x)
240
+ ax.set_xticklabels(labels, rotation=45, ha="right", color="#8b949e", fontsize=8)
241
+ ax.set_ylabel("Tree Need Score", color="#8b949e", fontsize=8)
242
+ ax.set_title("Top 15 Block Groups by Tree Program Need (GEOID suffix)",
243
+ color="#c9d1d9", fontsize=9, pad=6)
244
+ ax.tick_params(colors="#8b949e", labelsize=8)
245
+ for sp in ax.spines.values():
246
+ sp.set_color("#30363d")
247
+ ax.legend(handles=legend_elements, frameon=False,
248
+ labelcolor="#8b949e", fontsize=8, loc="upper right")
249
+ fig.tight_layout(pad=0.5)
250
+ return fig
251
+
252
+ def build_need_map(con, y_col):
253
+ df = con.sql(f"""
254
+ SELECT GEOID, geometry_wkt, ndvi_mean, tree_equity_score, {y_col}
255
+ FROM block_groups
256
+ WHERE ndvi_mean IS NOT NULL AND tree_equity_score IS NOT NULL
257
+ AND {y_col} IS NOT NULL AND total_pop > 0
258
+ """).df()
259
+
260
+ def minmax(s):
261
+ mn, mx = s.min(), s.max()
262
+ return (s - mn) / (mx - mn) if mx > mn else s * 0
263
+
264
+ df["ndvi_norm"] = minmax(df["ndvi_mean"])
265
+ df["tes_norm"] = minmax(df["tree_equity_score"])
266
+ df["need"] = (1 - df["ndvi_norm"]) * 0.5 + (1 - df["tes_norm"]) * 0.5
267
+
268
+ top15_geoids = set(df.nlargest(15, "need")["GEOID"].tolist())
269
+
270
+ gdf = gpd.GeoDataFrame(
271
+ df,
272
+ geometry=gpd.GeoSeries.from_wkt(df["geometry_wkt"]),
273
+ crs="EPSG:4269"
274
+ ).drop(columns="geometry_wkt")
275
+
276
+ import folium
277
+ m = folium.Map(location=[33.45, -112.07], zoom_start=9,
278
+ tiles="CartoDB dark_matter")
279
+
280
+ for _, row in gdf.iterrows():
281
+ is_top15 = row["GEOID"] in top15_geoids
282
+ folium.GeoJson(
283
+ row.geometry.__geo_interface__,
284
+ style_function=lambda f, top=is_top15: {
285
+ "fillColor": "#e05c5c" if top else "#444444",
286
+ "fillOpacity": 0.85 if top else 0.3,
287
+ "color": "#e05c5c" if top else "#333333",
288
+ "weight": 1.5 if top else 0.3,
289
+ }
290
+ ).add_to(m)
291
+
292
+ return m
data/raw/az_tes.cpg ADDED
@@ -0,0 +1 @@
 
 
1
+ ISO-8859-1
data/raw/az_tes.dbf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5e8488214fc81dfcde13c3847625b9442f868b817511fd55912ff29558a42cd9
3
+ size 7506815
data/raw/az_tes.prj ADDED
@@ -0,0 +1 @@
 
 
1
+ GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
data/raw/az_tes.shp ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:71404d595ba3c309d7623bc471e1007f0e1ef1f9ace75f6f91ea05548e8f3e9e
3
+ size 7430980
data/raw/az_tes.shx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f24fea442901a860a4e40a76ba3ee6f692f167df19779fbf38e68a1184313225
3
+ size 34508
data/raw/data_dictionary.txt ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GEOID: the U.S. Census blockgroup id
2
+ place: the city, town, village or unincorporated community the block group is mostly within
3
+ state: the state the block group is in
4
+ state_abbr: the state abbreviation
5
+ county: the county the block group is in
6
+ ua_name: the urban area the block group is located in
7
+ ua_pop: the sum of the clipped block group population in the urban area
8
+ congressio: the congressional district of the block group
9
+ cbg_pop: the total population of the clipped block group (the part of the block group within the urban area) from the 2020 Census
10
+ acs_pop: the total population of the entire block group (includes non-urban population) from the ACS Community Survey 2017-2021 Estimates
11
+ land_area: the land area of the blockgroup in square kilometers (omits water area)
12
+ biome: the biome of the blockgroup
13
+ cnpysource: the source of the tree canopy data of the block group
14
+ tc_goal: the tree canopy goal of the block group [range: 0-1]
15
+ treecanopy: the tree canopy percentage of the block group [range: 0-1]
16
+ tc_gap: the tree canopy gap of the block group (goal minus canopy) [range: 0-1]
17
+ priority_i: the priority index of the block group [range: 0-1]
18
+ pctpoc: the percent of people of color inside the block group [range: 0-1]
19
+ pctpocnorm: the normalized percent people of color inside the block group [range: 0-1]
20
+ pctpov: the percent of people in poverty inside the block group [range: 0-1]
21
+ pctpovnorm: the normalized percent people in poverty inside the block group [range: 0-1]
22
+ unemplrate: the unemployment rate inside of the block group [range: 0-1]
23
+ unemplnorm: the normalized unemployment rate inside the block group [range: 0-1]
24
+ dep_ratio: the dependency ratio (childrens + seniors / 18-64 adults)
25
+ depratnorm: the normalized dependency ratio inside the block group [range: 0-1]
26
+ dep_perc: the percent of the population that are children and seniors [range: 0-1]
27
+ linguistic: the percent of households where no person age 14+ speaks only English, or no person age 14+ who speaks a language other than English speaks English "very well." inside the block group [range: 0-1]
28
+ lingnorm: the normalized percent of linguistic isolation present in the block group [range: 0-1]
29
+ healthnorm: the normalized health burden index of the block group [range: 0-1]
30
+ temp_diff: the difference between the average block group heat extremity with the urban area average to measure variance in heat severity across an urban area
31
+ temp_norm: the normalized temp_diff value of the block group [range: 0-1]
32
+ tes: the Tree Equity Score of the block group [range: 0-100]
33
+ tesctyscor: the composite score of the locality (ex: incorporated place, census designated place) aggregated from all block group Tree Equity Scores within the locality [range: 0-100, none if not in a locality]
34
+ holc_grade: Home Owner's Loan Corporation grades from Mapping Inequality, from �A,� the highest grade treated as low risk for mortgage lenders, to �D� the lowest grade deemed "hazardous."
35
+ child_perc: the percent of children inside of the block group [range: 0-1]
36
+ seniorperc: the percent of seniors inside of the block group [range: 0-1]
37
+ ej_disadva: communities determined to be "disadvantaged" by the US Environmental Protection Agency under the Inflation Reduction Act
38
+ rank: the rank of the Tree Equity Score compared to the other block groups in the municipalitity
39
+ rankgrpsz: the number of block groups in the municipality which are ranked against one another
40
+ _bld1200: percent shade cast by buildings at noon
41
+ _veg1200: percent shade cast by trees and other non-building features at noon
42
+ _bld1500: percent shade cast by buildings at 3 p.m.
43
+ _veg1500: percent shade cast by trees and other non-building features at 3 p.m.
44
+ _bld1800: percent shade cast by buildings at 6 p.m.
45
+ _veg1800: percent shade cast by trees and other non-building features sat 6 p.m.
46
+ _tot1200: total percent shade cast at noon
47
+ _tot1500: total percent shade cast at 3 p.m.
48
+ _tot1800: total percent shade cast at 6 p.m.
49
+ geometry: the geometry of the block group (for geojson and shapefile)
50
+
51
+ Questions about methodology or data sources? Visit https://www.treeequityscore.org/methodology/ for more details.
52
+
53
+
54
+
55
+
56
+
data/raw/tiger_maricopa/tl_2022_04_bg.cpg ADDED
@@ -0,0 +1 @@
 
 
1
+ UTF-8
data/raw/tiger_maricopa/tl_2022_04_bg.dbf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:043f0c076c88a46cf6d0d6312767e051e0e1221dafe89de3db04b8852a0d5e38
3
+ size 453853
data/raw/tiger_maricopa/tl_2022_04_bg.prj ADDED
@@ -0,0 +1 @@
 
 
1
+ GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
data/raw/tiger_maricopa/tl_2022_04_bg.shp ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fce7d8811a46f3ac379c3f9fdb00f52e3497ebaf6e35b99a1af440b5da8baf25
3
+ size 21182396
data/raw/tiger_maricopa/tl_2022_04_bg.shp.ea.iso.xml ADDED
@@ -0,0 +1,406 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <gfc:FC_FeatureCatalogue xmlns:xlink="http://www.w3.org/1999/xlink"
3
+ xmlns:gmd="http://www.isotc211.org/2005/gmd"
4
+ xmlns:gco="http://www.isotc211.org/2005/gco"
5
+ xmlns:gml="http://www.opengis.net/gml/3.2"
6
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
7
+ xmlns:gmi="http://www.isotc211.org/2005/gmi"
8
+ xmlns:srv="http://www.isotc211.org/2005/srv"
9
+ xmlns:gmx="http://www.isotc211.org/2005/gmx"
10
+ xmlns:gfc="http://www.isotc211.org/2005/gfc">
11
+ <gmx:name>
12
+ <gco:CharacterString>Feature Catalog for the Current Block Groups TIGER/Line Shapefiles</gco:CharacterString>
13
+ </gmx:name>
14
+ <gmx:scope>
15
+ <gco:CharacterString>Block Groups</gco:CharacterString>
16
+ </gmx:scope>
17
+ <gmx:versionNumber>
18
+ <gco:CharacterString>2022</gco:CharacterString>
19
+ </gmx:versionNumber>
20
+ <gmx:versionDate>
21
+ <gco:Date>2022-09-29</gco:Date>
22
+ </gmx:versionDate>
23
+ <gmx:language>
24
+ <gco:CharacterString>eng; USA</gco:CharacterString>
25
+ </gmx:language>
26
+ <gmx:characterSet>
27
+ <gmd:MD_CharacterSetCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode"
28
+ codeListValue="utf8">utf8</gmd:MD_CharacterSetCode>
29
+ </gmx:characterSet>
30
+ <gfc:producer>
31
+ <gmd:CI_ResponsibleParty>
32
+ <gmd:organisationName>
33
+ <gco:CharacterString>U.S. Department of Commerce, U.S. Census Bureau, Geography Division, Spatial Data Collection and Products Branch</gco:CharacterString>
34
+ </gmd:organisationName>
35
+ <gmd:contactInfo>
36
+ <gmd:CI_Contact>
37
+ <gmd:phone>
38
+ <gmd:CI_Telephone>
39
+ <gmd:voice>
40
+ <gco:CharacterString>301-763-1128</gco:CharacterString>
41
+ </gmd:voice>
42
+ <gmd:facsimile>
43
+ <gco:CharacterString>301-763-4710</gco:CharacterString>
44
+ </gmd:facsimile>
45
+ </gmd:CI_Telephone>
46
+ </gmd:phone>
47
+ <gmd:address>
48
+ <gmd:CI_Address>
49
+ <gmd:deliveryPoint>
50
+ <gco:CharacterString>4600 Silver Hill Road, Stop 7400</gco:CharacterString>
51
+ </gmd:deliveryPoint>
52
+ <gmd:city>
53
+ <gco:CharacterString>Washington</gco:CharacterString>
54
+ </gmd:city>
55
+ <gmd:administrativeArea>
56
+ <gco:CharacterString>DC</gco:CharacterString>
57
+ </gmd:administrativeArea>
58
+ <gmd:postalCode>
59
+ <gco:CharacterString>20233-7400</gco:CharacterString>
60
+ </gmd:postalCode>
61
+ <gmd:country>
62
+ <gco:CharacterString>United States</gco:CharacterString>
63
+ </gmd:country>
64
+ <gmd:electronicMailAddress>
65
+ <gco:CharacterString>geo.geography@census.gov</gco:CharacterString>
66
+ </gmd:electronicMailAddress>
67
+ </gmd:CI_Address>
68
+ </gmd:address>
69
+ </gmd:CI_Contact>
70
+ </gmd:contactInfo>
71
+ <gmd:role>
72
+ <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode"
73
+ codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
74
+ </gmd:role>
75
+ </gmd:CI_ResponsibleParty>
76
+ </gfc:producer>
77
+ <gfc:featureType>
78
+ <gfc:FC_FeatureType>
79
+ <gfc:typeName>
80
+ <gco:LocalName>BG.shp</gco:LocalName>
81
+ </gfc:typeName>
82
+ <gfc:definition>
83
+ <gco:CharacterString>Current Block Group State-based</gco:CharacterString>
84
+ </gfc:definition>
85
+ <gfc:isAbstract>
86
+ <gco:Boolean>false</gco:Boolean>
87
+ </gfc:isAbstract>
88
+ <gfc:featureCatalogue uuidref="tl_2022_bg.shp.ea.iso.xml"/>
89
+ <gfc:carrierOfCharacteristics>
90
+ <gfc:FC_FeatureAttribute>
91
+ <gfc:memberName>
92
+ <gco:LocalName>STATEFP</gco:LocalName>
93
+ </gfc:memberName>
94
+ <gfc:definition>
95
+ <gco:CharacterString>Current state Federal Information Processing Series (FIPS) code</gco:CharacterString>
96
+ </gfc:definition>
97
+ <gfc:cardinality gco:nilReason="unknown"/>
98
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
99
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
100
+ <gfc:listedValue>
101
+ <gfc:FC_ListedValue>
102
+ <gfc:label>
103
+ <gco:CharacterString>National Standard Codes (ANSI INCITS 38-2009), Federal Information Processing Series (FIPS) - States/State Equivalents</gco:CharacterString>
104
+ </gfc:label>
105
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
106
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
107
+ </gfc:FC_ListedValue>
108
+ </gfc:listedValue>
109
+ </gfc:FC_FeatureAttribute>
110
+ </gfc:carrierOfCharacteristics>
111
+ <gfc:carrierOfCharacteristics>
112
+ <gfc:FC_FeatureAttribute>
113
+ <gfc:memberName>
114
+ <gco:LocalName>COUNTYFP</gco:LocalName>
115
+ </gfc:memberName>
116
+ <gfc:definition>
117
+ <gco:CharacterString>Current county Federal Information Processing Series (FIPS) code</gco:CharacterString>
118
+ </gfc:definition>
119
+ <gfc:cardinality gco:nilReason="unknown"/>
120
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
121
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
122
+ <gfc:listedValue>
123
+ <gfc:FC_ListedValue>
124
+ <gfc:label>
125
+ <gco:CharacterString>National Standard Codes (ANSI INCITS 31-2009), Federal Information Processing Series (FIPS) - Counties/County Equivalents</gco:CharacterString>
126
+ </gfc:label>
127
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
128
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
129
+ </gfc:FC_ListedValue>
130
+ </gfc:listedValue>
131
+ </gfc:FC_FeatureAttribute>
132
+ </gfc:carrierOfCharacteristics>
133
+ <gfc:carrierOfCharacteristics>
134
+ <gfc:FC_FeatureAttribute>
135
+ <gfc:memberName>
136
+ <gco:LocalName>TRACTCE</gco:LocalName>
137
+ </gfc:memberName>
138
+ <gfc:definition>
139
+ <gco:CharacterString>Current census tract code</gco:CharacterString>
140
+ </gfc:definition>
141
+ <gfc:cardinality gco:nilReason="unknown"/>
142
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
143
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
144
+ <gfc:listedValue>
145
+ <gfc:FC_ListedValue>
146
+ <gfc:label>
147
+ <gco:CharacterString>000100 to 998999</gco:CharacterString>
148
+ </gfc:label>
149
+ <gfc:definition>
150
+ <gco:CharacterString>Census tract number</gco:CharacterString>
151
+ </gfc:definition>
152
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
153
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
154
+ </gfc:FC_ListedValue>
155
+ </gfc:listedValue>
156
+ <gfc:listedValue>
157
+ <gfc:FC_ListedValue>
158
+ <gfc:label>
159
+ <gco:CharacterString>990000 to 990099</gco:CharacterString>
160
+ </gfc:label>
161
+ <gfc:definition>
162
+ <gco:CharacterString>Water tract (2010 and continuing)</gco:CharacterString>
163
+ </gfc:definition>
164
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
165
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
166
+ </gfc:FC_ListedValue>
167
+ </gfc:listedValue>
168
+ <gfc:listedValue>
169
+ <gfc:FC_ListedValue>
170
+ <gfc:label>
171
+ <gco:CharacterString>990100 to 998999</gco:CharacterString>
172
+ </gfc:label>
173
+ <gfc:definition>
174
+ <gco:CharacterString>Census tract number</gco:CharacterString>
175
+ </gfc:definition>
176
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
177
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
178
+ </gfc:FC_ListedValue>
179
+ </gfc:listedValue>
180
+ </gfc:FC_FeatureAttribute>
181
+ </gfc:carrierOfCharacteristics>
182
+ <gfc:carrierOfCharacteristics>
183
+ <gfc:FC_FeatureAttribute>
184
+ <gfc:memberName>
185
+ <gco:LocalName>BLKGRPCE</gco:LocalName>
186
+ </gfc:memberName>
187
+ <gfc:definition>
188
+ <gco:CharacterString>Current block group number. A block group number of 0 represents a water block group.</gco:CharacterString>
189
+ </gfc:definition>
190
+ <gfc:cardinality>
191
+ <gco:Multiplicity>
192
+ <gco:range>
193
+ <gco:MultiplicityRange>
194
+ <gco:lower>
195
+ <gco:Integer>0</gco:Integer>
196
+ </gco:lower>
197
+ <gco:upper>
198
+ <gco:UnlimitedInteger>9</gco:UnlimitedInteger>
199
+ </gco:upper>
200
+ </gco:MultiplicityRange>
201
+ </gco:range>
202
+ </gco:Multiplicity>
203
+ </gfc:cardinality>
204
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
205
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
206
+ </gfc:FC_FeatureAttribute>
207
+ </gfc:carrierOfCharacteristics>
208
+ <gfc:carrierOfCharacteristics>
209
+ <gfc:FC_FeatureAttribute>
210
+ <gfc:memberName>
211
+ <gco:LocalName>GEOID</gco:LocalName>
212
+ </gfc:memberName>
213
+ <gfc:definition>
214
+ <gco:CharacterString>Census block group identifier; a concatenation of the current state Federal Information Processing Series (FIPS) code, county FIPS code, census tract code, and block group number</gco:CharacterString>
215
+ </gfc:definition>
216
+ <gfc:cardinality gco:nilReason="unknown"/>
217
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
218
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
219
+ <gfc:listedValue>
220
+ <gfc:FC_ListedValue>
221
+ <gfc:label gco:nilReason="inapplicable"/>
222
+ <gfc:definition>
223
+ <gco:CharacterString>The GEOID attribute is a concatenation of the state FIPS code, followed by the county FIPS code, followed by the census tract code, followed by the block group number. No spaces are allowed between the two codes. The State FIPS code is taken from "National Standard Codes (ANSI INCITS 38-2009), Federal Information Processing Series (FIPS) - States". The county FIPS code is taken from "National Standard Codes (ANSI INCITS 31-2009), Federal Information Processing Series (FIPS) - Counties/County Equivalents". The census tract code is taken from the "TRACTCE" attribute. The block group number is taken from the "BLKGRPCE" attribute.</gco:CharacterString>
224
+ </gfc:definition>
225
+ </gfc:FC_ListedValue>
226
+ </gfc:listedValue>
227
+ </gfc:FC_FeatureAttribute>
228
+ </gfc:carrierOfCharacteristics>
229
+ <gfc:carrierOfCharacteristics>
230
+ <gfc:FC_FeatureAttribute>
231
+ <gfc:memberName>
232
+ <gco:LocalName>NAMELSAD</gco:LocalName>
233
+ </gfc:memberName>
234
+ <gfc:definition>
235
+ <gco:CharacterString>Current translated legal/statistical area description and the block group number</gco:CharacterString>
236
+ </gfc:definition>
237
+ <gfc:cardinality gco:nilReason="unknown"/>
238
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
239
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
240
+ <gfc:listedValue>
241
+ <gfc:FC_ListedValue>
242
+ <gfc:label gco:nilReason="inapplicable"/>
243
+ <gfc:definition>
244
+ <gco:CharacterString>Refer to the block group number that appears in BLKGRPCE and translated legal/statistical area description code BG, Block Group</gco:CharacterString>
245
+ </gfc:definition>
246
+ </gfc:FC_ListedValue>
247
+ </gfc:listedValue>
248
+ </gfc:FC_FeatureAttribute>
249
+ </gfc:carrierOfCharacteristics>
250
+ <gfc:carrierOfCharacteristics>
251
+ <gfc:FC_FeatureAttribute>
252
+ <gfc:memberName>
253
+ <gco:LocalName>MTFCC</gco:LocalName>
254
+ </gfc:memberName>
255
+ <gfc:definition>
256
+ <gco:CharacterString>MAF/TIGER feature class code</gco:CharacterString>
257
+ </gfc:definition>
258
+ <gfc:cardinality gco:nilReason="unknown"/>
259
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
260
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
261
+ <gfc:listedValue>
262
+ <gfc:FC_ListedValue>
263
+ <gfc:label>
264
+ <gco:CharacterString>G5030</gco:CharacterString>
265
+ </gfc:label>
266
+ <gfc:definition>
267
+ <gco:CharacterString>Block Group</gco:CharacterString>
268
+ </gfc:definition>
269
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
270
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
271
+ </gfc:FC_ListedValue>
272
+ </gfc:listedValue>
273
+ </gfc:FC_FeatureAttribute>
274
+ </gfc:carrierOfCharacteristics>
275
+ <gfc:carrierOfCharacteristics>
276
+ <gfc:FC_FeatureAttribute>
277
+ <gfc:memberName>
278
+ <gco:LocalName>FUNCSTAT</gco:LocalName>
279
+ </gfc:memberName>
280
+ <gfc:definition>
281
+ <gco:CharacterString>Current functional status</gco:CharacterString>
282
+ </gfc:definition>
283
+ <gfc:cardinality gco:nilReason="unknown"/>
284
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
285
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
286
+ <gfc:listedValue>
287
+ <gfc:FC_ListedValue>
288
+ <gfc:label>
289
+ <gco:CharacterString>S</gco:CharacterString>
290
+ </gfc:label>
291
+ <gfc:definition>
292
+ <gco:CharacterString>Statistical entity</gco:CharacterString>
293
+ </gfc:definition>
294
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
295
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
296
+ </gfc:FC_ListedValue>
297
+ </gfc:listedValue>
298
+ </gfc:FC_FeatureAttribute>
299
+ </gfc:carrierOfCharacteristics>
300
+ <gfc:carrierOfCharacteristics>
301
+ <gfc:FC_FeatureAttribute>
302
+ <gfc:memberName>
303
+ <gco:LocalName>ALAND</gco:LocalName>
304
+ </gfc:memberName>
305
+ <gfc:definition>
306
+ <gco:CharacterString>Current land area (square meters)</gco:CharacterString>
307
+ </gfc:definition>
308
+ <gfc:cardinality>
309
+ <gco:Multiplicity>
310
+ <gco:range>
311
+ <gco:MultiplicityRange>
312
+ <gco:lower>
313
+ <gco:Integer>0</gco:Integer>
314
+ </gco:lower>
315
+ <gco:upper>
316
+ <gco:UnlimitedInteger>9,999,999,999,999</gco:UnlimitedInteger>
317
+ </gco:upper>
318
+ </gco:MultiplicityRange>
319
+ </gco:range>
320
+ </gco:Multiplicity>
321
+ </gfc:cardinality>
322
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
323
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
324
+ </gfc:FC_FeatureAttribute>
325
+ </gfc:carrierOfCharacteristics>
326
+ <gfc:carrierOfCharacteristics>
327
+ <gfc:FC_FeatureAttribute>
328
+ <gfc:memberName>
329
+ <gco:LocalName>AWATER</gco:LocalName>
330
+ </gfc:memberName>
331
+ <gfc:definition>
332
+ <gco:CharacterString>Current water area (square meters)</gco:CharacterString>
333
+ </gfc:definition>
334
+ <gfc:cardinality>
335
+ <gco:Multiplicity>
336
+ <gco:range>
337
+ <gco:MultiplicityRange>
338
+ <gco:lower>
339
+ <gco:Integer>0</gco:Integer>
340
+ </gco:lower>
341
+ <gco:upper>
342
+ <gco:UnlimitedInteger>9,999,999,999,999</gco:UnlimitedInteger>
343
+ </gco:upper>
344
+ </gco:MultiplicityRange>
345
+ </gco:range>
346
+ </gco:Multiplicity>
347
+ </gfc:cardinality>
348
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
349
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
350
+ </gfc:FC_FeatureAttribute>
351
+ </gfc:carrierOfCharacteristics>
352
+ <gfc:carrierOfCharacteristics>
353
+ <gfc:FC_FeatureAttribute>
354
+ <gfc:memberName>
355
+ <gco:LocalName>INTPTLAT</gco:LocalName>
356
+ </gfc:memberName>
357
+ <gfc:definition>
358
+ <gco:CharacterString>Current latitude of the internal point</gco:CharacterString>
359
+ </gfc:definition>
360
+ <gfc:cardinality>
361
+ <gco:Multiplicity>
362
+ <gco:range>
363
+ <gco:MultiplicityRange>
364
+ <gco:lower>
365
+ <gco:Integer>-90</gco:Integer>
366
+ </gco:lower>
367
+ <gco:upper>
368
+ <gco:UnlimitedInteger>90</gco:UnlimitedInteger>
369
+ </gco:upper>
370
+ </gco:MultiplicityRange>
371
+ </gco:range>
372
+ </gco:Multiplicity>
373
+ </gfc:cardinality>
374
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
375
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
376
+ </gfc:FC_FeatureAttribute>
377
+ </gfc:carrierOfCharacteristics>
378
+ <gfc:carrierOfCharacteristics>
379
+ <gfc:FC_FeatureAttribute>
380
+ <gfc:memberName>
381
+ <gco:LocalName>INTPTLON</gco:LocalName>
382
+ </gfc:memberName>
383
+ <gfc:definition>
384
+ <gco:CharacterString>Current longitude of the internal point</gco:CharacterString>
385
+ </gfc:definition>
386
+ <gfc:cardinality>
387
+ <gco:Multiplicity>
388
+ <gco:range>
389
+ <gco:MultiplicityRange>
390
+ <gco:lower>
391
+ <gco:Integer>-180</gco:Integer>
392
+ </gco:lower>
393
+ <gco:upper>
394
+ <gco:UnlimitedInteger>180</gco:UnlimitedInteger>
395
+ </gco:upper>
396
+ </gco:MultiplicityRange>
397
+ </gco:range>
398
+ </gco:Multiplicity>
399
+ </gfc:cardinality>
400
+ <gfc:definitionReference xlink:title="U.S Census Bureau"
401
+ xlink:href="http://www.ngdc.noaa.gov/docucomp/eb139e38-ee29-4d59-b157-5e874d4420c4"/>
402
+ </gfc:FC_FeatureAttribute>
403
+ </gfc:carrierOfCharacteristics>
404
+ </gfc:FC_FeatureType>
405
+ </gfc:featureType>
406
+ </gfc:FC_FeatureCatalogue>
data/raw/tiger_maricopa/tl_2022_04_bg.shp.iso.xml ADDED
@@ -0,0 +1,852 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <gmi:MI_Metadata xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xmlns:gmd="http://www.isotc211.org/2005/gmd"
4
+ xmlns:gco="http://www.isotc211.org/2005/gco"
5
+ xmlns:gml="http://www.opengis.net/gml/3.2"
6
+ xmlns:gmi="http://www.isotc211.org/2005/gmi"
7
+ xmlns:xlink="http://www.w3.org/1999/xlink"
8
+ xmlns:srv="http://www.isotc211.org/2005/srv"
9
+ xsi:schemaLocation="http://www.isotc211.org/2005/gmi https://data.noaa.gov/resources/iso19139/schema.xsd">
10
+ <gmd:fileIdentifier>
11
+ <gco:CharacterString>tl_2022_04_bg.shp.iso.xml</gco:CharacterString>
12
+ </gmd:fileIdentifier>
13
+ <gmd:language>
14
+ <gco:CharacterString>eng; USA</gco:CharacterString>
15
+ </gmd:language>
16
+ <gmd:characterSet>
17
+ <gmd:MD_CharacterSetCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode"
18
+ codeListValue="utf8">utf8</gmd:MD_CharacterSetCode>
19
+ </gmd:characterSet>
20
+ <gmd:parentIdentifier>
21
+ <gco:CharacterString>series_tl_2022_bg.shp.iso.xml</gco:CharacterString>
22
+ </gmd:parentIdentifier>
23
+ <gmd:hierarchyLevel>
24
+ <gmd:MD_ScopeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode"
25
+ codeListValue="dataset">dataset</gmd:MD_ScopeCode>
26
+ </gmd:hierarchyLevel>
27
+ <gmd:contact>
28
+ <gmd:CI_ResponsibleParty>
29
+ <gmd:organisationName>
30
+ <gco:CharacterString>U.S. Department of Commerce, U.S. Census Bureau, Geography Division, Spatial Data Collection and Products Branch</gco:CharacterString>
31
+ </gmd:organisationName>
32
+ <gmd:contactInfo>
33
+ <gmd:CI_Contact>
34
+ <gmd:phone>
35
+ <gmd:CI_Telephone>
36
+ <gmd:voice>
37
+ <gco:CharacterString>301-763-1128</gco:CharacterString>
38
+ </gmd:voice>
39
+ <gmd:facsimile>
40
+ <gco:CharacterString>301-763-4710</gco:CharacterString>
41
+ </gmd:facsimile>
42
+ </gmd:CI_Telephone>
43
+ </gmd:phone>
44
+ <gmd:address>
45
+ <gmd:CI_Address>
46
+ <gmd:deliveryPoint>
47
+ <gco:CharacterString>4600 Silver Hill Road, Stop 7400</gco:CharacterString>
48
+ </gmd:deliveryPoint>
49
+ <gmd:city>
50
+ <gco:CharacterString>Washington</gco:CharacterString>
51
+ </gmd:city>
52
+ <gmd:administrativeArea>
53
+ <gco:CharacterString>DC</gco:CharacterString>
54
+ </gmd:administrativeArea>
55
+ <gmd:postalCode>
56
+ <gco:CharacterString>20233-7400</gco:CharacterString>
57
+ </gmd:postalCode>
58
+ <gmd:country>
59
+ <gco:CharacterString>United States</gco:CharacterString>
60
+ </gmd:country>
61
+ <gmd:electronicMailAddress>
62
+ <gco:CharacterString>geo.geography@census.gov</gco:CharacterString>
63
+ </gmd:electronicMailAddress>
64
+ </gmd:CI_Address>
65
+ </gmd:address>
66
+ </gmd:CI_Contact>
67
+ </gmd:contactInfo>
68
+ <gmd:role>
69
+ <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode"
70
+ codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
71
+ </gmd:role>
72
+ </gmd:CI_ResponsibleParty>
73
+ </gmd:contact>
74
+ <gmd:dateStamp>
75
+ <gco:Date>2022-09-29</gco:Date>
76
+ </gmd:dateStamp>
77
+ <gmd:metadataStandardName>
78
+ <gco:CharacterString>ISO 19115-2 Geographic Information - Metadata - Part 2: Extensions for Imagery and Gridded Data</gco:CharacterString>
79
+ </gmd:metadataStandardName>
80
+ <gmd:metadataStandardVersion>
81
+ <gco:CharacterString>ISO 19115-2:2009(E)</gco:CharacterString>
82
+ </gmd:metadataStandardVersion>
83
+ <gmd:dataSetURI>
84
+ <gco:CharacterString>https://meta.geo.census.gov/data/existing/decennial/GEO/GPMB/TIGERline/Current_19115/tl_2022_04_bg.shp.iso.xml</gco:CharacterString>
85
+ </gmd:dataSetURI>
86
+ <gmd:spatialRepresentationInfo>
87
+ <gmd:MD_VectorSpatialRepresentation>
88
+ <gmd:geometricObjects>
89
+ <gmd:MD_GeometricObjects>
90
+ <gmd:geometricObjectType>
91
+ <gmd:MD_GeometricObjectTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_GeometricObjectTypeCode"
92
+ codeListValue="complex">complex</gmd:MD_GeometricObjectTypeCode>
93
+ </gmd:geometricObjectType>
94
+ <gmd:geometricObjectCount>
95
+ <gco:Integer>4773</gco:Integer>
96
+ </gmd:geometricObjectCount>
97
+ </gmd:MD_GeometricObjects>
98
+ </gmd:geometricObjects>
99
+ </gmd:MD_VectorSpatialRepresentation>
100
+ </gmd:spatialRepresentationInfo>
101
+ <gmd:referenceSystemInfo>
102
+ <gmd:MD_ReferenceSystem uuid="65f8b220-95ed-11e0-aa80-0800200c9a66">
103
+ <gmd:referenceSystemIdentifier>
104
+ <gmd:RS_Identifier>
105
+ <gmd:authority>
106
+ <gmd:CI_Citation>
107
+ <gmd:title>
108
+ <gco:CharacterString>North American Datum of 1983</gco:CharacterString>
109
+ </gmd:title>
110
+ <gmd:alternateTitle>
111
+ <gco:CharacterString>NAD83</gco:CharacterString>
112
+ </gmd:alternateTitle>
113
+ <gmd:date>
114
+ <gmd:CI_Date>
115
+ <gmd:date>
116
+ <gco:Date>2007-01-19</gco:Date>
117
+ </gmd:date>
118
+ <gmd:dateType>
119
+ <gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"
120
+ codeListValue="revision">revision</gmd:CI_DateTypeCode>
121
+ </gmd:dateType>
122
+ </gmd:CI_Date>
123
+ </gmd:date>
124
+ <gmd:citedResponsibleParty>
125
+ <gmd:CI_ResponsibleParty>
126
+ <gmd:organisationName gco:nilReason="withheld"/>
127
+ <gmd:contactInfo>
128
+ <gmd:CI_Contact>
129
+ <gmd:onlineResource>
130
+ <gmd:CI_OnlineResource>
131
+ <gmd:linkage>
132
+ <gmd:URL>https://spatialreference.org/ref/epsg/4269/gml/</gmd:URL>
133
+ </gmd:linkage>
134
+ <gmd:name>
135
+ <gco:CharacterString>NAD83</gco:CharacterString>
136
+ </gmd:name>
137
+ <gmd:description>
138
+ <gco:CharacterString>Link to Geographic Markup Language (GML) description of reference system.</gco:CharacterString>
139
+ </gmd:description>
140
+ <gmd:function>
141
+ <gmd:CI_OnLineFunctionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnLineFunctionCode"
142
+ codeListValue="information">information</gmd:CI_OnLineFunctionCode>
143
+ </gmd:function>
144
+ </gmd:CI_OnlineResource>
145
+ </gmd:onlineResource>
146
+ </gmd:CI_Contact>
147
+ </gmd:contactInfo>
148
+ <gmd:role>
149
+ <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode"
150
+ codeListValue="resourceProvider">resourceProvider</gmd:CI_RoleCode>
151
+ </gmd:role>
152
+ </gmd:CI_ResponsibleParty>
153
+ </gmd:citedResponsibleParty>
154
+ </gmd:CI_Citation>
155
+ </gmd:authority>
156
+ <gmd:code>
157
+ <gco:CharacterString>urn:ogc:def:crs:EPSG::4269</gco:CharacterString>
158
+ </gmd:code>
159
+ </gmd:RS_Identifier>
160
+ </gmd:referenceSystemIdentifier>
161
+ </gmd:MD_ReferenceSystem>
162
+ </gmd:referenceSystemInfo>
163
+ <gmd:identificationInfo>
164
+ <gmd:MD_DataIdentification>
165
+ <gmd:citation>
166
+ <gmd:CI_Citation>
167
+ <gmd:title>
168
+ <gco:CharacterString>TIGER/Line Shapefile, Current, State, Arizona, Block Group</gco:CharacterString>
169
+ </gmd:title>
170
+ <gmd:alternateTitle>
171
+ <gco:CharacterString>TIGER/Line Shapefile, 2022, State, Arizona, AZ, Block Group</gco:CharacterString>
172
+ </gmd:alternateTitle>
173
+ <gmd:date>
174
+ <gmd:CI_Date>
175
+ <gmd:date>
176
+ <gco:Date>2022</gco:Date>
177
+ </gmd:date>
178
+ <gmd:dateType>
179
+ <gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"
180
+ codeListValue="publication">publication</gmd:CI_DateTypeCode>
181
+ </gmd:dateType>
182
+ </gmd:CI_Date>
183
+ </gmd:date>
184
+ <gmd:date>
185
+ <gmd:CI_Date>
186
+ <gmd:date>
187
+ <gco:Date>2022-08</gco:Date>
188
+ </gmd:date>
189
+ <gmd:dateType>
190
+ <gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"
191
+ codeListValue="creation">creation</gmd:CI_DateTypeCode>
192
+ </gmd:dateType>
193
+ </gmd:CI_Date>
194
+ </gmd:date>
195
+ <gmd:date>
196
+ <gmd:CI_Date>
197
+ <gmd:date>
198
+ <gco:Date>2022-08</gco:Date>
199
+ </gmd:date>
200
+ <gmd:dateType>
201
+ <gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"
202
+ codeListValue="lastUpdate">lastUpdate</gmd:CI_DateTypeCode>
203
+ </gmd:dateType>
204
+ </gmd:CI_Date>
205
+ </gmd:date>
206
+ <gmd:identifier>
207
+ <gmd:MD_Identifier>
208
+ <gmd:code>
209
+ <gco:CharacterString>tl_2022_04_bg</gco:CharacterString>
210
+ </gmd:code>
211
+ </gmd:MD_Identifier>
212
+ </gmd:identifier>
213
+ <gmd:citedResponsibleParty>
214
+ <gmd:CI_ResponsibleParty>
215
+ <gmd:organisationName>
216
+ <gco:CharacterString>U.S. Department of Commerce, U.S. Census Bureau, Geography Division, Spatial Data Collection and Products Branch</gco:CharacterString>
217
+ </gmd:organisationName>
218
+ <gmd:contactInfo>
219
+ <gmd:CI_Contact>
220
+ <gmd:phone>
221
+ <gmd:CI_Telephone>
222
+ <gmd:voice>
223
+ <gco:CharacterString>301-763-1128</gco:CharacterString>
224
+ </gmd:voice>
225
+ <gmd:facsimile>
226
+ <gco:CharacterString>301-763-4710</gco:CharacterString>
227
+ </gmd:facsimile>
228
+ </gmd:CI_Telephone>
229
+ </gmd:phone>
230
+ <gmd:address>
231
+ <gmd:CI_Address>
232
+ <gmd:deliveryPoint>
233
+ <gco:CharacterString>4600 Silver Hill Road, Stop 7400</gco:CharacterString>
234
+ </gmd:deliveryPoint>
235
+ <gmd:city>
236
+ <gco:CharacterString>Washington</gco:CharacterString>
237
+ </gmd:city>
238
+ <gmd:administrativeArea>
239
+ <gco:CharacterString>DC</gco:CharacterString>
240
+ </gmd:administrativeArea>
241
+ <gmd:postalCode>
242
+ <gco:CharacterString>20233-7400</gco:CharacterString>
243
+ </gmd:postalCode>
244
+ <gmd:country>
245
+ <gco:CharacterString>United States</gco:CharacterString>
246
+ </gmd:country>
247
+ <gmd:electronicMailAddress>
248
+ <gco:CharacterString>geo.geography@census.gov</gco:CharacterString>
249
+ </gmd:electronicMailAddress>
250
+ </gmd:CI_Address>
251
+ </gmd:address>
252
+ </gmd:CI_Contact>
253
+ </gmd:contactInfo>
254
+ <gmd:role>
255
+ <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode"
256
+ codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
257
+ </gmd:role>
258
+ </gmd:CI_ResponsibleParty>
259
+ </gmd:citedResponsibleParty>
260
+ <gmd:presentationForm>
261
+ <gmd:CI_PresentationFormCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_PresentationFormCode"
262
+ codeListValue="mapDigital">mapDigital</gmd:CI_PresentationFormCode>
263
+ </gmd:presentationForm>
264
+ </gmd:CI_Citation>
265
+ </gmd:citation>
266
+ <gmd:abstract>
267
+ <gco:CharacterString>This resource is a member of a series. The TIGER/Line shapefiles and related database files (.dbf) are an extract of selected geographic and cartographic information from the U.S. Census Bureau's Master Address File / Topologically Integrated Geographic Encoding and Referencing (MAF/TIGER) Database (MTDB). The MTDB represents a seamless national file with no overlaps or gaps between parts, however, each TIGER/Line shapefile is designed to stand alone as an independent data set, or they can be combined to cover the entire nation.
268
+ Block Groups (BGs) are clusters of blocks within the same census tract. Each census tract contains at least one BG, and BGs are uniquely numbered within census tracts. BGs have a valid code range of 0 through 9. BGs have the same first digit of their 4-digit census block number from the same decennial census. For example, tabulation blocks numbered 3001, 3002, 3003,.., 3999 within census tract 1210.02 are also within BG 3 within that census tract. BGs coded 0 are intended to only include water area, no land area, and they are generally in territorial seas, coastal water, and Great Lakes water areas. Block groups generally contain between 600 and 3,000 people. A BG usually covers a contiguous area but never crosses county or census tract boundaries. They may, however, cross the boundaries of other geographic entities like county subdivisions, places, urban areas, voting districts, congressional districts, and American Indian / Alaska Native / Native Hawaiian areas.
269
+ The BG boundaries in this release are those that were delineated as part of the Census Bureau's Participant Statistical Areas Program (PSAP) for the 2020 Census.</gco:CharacterString>
270
+ </gmd:abstract>
271
+ <gmd:purpose>
272
+ <gco:CharacterString>The Census Bureau releases extracts of the MAF/TIGER database in the form of TIGER/Line Shapefiles for others to use in geographic information systems (GIS) or for other geographic applications.</gco:CharacterString>
273
+ </gmd:purpose>
274
+ <gmd:status>
275
+ <gmd:MD_ProgressCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ProgressCode"
276
+ codeListValue="completed">completed</gmd:MD_ProgressCode>
277
+ </gmd:status>
278
+ <gmd:pointOfContact>
279
+ <gmd:CI_ResponsibleParty>
280
+ <gmd:organisationName>
281
+ <gco:CharacterString>U.S. Department of Commerce, U.S. Census Bureau, Geography Division, Spatial Data Collection and Products Branch</gco:CharacterString>
282
+ </gmd:organisationName>
283
+ <gmd:contactInfo>
284
+ <gmd:CI_Contact>
285
+ <gmd:phone>
286
+ <gmd:CI_Telephone>
287
+ <gmd:voice>
288
+ <gco:CharacterString>301-763-1128</gco:CharacterString>
289
+ </gmd:voice>
290
+ <gmd:facsimile>
291
+ <gco:CharacterString>301-763-4710</gco:CharacterString>
292
+ </gmd:facsimile>
293
+ </gmd:CI_Telephone>
294
+ </gmd:phone>
295
+ <gmd:address>
296
+ <gmd:CI_Address>
297
+ <gmd:deliveryPoint>
298
+ <gco:CharacterString>4600 Silver Hill Road, Stop 7400</gco:CharacterString>
299
+ </gmd:deliveryPoint>
300
+ <gmd:city>
301
+ <gco:CharacterString>Washington</gco:CharacterString>
302
+ </gmd:city>
303
+ <gmd:administrativeArea>
304
+ <gco:CharacterString>DC</gco:CharacterString>
305
+ </gmd:administrativeArea>
306
+ <gmd:postalCode>
307
+ <gco:CharacterString>20233-7400</gco:CharacterString>
308
+ </gmd:postalCode>
309
+ <gmd:country>
310
+ <gco:CharacterString>United States</gco:CharacterString>
311
+ </gmd:country>
312
+ <gmd:electronicMailAddress>
313
+ <gco:CharacterString>geo.geography@census.gov</gco:CharacterString>
314
+ </gmd:electronicMailAddress>
315
+ </gmd:CI_Address>
316
+ </gmd:address>
317
+ </gmd:CI_Contact>
318
+ </gmd:contactInfo>
319
+ <gmd:role>
320
+ <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode"
321
+ codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
322
+ </gmd:role>
323
+ </gmd:CI_ResponsibleParty>
324
+ </gmd:pointOfContact>
325
+ <gmd:resourceMaintenance>
326
+ <gmd:MD_MaintenanceInformation>
327
+ <gmd:maintenanceAndUpdateFrequency>
328
+ <gmd:MD_MaintenanceFrequencyCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_MaintenanceFrequencyCode"
329
+ codeListValue="notPlanned">notPlanned</gmd:MD_MaintenanceFrequencyCode>
330
+ </gmd:maintenanceAndUpdateFrequency>
331
+ </gmd:MD_MaintenanceInformation>
332
+ </gmd:resourceMaintenance>
333
+ <gmd:graphicOverview>
334
+ <gmd:MD_BrowseGraphic>
335
+ <gmd:fileName>
336
+ <gco:CharacterString>https://tigerweb.geo.census.gov/arcgis/services/TIGERweb/tigerWMS_Current/MapServer/WmsServer?REQUEST=GetMap&amp;SERVICE=WMS&amp;VERSION=1.3.0&amp;LAYERS=Census_Block_Groups59805,Census_Block_Groups_Labels32376&amp;STYLES=default,default&amp;FORMAT=image/png+xml&amp;BGCOLOR=0xFFFFFF&amp;TRANSPARENT=TRUE&amp;CRS=EPSG:4326&amp;BBOX=+38.8810,-77.0401,+38.9008,-77.0035&amp;WIDTH=256&amp;HEIGHT=256</gco:CharacterString>
337
+ </gmd:fileName>
338
+ <gmd:fileDescription>
339
+ <gco:CharacterString>URL for the TIGERWeb Mapping Service</gco:CharacterString>
340
+ </gmd:fileDescription>
341
+ <gmd:fileType>
342
+ <gco:CharacterString>URL</gco:CharacterString>
343
+ </gmd:fileType>
344
+ </gmd:MD_BrowseGraphic>
345
+ </gmd:graphicOverview>
346
+ <gmd:descriptiveKeywords>
347
+ <gmd:MD_Keywords>
348
+ <gmd:keyword>
349
+ <gco:CharacterString>State or equivalent entity</gco:CharacterString>
350
+ </gmd:keyword>
351
+ <gmd:keyword>
352
+ <gco:CharacterString>Polygon</gco:CharacterString>
353
+ </gmd:keyword>
354
+ <gmd:keyword>
355
+ <gco:CharacterString>Block Group</gco:CharacterString>
356
+ </gmd:keyword>
357
+ <gmd:keyword>
358
+ <gco:CharacterString>BG</gco:CharacterString>
359
+ </gmd:keyword>
360
+ <gmd:type>
361
+ <gmd:MD_KeywordTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode"
362
+ codeListValue="theme"/>
363
+ </gmd:type>
364
+ <gmd:thesaurusName>
365
+ <gmd:CI_Citation>
366
+ <gmd:title>
367
+ <gco:CharacterString>None</gco:CharacterString>
368
+ </gmd:title>
369
+ <gmd:date gco:nilReason="unknown"/>
370
+ </gmd:CI_Citation>
371
+ </gmd:thesaurusName>
372
+ </gmd:MD_Keywords>
373
+ </gmd:descriptiveKeywords>
374
+ <gmd:descriptiveKeywords>
375
+ <gmd:MD_Keywords>
376
+ <gmd:keyword>
377
+ <gco:CharacterString>State or Equivalent Entity</gco:CharacterString>
378
+ </gmd:keyword>
379
+ <gmd:keyword>
380
+ <gco:CharacterString>Arizona</gco:CharacterString>
381
+ </gmd:keyword>
382
+ <gmd:keyword>
383
+ <gco:CharacterString>AZ</gco:CharacterString>
384
+ </gmd:keyword>
385
+ <gmd:keyword>
386
+ <gco:CharacterString>04</gco:CharacterString>
387
+ </gmd:keyword>
388
+ <gmd:type>
389
+ <gmd:MD_KeywordTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_KeywordTypeCode"
390
+ codeListValue="place"/>
391
+ </gmd:type>
392
+ <gmd:thesaurusName>
393
+ <gmd:CI_Citation>
394
+ <gmd:title>
395
+ <gco:CharacterString>INCITS 38-2009[R2019]: Information Technology - Codes for the Identification of the States and Equivalent Areas within the United States, Puerto Rico, and the Insular Areas.</gco:CharacterString>
396
+ </gmd:title>
397
+ <gmd:date gco:nilReason="unknown"/>
398
+ </gmd:CI_Citation>
399
+ </gmd:thesaurusName>
400
+ </gmd:MD_Keywords>
401
+ </gmd:descriptiveKeywords>
402
+ <gmd:resourceConstraints>
403
+ <gmd:MD_LegalConstraints>
404
+ <gmd:accessConstraints>
405
+ <gmd:MD_RestrictionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_RestrictionCode"
406
+ codeListValue="otherRestrictions">otherRestrictions</gmd:MD_RestrictionCode>
407
+ </gmd:accessConstraints>
408
+ <gmd:useConstraints>
409
+ <gmd:MD_RestrictionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_RestrictionCode"
410
+ codeListValue="otherRestrictions">otherRestrictions</gmd:MD_RestrictionCode>
411
+ </gmd:useConstraints>
412
+ <gmd:otherConstraints>
413
+ <gco:CharacterString>Access constraints: None</gco:CharacterString>
414
+ </gmd:otherConstraints>
415
+ <gmd:otherConstraints>
416
+ <gco:CharacterString>Use Constraints: The TIGER/Line Shapefile products are not copyrighted however TIGER/Line and Census TIGER are registered trademarks of the U.S. Census Bureau. These products are free to use in a product or publication, however acknowledgement must be given to the U.S. Census Bureau as the source.
417
+ The boundary information in the TIGER/Line Shapefiles are for statistical data collection and tabulation purposes only; their depiction and designation for statistical purposes does not constitute a determination of jurisdictional authority or rights of ownership or entitlement and they are not legal land descriptions. Coordinates in the TIGER/Line shapefiles have six implied decimal places, but the positional accuracy of these coordinates is not as great as the six decimal places suggest.</gco:CharacterString>
418
+ </gmd:otherConstraints>
419
+ </gmd:MD_LegalConstraints>
420
+ </gmd:resourceConstraints>
421
+ <gmd:aggregationInfo>
422
+ <gmd:MD_AggregateInformation>
423
+ <gmd:aggregateDataSetName>
424
+ <gmd:CI_Citation>
425
+ <gmd:title>
426
+ <gco:CharacterString>Series Information for Block Group State-based TIGER/Line Shapefiles, Current</gco:CharacterString>
427
+ </gmd:title>
428
+ <gmd:date>
429
+ <gmd:CI_Date>
430
+ <gmd:date>
431
+ <gco:Date>2022</gco:Date>
432
+ </gmd:date>
433
+ <gmd:dateType>
434
+ <gmd:CI_DateTypeCode codeList="https://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"
435
+ codeListValue="publication">publication</gmd:CI_DateTypeCode>
436
+ </gmd:dateType>
437
+ </gmd:CI_Date>
438
+ </gmd:date>
439
+ <gmd:identifier>
440
+ <gmd:MD_Identifier>
441
+ <gmd:code>
442
+ <gco:CharacterString>series_tl_2022_bg</gco:CharacterString>
443
+ </gmd:code>
444
+ </gmd:MD_Identifier>
445
+ </gmd:identifier>
446
+ <gmd:citedResponsibleParty>
447
+ <gmd:CI_ResponsibleParty>
448
+ <gmd:organisationName>
449
+ <gco:CharacterString>U.S. Department of Commerce, U.S. Census Bureau, Geography Division, Spatial Data Collection and Products Branch</gco:CharacterString>
450
+ </gmd:organisationName>
451
+ <gmd:contactInfo>
452
+ <gmd:CI_Contact>
453
+ <gmd:phone>
454
+ <gmd:CI_Telephone>
455
+ <gmd:voice>
456
+ <gco:CharacterString>301-763-1128</gco:CharacterString>
457
+ </gmd:voice>
458
+ <gmd:facsimile>
459
+ <gco:CharacterString>301-763-4710</gco:CharacterString>
460
+ </gmd:facsimile>
461
+ </gmd:CI_Telephone>
462
+ </gmd:phone>
463
+ <gmd:address>
464
+ <gmd:CI_Address>
465
+ <gmd:deliveryPoint>
466
+ <gco:CharacterString>4600 Silver Hill Road, Stop 7400</gco:CharacterString>
467
+ </gmd:deliveryPoint>
468
+ <gmd:city>
469
+ <gco:CharacterString>Washington</gco:CharacterString>
470
+ </gmd:city>
471
+ <gmd:administrativeArea>
472
+ <gco:CharacterString>DC</gco:CharacterString>
473
+ </gmd:administrativeArea>
474
+ <gmd:postalCode>
475
+ <gco:CharacterString>20233-7400</gco:CharacterString>
476
+ </gmd:postalCode>
477
+ <gmd:country>
478
+ <gco:CharacterString>United States</gco:CharacterString>
479
+ </gmd:country>
480
+ <gmd:electronicMailAddress>
481
+ <gco:CharacterString>geo.geography@census.gov</gco:CharacterString>
482
+ </gmd:electronicMailAddress>
483
+ </gmd:CI_Address>
484
+ </gmd:address>
485
+ </gmd:CI_Contact>
486
+ </gmd:contactInfo>
487
+ <gmd:role>
488
+ <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode"
489
+ codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
490
+ </gmd:role>
491
+ </gmd:CI_ResponsibleParty>
492
+ </gmd:citedResponsibleParty>
493
+ <gmd:presentationForm>
494
+ <gmd:CI_PresentationFormCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_PresentationFormCode"
495
+ codeListValue="mapDigital">mapDigital</gmd:CI_PresentationFormCode>
496
+ </gmd:presentationForm>
497
+ </gmd:CI_Citation>
498
+ </gmd:aggregateDataSetName>
499
+ <gmd:associationType>
500
+ <gmd:DS_AssociationTypeCode codeList="https://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#DS_AssociationTypeCode"
501
+ codeListValue="largerWorkCitation">largerWorkCitation</gmd:DS_AssociationTypeCode>
502
+ </gmd:associationType>
503
+ </gmd:MD_AggregateInformation>
504
+ </gmd:aggregationInfo>
505
+ <gmd:spatialRepresentationType>
506
+ <gmd:MD_SpatialRepresentationTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_SpatialRepresentationTypeCode"
507
+ codeListValue="vector">vector</gmd:MD_SpatialRepresentationTypeCode>
508
+ </gmd:spatialRepresentationType>
509
+ <gmd:language>
510
+ <gco:CharacterString>eng; USA</gco:CharacterString>
511
+ </gmd:language>
512
+ <gmd:characterSet>
513
+ <gmd:MD_CharacterSetCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode"
514
+ codeListValue="utf8">utf8</gmd:MD_CharacterSetCode>
515
+ </gmd:characterSet>
516
+ <gmd:topicCategory>
517
+ <gmd:MD_TopicCategoryCode>boundaries</gmd:MD_TopicCategoryCode>
518
+ </gmd:topicCategory>
519
+ <gmd:environmentDescription>
520
+ <gco:CharacterString>The TIGER/Line shapefiles contain geographic data only and do not include display mapping software or statistical data. For information on how to use the TIGER/Line shapefile data with specific software package users shall contact the company that produced the software.</gco:CharacterString>
521
+ </gmd:environmentDescription>
522
+ <gmd:extent>
523
+ <gmd:EX_Extent id="boundingExtent">
524
+ <gmd:geographicElement>
525
+ <gmd:EX_GeographicBoundingBox id="boundingGeographicBoundingBox">
526
+ <gmd:westBoundLongitude>
527
+ <gco:Decimal>-114.8163</gco:Decimal>
528
+ </gmd:westBoundLongitude>
529
+ <gmd:eastBoundLongitude>
530
+ <gco:Decimal>-109.045172</gco:Decimal>
531
+ </gmd:eastBoundLongitude>
532
+ <gmd:southBoundLatitude>
533
+ <gco:Decimal>31.332341</gco:Decimal>
534
+ </gmd:southBoundLatitude>
535
+ <gmd:northBoundLatitude>
536
+ <gco:Decimal>37.003725</gco:Decimal>
537
+ </gmd:northBoundLatitude>
538
+ </gmd:EX_GeographicBoundingBox>
539
+ </gmd:geographicElement>
540
+ <gmd:temporalElement>
541
+ <gmd:EX_TemporalExtent id="boundingTemporalExtent">
542
+ <gmd:extent>
543
+ <gml:TimePeriod gml:id="boundingTemporalExtentA">
544
+ <gml:description>publication date</gml:description>
545
+ <gml:beginPosition>2021-06</gml:beginPosition>
546
+ <gml:endPosition>2022-08</gml:endPosition>
547
+ </gml:TimePeriod>
548
+ </gmd:extent>
549
+ </gmd:EX_TemporalExtent>
550
+ </gmd:temporalElement>
551
+ </gmd:EX_Extent>
552
+ </gmd:extent>
553
+ </gmd:MD_DataIdentification>
554
+ </gmd:identificationInfo>
555
+ <gmd:contentInfo>
556
+ <gmd:MD_FeatureCatalogueDescription>
557
+ <gmd:includedWithDataset>
558
+ <gco:Boolean>1</gco:Boolean>
559
+ </gmd:includedWithDataset>
560
+ <gmd:featureTypes>
561
+ <gco:LocalName codeSpace="unknown">Block Groups</gco:LocalName>
562
+ </gmd:featureTypes>
563
+ <gmd:featureCatalogueCitation>
564
+ <gmd:CI_Citation>
565
+ <gmd:title>
566
+ <gco:CharacterString>Feature Catalog for the Current Block Groups TIGER/Line Shapefiles</gco:CharacterString>
567
+ </gmd:title>
568
+ <gmd:date>
569
+ <gmd:CI_Date>
570
+ <gmd:date>
571
+ <gco:Date>2022</gco:Date>
572
+ </gmd:date>
573
+ <gmd:dateType>
574
+ <gmd:CI_DateTypeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode"
575
+ codeListValue="publication">publication</gmd:CI_DateTypeCode>
576
+ </gmd:dateType>
577
+ </gmd:CI_Date>
578
+ </gmd:date>
579
+ <gmd:citedResponsibleParty>
580
+ <gmd:CI_ResponsibleParty>
581
+ <gmd:organisationName>
582
+ <gco:CharacterString>U.S. Department of Commerce, U.S. Census Bureau, Geography Division, Spatial Data Collection and Products Branch</gco:CharacterString>
583
+ </gmd:organisationName>
584
+ <gmd:contactInfo>
585
+ <gmd:CI_Contact>
586
+ <gmd:phone>
587
+ <gmd:CI_Telephone>
588
+ <gmd:voice>
589
+ <gco:CharacterString>301-763-1128</gco:CharacterString>
590
+ </gmd:voice>
591
+ <gmd:facsimile>
592
+ <gco:CharacterString>301-763-4710</gco:CharacterString>
593
+ </gmd:facsimile>
594
+ </gmd:CI_Telephone>
595
+ </gmd:phone>
596
+ <gmd:address>
597
+ <gmd:CI_Address>
598
+ <gmd:deliveryPoint>
599
+ <gco:CharacterString>4600 Silver Hill Road, Stop 7400</gco:CharacterString>
600
+ </gmd:deliveryPoint>
601
+ <gmd:city>
602
+ <gco:CharacterString>Washington</gco:CharacterString>
603
+ </gmd:city>
604
+ <gmd:administrativeArea>
605
+ <gco:CharacterString>DC</gco:CharacterString>
606
+ </gmd:administrativeArea>
607
+ <gmd:postalCode>
608
+ <gco:CharacterString>20233-7400</gco:CharacterString>
609
+ </gmd:postalCode>
610
+ <gmd:country>
611
+ <gco:CharacterString>United States</gco:CharacterString>
612
+ </gmd:country>
613
+ <gmd:electronicMailAddress>
614
+ <gco:CharacterString>geo.geography@census.gov</gco:CharacterString>
615
+ </gmd:electronicMailAddress>
616
+ </gmd:CI_Address>
617
+ </gmd:address>
618
+ </gmd:CI_Contact>
619
+ </gmd:contactInfo>
620
+ <gmd:role>
621
+ <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode"
622
+ codeListValue="pointOfContact">pointOfContact</gmd:CI_RoleCode>
623
+ </gmd:role>
624
+ </gmd:CI_ResponsibleParty>
625
+ </gmd:citedResponsibleParty>
626
+ <gmd:otherCitationDetails>
627
+ <gco:CharacterString>https://meta.geo.census.gov/data/existing/decennial/GEO/GPMB/TIGERline/Current_19110/tl_2022_bg.shp.ea.iso.xml</gco:CharacterString>
628
+ </gmd:otherCitationDetails>
629
+ </gmd:CI_Citation>
630
+ </gmd:featureCatalogueCitation>
631
+ </gmd:MD_FeatureCatalogueDescription>
632
+ </gmd:contentInfo>
633
+ <gmd:distributionInfo>
634
+ <gmd:MD_Distribution>
635
+ <gmd:distributionFormat>
636
+ <gmd:MD_Format>
637
+ <gmd:name>
638
+ <gco:CharacterString>ZIP</gco:CharacterString>
639
+ </gmd:name>
640
+ <gmd:version gco:nilReason="unknown"/>
641
+ </gmd:MD_Format>
642
+ </gmd:distributionFormat>
643
+ <gmd:distributor>
644
+ <gmd:MD_Distributor>
645
+ <gmd:distributorContact>
646
+ <gmd:CI_ResponsibleParty>
647
+ <gmd:organisationName>
648
+ <gco:CharacterString>U.S. Department of Commerce, U.S. Census Bureau,
649
+ Geography Division, Geographic Customer Services Branch
650
+ </gco:CharacterString>
651
+ </gmd:organisationName>
652
+ <gmd:contactInfo>
653
+ <gmd:CI_Contact>
654
+ <gmd:phone>
655
+ <gmd:CI_Telephone>
656
+ <gmd:voice>
657
+ <gco:CharacterString>301-763-1128</gco:CharacterString>
658
+ </gmd:voice>
659
+ <gmd:facsimile>
660
+ <gco:CharacterString>301-763-4710</gco:CharacterString>
661
+ </gmd:facsimile>
662
+ </gmd:CI_Telephone>
663
+ </gmd:phone>
664
+ <gmd:address>
665
+ <gmd:CI_Address>
666
+ <gmd:deliveryPoint>
667
+ <gco:CharacterString>4600 Silver Hill Road, Stop 7400</gco:CharacterString>
668
+ </gmd:deliveryPoint>
669
+ <gmd:city>
670
+ <gco:CharacterString>Washington</gco:CharacterString>
671
+ </gmd:city>
672
+ <gmd:administrativeArea>
673
+ <gco:CharacterString>DC</gco:CharacterString>
674
+ </gmd:administrativeArea>
675
+ <gmd:postalCode>
676
+ <gco:CharacterString>20233-7400</gco:CharacterString>
677
+ </gmd:postalCode>
678
+ <gmd:country>
679
+ <gco:CharacterString>United States</gco:CharacterString>
680
+ </gmd:country>
681
+ <gmd:electronicMailAddress>
682
+ <gco:CharacterString>geo.geography@census.gov</gco:CharacterString>
683
+ </gmd:electronicMailAddress>
684
+ </gmd:CI_Address>
685
+ </gmd:address>
686
+ </gmd:CI_Contact>
687
+ </gmd:contactInfo>
688
+ <gmd:role>
689
+ <gmd:CI_RoleCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode"
690
+ codeListValue="distributor">distributor</gmd:CI_RoleCode>
691
+ </gmd:role>
692
+ </gmd:CI_ResponsibleParty>
693
+ </gmd:distributorContact>
694
+ <gmd:distributionOrderProcess>
695
+ <gmd:MD_StandardOrderProcess>
696
+ <gmd:fees>
697
+ <gco:CharacterString>The online copy of the TIGER/Line Shapefiles may be accessed without charge.</gco:CharacterString>
698
+ </gmd:fees>
699
+ </gmd:MD_StandardOrderProcess>
700
+ </gmd:distributionOrderProcess>
701
+ </gmd:MD_Distributor>
702
+ </gmd:distributor>
703
+ <gmd:transferOptions>
704
+ <gmd:MD_DigitalTransferOptions>
705
+ <gmd:onLine>
706
+ <gmd:CI_OnlineResource>
707
+ <gmd:linkage>
708
+ <gmd:URL>https://www2.census.gov/geo/tiger/TIGER2022/BG/tl_2022_04_bg.zip</gmd:URL>
709
+ </gmd:linkage>
710
+ <gmd:applicationProfile>
711
+ <gco:CharacterString>Shapefile Zip File</gco:CharacterString>
712
+ </gmd:applicationProfile>
713
+ <gmd:name>
714
+ <gco:CharacterString>tl_2022_04_bg.zip</gco:CharacterString>
715
+ </gmd:name>
716
+ <gmd:description>
717
+ <gco:CharacterString>The TIGER/Line Shapefiles are the fully supported, core geographic product from the U.S. Census Bureau. They are extracts of selected geographic and cartographic information from the U.S. Census Bureau's Master Address File/Topologically Integrated Geographic Encoding and Referencing (MAF/TIGER) database. </gco:CharacterString>
718
+ </gmd:description>
719
+ <gmd:function>
720
+ <gmd:CI_OnLineFunctionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnlineFunctionCode"
721
+ codeListValue="download">download</gmd:CI_OnLineFunctionCode>
722
+ </gmd:function>
723
+ </gmd:CI_OnlineResource>
724
+ </gmd:onLine>
725
+ </gmd:MD_DigitalTransferOptions>
726
+ </gmd:transferOptions>
727
+ <gmd:transferOptions>
728
+ <gmd:MD_DigitalTransferOptions>
729
+ <gmd:onLine>
730
+ <gmd:CI_OnlineResource>
731
+ <gmd:linkage>
732
+ <gmd:URL>https://meta.geo.census.gov/data/existing/decennial/GEO/GPMB/TIGERline/Current_19110/tl_2022_bg.shp.ea.iso.xml</gmd:URL>
733
+ </gmd:linkage>
734
+ <gmd:applicationProfile>
735
+ <gco:CharacterString>XML</gco:CharacterString>
736
+ </gmd:applicationProfile>
737
+ <gmd:name>
738
+ <gco:CharacterString>tl_2022_bg.shp.ea.iso.xml</gco:CharacterString>
739
+ </gmd:name>
740
+ <gmd:description>
741
+ <gco:CharacterString>Entity and attribute file</gco:CharacterString>
742
+ </gmd:description>
743
+ <gmd:function>
744
+ <gmd:CI_OnLineFunctionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnlineFunctionCode"
745
+ codeListValue="download">download</gmd:CI_OnLineFunctionCode>
746
+ </gmd:function>
747
+ </gmd:CI_OnlineResource>
748
+ </gmd:onLine>
749
+ </gmd:MD_DigitalTransferOptions>
750
+ </gmd:transferOptions>
751
+ <gmd:transferOptions>
752
+ <gmd:MD_DigitalTransferOptions>
753
+ <gmd:onLine>
754
+ <gmd:CI_OnlineResource>
755
+ <gmd:linkage>
756
+ <gmd:URL>https://tigerweb.geo.census.gov/arcgis/rest/services/TIGERweb/tigerWMS_Current/MapServer</gmd:URL>
757
+ </gmd:linkage>
758
+ <gmd:applicationProfile>
759
+ <gco:CharacterString>https://www.ogc.org/standards/wms</gco:CharacterString>
760
+ </gmd:applicationProfile>
761
+ <gmd:name>
762
+ <gco:CharacterString>TIGERweb/tigerWMS_Current (MapServer)</gco:CharacterString>
763
+ </gmd:name>
764
+ <gmd:description>
765
+ <gco:CharacterString>The Open Geospatial Consortium, Inc. (OGC) Web Map Service interface standard (WMS) provides a simple HTTP interface for requesting geo-registered map images from our geospatial database. The response to the request is one or more geo-registered map images that can be displayed in a browser or WMS client application. By gaining access to our data through our WMS, users can produce maps containing TIGERweb layers combined with layers from other servers.</gco:CharacterString>
766
+ </gmd:description>
767
+ <gmd:function>
768
+ <gmd:CI_OnLineFunctionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnlineFunctionCode"
769
+ codeListValue="search">search</gmd:CI_OnLineFunctionCode>
770
+ </gmd:function>
771
+ </gmd:CI_OnlineResource>
772
+ </gmd:onLine>
773
+ </gmd:MD_DigitalTransferOptions>
774
+ </gmd:transferOptions>
775
+ <gmd:transferOptions>
776
+ <gmd:MD_DigitalTransferOptions>
777
+ <gmd:onLine>
778
+ <gmd:CI_OnlineResource>
779
+ <gmd:linkage>
780
+ <gmd:URL>https://tigerweb.geo.census.gov/arcgis/rest/services/TIGERweb/Tracts_Blocks/MapServer</gmd:URL>
781
+ </gmd:linkage>
782
+ <gmd:applicationProfile>
783
+ <gco:CharacterString>https://geoservices.github.io</gco:CharacterString>
784
+ </gmd:applicationProfile>
785
+ <gmd:name>
786
+ <gco:CharacterString>TIGERweb/Tracts_Blocks (MapServer)</gco:CharacterString>
787
+ </gmd:name>
788
+ <gmd:description>
789
+ <gco:CharacterString>The GeoServices REST Specification provides a way for Web clients to communicate with geographic information system (GIS) servers through Representational State Transfer (REST) technology.</gco:CharacterString>
790
+ </gmd:description>
791
+ <gmd:function>
792
+ <gmd:CI_OnLineFunctionCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_OnlineFunctionCode"
793
+ codeListValue="search">search</gmd:CI_OnLineFunctionCode>
794
+ </gmd:function>
795
+ </gmd:CI_OnlineResource>
796
+ </gmd:onLine>
797
+ </gmd:MD_DigitalTransferOptions>
798
+ </gmd:transferOptions>
799
+ </gmd:MD_Distribution>
800
+ </gmd:distributionInfo>
801
+ <gmd:dataQualityInfo>
802
+ <gmd:DQ_DataQuality>
803
+ <gmd:scope>
804
+ <gmd:DQ_Scope>
805
+ <gmd:level>
806
+ <gmd:MD_ScopeCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_ScopeCode"
807
+ codeListValue="dataset">dataset</gmd:MD_ScopeCode>
808
+ </gmd:level>
809
+ </gmd:DQ_Scope>
810
+ </gmd:scope>
811
+ <gmd:report>
812
+ <gmd:DQ_ConceptualConsistency>
813
+ <gmd:measureDescription>
814
+ <gco:CharacterString>
815
+ The Census Bureau performed automated tests to ensure logical consistency and limits of shapefiles. Segments making up the outer and inner boundaries of a polygon tie end-to-end to completely enclose the area. All polygons are tested for closure.
816
+ The Census Bureau uses its internally developed geographic update system to enhance and modify spatial and attribute data in the Census MAF/TIGER database. Standard geographic codes, such as FIPS codes for states, counties, municipalities, county subdivisions, places, American Indian/Alaska Native/Native Hawaiian areas, and congressional districts are used when encoding spatial entities. The Census Bureau performed spatial data tests for logical consistency of the codes during the compilation of the original Census MAF/TIGER database files. Most of the codes for geographic entities except states, counties, urban areas, Core Based Statistical Areas (CBSAs), American Indian Areas (AIAs), and congressional districts were provided to the Census Bureau by the USGS, the agency responsible for maintaining the Geographic Names Information System (GNIS). Feature attribute information has been examined but has not been fully tested for consistency.
817
+ For the TIGER/Line Shapefiles, the Point and Vector Object Count for the G-polygon SDTS Point and Vector Object Type reflects the number of records in the shapefile attribute table. For multi-polygon features, only one attribute record exists for each multi-polygon rather than one attribute record per individual G-polygon component of the multi-polygon feature. TIGER/Line Shapefile multi-polygons are an exception to the G-polygon object type classification. Therefore, when multi-polygons exist in a shapefile, the object count will be less than the actual number of G-polygons.
818
+ </gco:CharacterString>
819
+ </gmd:measureDescription>
820
+ <gmd:result gco:nilReason="unknown"/>
821
+ </gmd:DQ_ConceptualConsistency>
822
+ </gmd:report>
823
+ <gmd:report>
824
+ <gmd:DQ_CompletenessOmission>
825
+ <gmd:evaluationMethodDescription>
826
+ <gco:CharacterString>Data completeness of the TIGER/Line Shapefiles reflects the contents of the Census MAF/TIGER database at the time the TIGER/Line Shapefiles were created.</gco:CharacterString>
827
+ </gmd:evaluationMethodDescription>
828
+ <gmd:result gco:nilReason="unknown"/>
829
+ </gmd:DQ_CompletenessOmission>
830
+ </gmd:report>
831
+ <gmd:report>
832
+ <gmd:DQ_CompletenessCommission>
833
+ <gmd:evaluationMethodDescription>
834
+ <gco:CharacterString>Data completeness of the TIGER/Line Shapefiles reflects the contents of the Census MAF/TIGER database at the time the TIGER/Line Shapefiles were created.</gco:CharacterString>
835
+ </gmd:evaluationMethodDescription>
836
+ <gmd:result gco:nilReason="unknown"/>
837
+ </gmd:DQ_CompletenessCommission>
838
+ </gmd:report>
839
+ </gmd:DQ_DataQuality>
840
+ </gmd:dataQualityInfo>
841
+ <gmd:metadataMaintenance>
842
+ <gmd:MD_MaintenanceInformation>
843
+ <gmd:maintenanceAndUpdateFrequency>
844
+ <gmd:MD_MaintenanceFrequencyCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_MaintenanceFrequencyCode"
845
+ codeListValue="annually">annually</gmd:MD_MaintenanceFrequencyCode>
846
+ </gmd:maintenanceAndUpdateFrequency>
847
+ <gmd:maintenanceNote>
848
+ <gco:CharacterString>This was transformed from the Census Bureau Geospatial Product Metadata Content Standard.</gco:CharacterString>
849
+ </gmd:maintenanceNote>
850
+ </gmd:MD_MaintenanceInformation>
851
+ </gmd:metadataMaintenance>
852
+ </gmi:MI_Metadata>
data/raw/tiger_maricopa/tl_2022_04_bg.shx ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d6f0a5288ca52d18a2f1502ef9a0d6f0603455192c5798ca1b92ea63648eb0a1
3
+ size 38284
data/raw/tree_equity_scores.geojson ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:776f00f8f0cc601942728c50508d3c420da84ed5f1245f0a1479e034b7448c55
3
+ size 18017531
data_pipeline.py ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import io
3
+ import zipfile
4
+ import pathlib
5
+ import requests
6
+ import numpy as np
7
+ import pandas as pd
8
+ import geopandas as gpd
9
+ import duckdb
10
+
11
+ # Keys and paths
12
+
13
+ CENSUS_API_KEY = os.getenv("CENSUS_API_KEY", "5f2c79bff648d3c5220c0f519359df561ac2eec6")
14
+ TES_PATH = pathlib.Path("data/raw/az_tes.shp")
15
+ DB_PATH = "processed_dashboard.db"
16
+
17
+ # Step 1: Import block group boundaries
18
+
19
+ print("Step 1: Downloading Phoenix block-group boundaries...")
20
+
21
+ tiger_dir = pathlib.Path("data/raw/tiger_maricopa")
22
+ tiger_dir.mkdir(parents=True, exist_ok=True)
23
+
24
+ tiger_url = "https://www2.census.gov/geo/tiger/TIGER2022/BG/tl_2022_04_bg.zip"
25
+ print(" Downloading Arizona block groups from Census TIGER...")
26
+ resp = requests.get(tiger_url, timeout=120)
27
+ resp.raise_for_status()
28
+
29
+ z = zipfile.ZipFile(io.BytesIO(resp.content))
30
+ z.extractall(tiger_dir)
31
+
32
+ shp_files = list(tiger_dir.glob("*.shp"))
33
+ print(f" Found shapefile: {shp_files[0].name}")
34
+
35
+ gdf = gpd.read_file(shp_files[0])
36
+ gdf = gdf[gdf["COUNTYFP"] == "013"].copy()
37
+ gdf = gdf.reset_index(drop=True)
38
+
39
+ gdf["GEOID"] = gdf["STATEFP"] + gdf["COUNTYFP"] + gdf["TRACTCE"] + gdf["BLKGRPCE"]
40
+ gdf = gdf.rename(columns={"NAMELSAD": "NAME"})
41
+ gdf = gdf[["GEOID", "NAME", "geometry"]].copy()
42
+
43
+ print(f" Got {len(gdf)} Maricopa County block groups")
44
+ print(f" CRS: {gdf.crs}")
45
+ print(f" Bounds: {gdf.total_bounds}")
46
+ print(f" Sample GEOIDs: {gdf['GEOID'].head(3).tolist()}")
47
+
48
+ # Step 2: Import and join ACS demographic data
49
+
50
+ print("Step 2 — Fetching ACS 5-year demographics...")
51
+
52
+ vars_str = "B19013_001E,B03002_001E,B03002_003E,B03002_012E,B03002_004E"
53
+ acs_url = (
54
+ f"https://api.census.gov/data/2022/acs/acs5"
55
+ f"?get=NAME,{vars_str}"
56
+ f"&for=block+group:*&in=state:04+county:013"
57
+ f"&key={CENSUS_API_KEY}"
58
+ )
59
+ resp = requests.get(acs_url, timeout=60)
60
+ resp.raise_for_status()
61
+ raw = resp.json()
62
+ demo = pd.DataFrame(raw[1:], columns=raw[0])
63
+
64
+ demo["GEOID"] = demo["state"] + demo["county"] + demo["tract"] + demo["block group"]
65
+ print(f" ACS sample GEOIDs: {demo['GEOID'].head(3).tolist()}")
66
+ print(f" TIGER sample GEOIDs: {gdf['GEOID'].head(3).tolist()}")
67
+
68
+ for col in ["B19013_001E","B03002_001E","B03002_003E","B03002_012E","B03002_004E"]:
69
+ demo[col] = pd.to_numeric(demo[col], errors="coerce")
70
+
71
+ demo["B19013_001E"] = demo["B19013_001E"].where(demo["B19013_001E"] > 0)
72
+ demo = demo.rename(columns={
73
+ "B19013_001E": "median_income",
74
+ "B03002_001E": "total_pop",
75
+ "B03002_003E": "pop_white",
76
+ "B03002_012E": "pop_hispanic",
77
+ "B03002_004E": "pop_black",
78
+ })
79
+
80
+ total_pop = np.where(demo["total_pop"] > 0, demo["total_pop"], np.nan)
81
+ demo["pct_white"] = demo["pop_white"] / total_pop * 100
82
+ demo["pct_hispanic"] = demo["pop_hispanic"] / total_pop * 100
83
+ demo["pct_black"] = demo["pop_black"] / total_pop * 100
84
+ demo["pct_minority"] = 100 - demo["pct_white"]
85
+
86
+ gdf = gdf.merge(
87
+ demo[["GEOID","median_income","total_pop","pct_white","pct_hispanic","pct_black","pct_minority"]],
88
+ on="GEOID", how="inner"
89
+ )
90
+ print(f" Merged onto {len(gdf)} block groups — {gdf['median_income'].notna().sum()} matched income values")
91
+
92
+ # Step 3: Import and join NDVI from Google Earth Engine
93
+
94
+ print("Step 3 — Computing NDVI via Google Earth Engine...")
95
+
96
+ try:
97
+ import ee
98
+ ee.Initialize(project="gis322final")
99
+
100
+ valid_gdf = gdf[gdf.geometry.notnull() & gdf.is_valid].copy()
101
+ bounds = valid_gdf.total_bounds
102
+ print(f" Bounding box: {bounds}")
103
+
104
+ aoi = ee.Geometry.Rectangle([
105
+ float(bounds[0]), float(bounds[1]),
106
+ float(bounds[2]), float(bounds[3])
107
+ ])
108
+
109
+ s2 = (
110
+ ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")
111
+ .filterBounds(aoi)
112
+ .filterDate("2023-01-01", "2023-12-31")
113
+ .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE", 1))
114
+ .mosaic()
115
+ .clip(aoi)
116
+ )
117
+ ndvi_composite = s2.normalizedDifference(["B8", "B4"]).rename("NDVI")
118
+
119
+ all_results = []
120
+ batch_size = 750
121
+ rows = list(valid_gdf.iterrows())
122
+
123
+ for i in range(0, len(rows), batch_size):
124
+ batch = rows[i:i + batch_size]
125
+ print(f" Processing batch {i//batch_size + 1} of {len(rows)//batch_size + 1}...")
126
+
127
+ features = [
128
+ ee.Feature(ee.Geometry(row.geometry.__geo_interface__), {"GEOID": row["GEOID"]})
129
+ for _, row in batch
130
+ ]
131
+ fc = ee.FeatureCollection(features)
132
+ sampled = ndvi_composite.reduceRegions(
133
+ collection=fc, reducer=ee.Reducer.mean(), scale=30
134
+ )
135
+ results = sampled.getInfo()["features"]
136
+ all_results.extend(results)
137
+
138
+ ndvi_df = pd.DataFrame([
139
+ {"GEOID": f["properties"]["GEOID"],
140
+ "ndvi_mean": f["properties"].get("mean", np.nan)}
141
+ for f in all_results
142
+ ])
143
+ print(f" NDVI computed for {len(ndvi_df)} block groups")
144
+
145
+ except Exception as e:
146
+ print(f" ⚠ GEE unavailable ({e})")
147
+ print(" ℹ Using placeholder NDVI values")
148
+ ndvi_df = pd.DataFrame({
149
+ "GEOID": gdf["GEOID"].values,
150
+ "ndvi_mean": np.random.uniform(0.05, 0.45, len(gdf))
151
+ })
152
+
153
+ gdf = gdf.merge(ndvi_df, on="GEOID", how="left")
154
+ # Step 4: Import and join Tree Equity Scores
155
+
156
+ print("Step 4 — Loading Tree Equity Scores...")
157
+
158
+ if TES_PATH.exists():
159
+ tes = gpd.read_file(TES_PATH, engine="pyogrio")
160
+ tes_df = tes[["GEOID","tes"]].copy().rename(columns={"tes": "tree_equity_score"})
161
+
162
+ tes_df["TRACT_GEOID"] = tes_df["GEOID"].str[:11]
163
+ gdf["TRACT_GEOID"] = gdf["GEOID"].str[:11]
164
+
165
+ gdf = gdf.merge(tes_df[["TRACT_GEOID","tree_equity_score"]], on="TRACT_GEOID", how="left")
166
+ gdf = gdf.drop(columns="TRACT_GEOID")
167
+ gdf = gdf.drop_duplicates(subset="GEOID", keep="first")
168
+ print(f" Joined TES for {gdf['tree_equity_score'].notna().sum()} block groups")
169
+ else:
170
+ print(" ⚠ File not found — using NaN placeholders")
171
+ gdf["tree_equity_score"] = np.nan
172
+
173
+ # Step 5: Save to DuckDB
174
+
175
+ print("Step 5 — Saving to DuckDB...")
176
+
177
+ gdf_out = gdf.copy()
178
+ gdf_out["geometry_wkt"] = gdf_out["geometry"].to_wkt()
179
+ df_out = pd.DataFrame(gdf_out.drop(columns="geometry"))
180
+
181
+ print(f" Columns: {df_out.columns.tolist()}")
182
+ print(f" Income non-null: {df_out['median_income'].notna().sum()}")
183
+ print(f" NDVI non-null: {df_out['ndvi_mean'].notna().sum()}")
184
+ print(f" TES non-null: {df_out['tree_equity_score'].notna().sum()}")
185
+
186
+ con = duckdb.connect(DB_PATH)
187
+ con.execute("DROP TABLE IF EXISTS block_groups")
188
+ con.execute("CREATE TABLE block_groups AS SELECT * FROM df_out")
189
+
190
+ con.execute("DROP TABLE IF EXISTS city_baselines")
191
+ con.execute("""
192
+ CREATE TABLE city_baselines AS
193
+ SELECT
194
+ ROUND(AVG(pct_minority), 1) AS baseline_minority_pct,
195
+ ROUND(AVG(ndvi_mean), 4) AS baseline_ndvi,
196
+ ROUND(AVG(median_income),0) AS baseline_income
197
+ FROM block_groups
198
+ WHERE total_pop > 0
199
+ """)
200
+
201
+ print(f"\n✅ Done! Saved {len(df_out)} block groups -> {DB_PATH}")
202
+ print(" Now run: solara run app.py")
processed_dashboard.db ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c748604d73c1798511ea30169d8750a94da0260bb333dd71211164298de752fd
3
+ size 18624512
requirements.txt ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ solara>=1.32.0
2
+ duckdb>=1.0.0
3
+ pandas>=2.0.0
4
+ geopandas>=0.14.0
5
+ leafmap>=0.36.0
6
+ ipywidgets>=8.0.0
7
+ shapely>=2.0.0
8
+ pyproj>=3.6.0
9
+ mapclassify>=2.5.0
10
+ matplotlib>=3.8.0
11
+ numpy>=1.26.0
12
+ requests>=2.31.0
13
+ earthengine-api>=0.1.370