transcript.md
↑ ContentsState Planner chat · https://stateplanner.com
- State: Ohio (OH)
- Started: October 21, 2026, 11:43 PM UTC
- Runtime: 42 sec
- Status: completed
Prompt
Map Ohio's Adopt-A-Highway segments, colored by the kind of group that adopted them. How many segments does each ODOT district have and how many are adopted, and which groups have logged the most pickups and bags of litter?
Model: Anthropic: Claude Haiku 5.5 (anthropic/claude-haiku-5.5, via openrouter)
Response
Adopt-A-Highway segments by ODOT district, status as of the 2026-10-19 load
| District | Segments | Adopted | Share adopted | Retired | Cancelled | Non-adoptable | No status |
|---|---|---|---|---|---|---|---|
| 01 | 273 | 112 | 41% | 103 | 2 | 54 | 2 |
| 02 | 291 | 63 | 22% | 188 | 0 | 39 | 1 |
| 03 | 251 | 85 | 34% | 48 | 7 | 109 | 2 |
| 04 | 154 | 67 | 44% | 0 | 1 | 85 | 1 |
| 05 | 239 | 79 | 33% | 95 | 7 | 56 | 2 |
| 06 | 583 | 181 | 31% | 4 | 0 | 384 | 14 |
| 07 | 369 | 147 | 40% | 144 | 19 | 59 | 0 |
| 08 | 181 | 96 | 53% | 10 | 1 | 71 | 3 |
| 09 | 130 | 13 | 10% | 20 | 3 | 94 | 0 |
| 10 | 340 | 76 | 22% | 173 | 39 | 46 | 6 |
| 11 | 251 | 124 | 49% | 41 | 53 | 33 | 0 |
| 12 | 523 | 184 | 35% | 242 | 22 | 73 | 2 |
| Ohio | 3,585 | 1,227 | 34% | 1,068 | 154 | 1,103 | 33 |
"Adopted" means segment status is Adopted. Share adopted is adopted divided by all segments in the district, so it includes the non-adoptable and retired ones in the denominator.
Currently adopted segments by group type
| Group type | Adopted segments | Groups | Pickups | Bags |
|---|---|---|---|---|
| Business | 175 | 129 | 3 | 785 |
| Service Club | 127 | 98 | 2 | 330 |
| Other | 113 | 69 | 6 | 841 |
| Fraternity/Sorority | 103 | 51 | 0 | 189 |
| Community Service | 95 | 62 | 0 | 889 |
| In Memory | 76 | 57 | 1 | 842 |
| Family/Friends | 72 | 51 | 0 | 98 |
| School | 48 | 38 | 8 | 335 |
| Church | 35 | 28 | 0 | 288 |
| Youth Group | 16 | 16 | 0 | 0 |
| Individual | 11 | 6 | 0 | 0 |
| Type not recorded | 356 | 297 | 15 | 447 |
Bags here are per segment as recorded. The pickup and bag figures are the group's own logs, not an audit. Most of the adopted segments are linked to no permit record, so pickups are sparse.
Groups with the most bags logged (all segments, any status)
| Group | Type | Segments | Pickups | Bags |
|---|---|---|---|---|
| In Memory of SPC Aaron Gardner | In Memory | 1 | 0 | 565 |
| Citizens' Climate Lobby | Community Service | 1 | 0 | 458 |
| Owens Corning | Business | 3 | 7 | 241 |
| Muskingum Adult Probation | Other | 1 | 0 | 205 |
| Meadow View Church of Christ | Church | 1 | 0 | 166 |
| Covestro | Business | 1 | 0 | 134 |
| Amazon Web Services | Business | 5 | 0 | 117 |
| AORD Athens Ohio Roller Derby | Other | 3 | 0 | 114 |
| Licking Valley Lions Club | Service Club | 1 | 0 | 105 |
| New Concord United M Church | (blank) | 2 | 3 | 95 |
Groups with the most pickups logged (all segments, any status)
| Group | Type | Segments | Pickups | Bags |
|---|---|---|---|---|
| Garver Asset Protection | Business | 3 | 9 | 41 |
| Shelly & Sands | (blank) | 2 | 8 | 93 |
| Owens Corning | Business | 3 | 7 | 241 |
| Hocking College Dental Hygiene Clinic | School | 3 | 5 | 25 |
| Fairfield Co Democratic Party | Other | 3 | 4 | 75 |
| Central Ohio Roller Derby | (blank) | 1 | 4 | 44 |
| Boy Scout #826 | (blank) | 1 | 4 | 18 |
| Wayne Grange | (blank) | 1 | 4 | 15 |
Map: adopted segments coloured by group type

Legend (1,227 adopted segments):
- Blue: Business
- Green: Community Service
- Orange: Service Club
- Purple: In Memory
- Brown: Other
- Pink: Fraternity/Sorority
- Red: Family/Friends
- Teal: School
- Yellow-green: Church
- Navy: Youth Group
- Light pink: Individual
- Grey: type not recorded
Caveats
- Pickups are recorded per permit, and only 197 adopted segments carry a permit number. Pickup totals are therefore small and incomplete. Bags are recorded per segment, so the bag totals are the more complete measure.
- Group names are free text. A group that appears under two spellings is counted twice, and the ranking tables use the name as typed.
- The group-type rows are roughly tallied. The 356 "not recorded" segments are counted separately.
Exploratory Queries
Query 1 — See segment status and group type values
SELECT segment_status,
group_type,
count(*) n,
count(group_name) named,
sum(total_num_pick_ups) picks,
sum(total_num_of_bags) bags
FROM oh_adopt_a_highway
GROUP BY 1,
2
ORDER BY 3 DESC
| segment_status | group_type | n | named | picks | bags |
|---|---|---|---|---|---|
| Non-Adoptable Sponsor-A-Highway | 693 | 96 | |||
| Retired | 510 | 509 | 33 | 242 | |
| Non-Adoptable Unsafe | 401 | 1 | |||
| Adopted | 356 | 356 | 15 | 447 | |
| Adopted | Business | 175 | 175 | 3 | 785 |
| Retired | Business | 171 | 171 | 19 | 332 |
| Adopted | Service Club | 127 | 127 | 2 | 330 |
| Adopted | Other | 113 | 113 | 6 | 841 |
| Adopted | Fraternity/Sorority | 103 | 103 | 0 | 203 |
| Adopted | Community Service | 95 | 95 | 0 | 889 |
| Adopted | In Memory | 76 | 76 | 1 | 847 |
| Adopted | Family/Friends | 72 | 72 | 0 | 98 |
| Retired | Community Service | 60 | 60 | 1 | 29 |
| Cancelled | 56 | 43 | |||
| Retired | Other | 55 | 55 | 5 | 36 |
| Retired | Fraternity/Sorority | 53 | 53 | ||
| Adopted | School | 48 | 48 | 8 | 335 |
| Retired | School | 44 | 44 | 6 | 26 |
| Retired | Church | 42 | 42 | 2 | 10 |
| Retired | Service Club | 41 | 41 | 2 | 26 |
| Retired | In Memory | 37 | 37 | 2 | 3 |
| Adopted | Church | 35 | 35 | 0 | 288 |
| Cancelled | Business | 31 | 31 | 2 | 11 |
| Retired | Family/Friends | 30 | 30 | 1 | 0 |
| 27 | 13 |
25 out of 47 are listed here.
Query 2 — Count segments and adopted segments per ODOT district
SELECT odot_district,
count(*) segments,
count(*) FILTER (
WHERE group_name IS NOT NULL
AND group_name <> ''
) adopted,
count(*) FILTER (
WHERE segment_status ILIKE '%avail%'
) available
FROM oh_adopt_a_highway
GROUP BY 1
ORDER BY 1
| odot_district | segments | adopted | available |
|---|---|---|---|
| 01 | 273 | 218 | 0 |
| 02 | 291 | 251 | 0 |
| 03 | 251 | 147 | 0 |
| 04 | 154 | 84 | 0 |
| 05 | 239 | 184 | 0 |
| 06 | 583 | 272 | 0 |
| 07 | 369 | 310 | 0 |
| 08 | 181 | 107 | 0 |
| 09 | 130 | 36 | 0 |
| 10 | 340 | 280 | 0 |
| 11 | 251 | 219 | 0 |
| 12 | 523 | 445 | 0 |
Query 3 — Break district segment counts down by status
SELECT odot_district,
count(*) segments,
count(*) FILTER (
WHERE segment_status = 'Adopted'
) adopted,
count(*) FILTER (
WHERE segment_status = 'Retired'
) retired,
count(*) FILTER (
WHERE segment_status = 'Cancelled'
) cancelled,
count(*) FILTER (
WHERE segment_status LIKE 'Non-Adoptable%'
) non_adoptable,
count(*) FILTER (
WHERE segment_status IS NULL
) no_status
FROM oh_adopt_a_highway
GROUP BY 1
ORDER BY 1
| odot_district | segments | adopted | retired | cancelled | non_adoptable | no_status |
|---|---|---|---|---|---|---|
| 01 | 273 | 112 | 103 | 2 | 54 | 2 |
| 02 | 291 | 63 | 188 | 0 | 39 | 1 |
| 03 | 251 | 85 | 48 | 7 | 109 | 2 |
| 04 | 154 | 67 | 0 | 1 | 85 | 1 |
| 05 | 239 | 79 | 95 | 7 | 56 | 2 |
| 06 | 583 | 181 | 4 | 0 | 384 | 14 |
| 07 | 369 | 147 | 144 | 19 | 59 | 0 |
| 08 | 181 | 96 | 10 | 1 | 71 | 3 |
| 09 | 130 | 13 | 20 | 3 | 94 | 0 |
| 10 | 340 | 76 | 173 | 39 | 46 | 6 |
| 11 | 251 | 124 | 41 | 53 | 33 | 0 |
| 12 | 523 | 184 | 242 | 22 | 73 | 2 |
Query 4 — Check whether pickup counts repeat across segments sharing a permit
SELECT count(*) segs,
count(DISTINCT permit_id) permits,
count(DISTINCT current_permit_number) cur_permits,
count(DISTINCT group_name) groups,
count(*) FILTER (
WHERE permit_id IS NULL
) no_permit
FROM oh_adopt_a_highway
WHERE segment_status = 'Adopted'
| segs | permits | cur_permits | groups | no_permit |
|---|---|---|---|---|
| 1227 | 197 | 336 | 879 | 1030 |
Query 5 — Check how pickups and bags repeat across segments of one permit
WITH a AS (
SELECT *
FROM oh_adopt_a_highway
WHERE segment_status = 'Adopted'
)
SELECT count(*) FILTER (
WHERE permit_id IS NOT NULL
) segs_with_permit,
count(DISTINCT permit_id) permits,
sum(total_num_pick_ups) FILTER (
WHERE permit_id IS NOT NULL
) raw_picks_with_permit,
(
SELECT sum(p)
FROM (
SELECT max(total_num_pick_ups) p
FROM a
WHERE permit_id IS NOT NULL
GROUP BY permit_id
) x
) dedup_picks,
sum(total_num_pick_ups) FILTER (
WHERE permit_id IS NULL
) picks_no_permit,
sum(total_num_of_bags) FILTER (
WHERE permit_id IS NULL
) bags_no_permit,
(
SELECT sum(p)
FROM (
SELECT max(total_num_of_bags) p
FROM a
WHERE permit_id IS NOT NULL
GROUP BY permit_id
) x
) dedup_bags
FROM a
| segs_with_permit | permits | raw_picks_with_permit | dedup_picks | picks_no_permit | bags_no_permit | dedup_bags |
|---|---|---|---|---|---|---|
| 197 | 197 | 35 | 35 | 0 | 4606 | 457 |
Query 6 — See whether bag totals repeat across a group's segments
WITH a AS (
SELECT *
FROM oh_adopt_a_highway
WHERE segment_status = 'Adopted'
)
SELECT count(*) groups,
sum(segs) segs,
sum(
CASE
WHEN distinct_bags = 1
AND segs > 1 THEN 1
ELSE 0
END
) groups_same_bags_multi,
sum(
CASE
WHEN segs > 1 THEN 1
ELSE 0
END
) multi_seg_groups,
max(segs) max_segs
FROM (
SELECT group_name,
count(*) segs,
count(DISTINCT total_num_of_bags) distinct_bags
FROM a
GROUP BY group_name
) g
| groups | segs | groups_same_bags_multi | multi_seg_groups | max_segs |
|---|---|---|---|---|
| 879 | 1227 | 29 | 163 | 11 |
Query 7 — Rank groups by bags of litter
WITH r AS (
SELECT group_name,
group_type,
coalesce(permit_id, segment_id) k,
segment_status,
max(total_num_pick_ups) pk,
max(total_num_of_bags) bg,
count(*) segs
FROM oh_adopt_a_highway
WHERE group_name IS NOT NULL
AND group_name <> ''
GROUP BY 1,
2,
3,
4
),
g AS (
SELECT group_name,
max(group_type) gt,
string_agg(DISTINCT segment_status, ', ') statuses,
sum(segs) segments,
sum(coalesce(pk, 0)) picks,
sum(coalesce(bg, 0)) bags
FROM r
GROUP BY group_name
)
SELECT group_name AS "Group",
gt AS "Type",
statuses AS "Segment status",
segments AS "Segments",
picks AS "Pickups",
bags AS "Bags"
FROM g
ORDER BY bags DESC
LIMIT 20
| Group | Type | Segment status | Segments | Pickups | Bags |
|---|---|---|---|---|---|
| In Memory of SPC Aaron Gardner | In Memory | Adopted | 1 | 0 | 565 |
| Citizens' Climate Lobby | Community Service | Adopted | 1 | 0 | 458 |
| Owens Corning | Business | Cancelled, Retired | 3 | 7 | 241 |
| Muskingum Adult Probation | Other | Adopted | 1 | 0 | 205 |
| Meadow View Church of Christ | Church | Adopted | 1 | 0 | 166 |
| Covestro | Business | Adopted | 1 | 0 | 134 |
| Amazon Web Services | Business | Adopted | 5 | 0 | 117 |
| AORD Athens Ohio Roller Derby | Other | Adopted, Cancelled, Retired | 3 | 0 | 114 |
| Licking Valley Lions Club | Service Club | Adopted | 1 | 0 | 105 |
| New Concord United M Church | Retired | 2 | 3 | 95 | |
| Shelly & Sands | Adopted | 2 | 8 | 93 | |
| Memory of Johnathan P Wood | In Memory | Adopted | 2 | 0 | 92 |
| Judge Drew Canon, Adult Prob. | Other | Adopted | 2 | 1 | 81 |
| Zane State College Natural Resources | School | Adopted | 1 | 0 | 81 |
| River View Student Council | School | Adopted | 2 | 1 | 76 |
| Fairfield Co Democratic Party | Other | Adopted | 3 | 4 | 75 |
| Friends of 690 | Community Service | Adopted | 1 | 0 | 71 |
| Williamson Committee (Shane & Rona & Ray Ray) | Other | Adopted | 1 | 0 | 71 |
| Progressive Foam Tech. | Business | Adopted | 3 | 1 | 62 |
| Oldcastle Infrastructure | Business | Adopted | 1 | 0 | 59 |
Query 8 — Rank groups by pickups
WITH r AS (
SELECT group_name,
group_type,
coalesce(permit_id, segment_id) k,
segment_status,
max(total_num_pick_ups) pk,
max(total_num_of_bags) bg,
count(*) segs
FROM oh_adopt_a_highway
WHERE group_name IS NOT NULL
AND group_name <> ''
GROUP BY 1,
2,
3,
4
),
g AS (
SELECT group_name,
max(group_type) gt,
string_agg(DISTINCT segment_status, ', ') statuses,
sum(segs) segments,
sum(coalesce(pk, 0)) picks,
sum(coalesce(bg, 0)) bags
FROM r
GROUP BY group_name
)
SELECT group_name AS "Group",
gt AS "Type",
statuses AS "Segment status",
segments AS "Segments",
picks AS "Pickups",
bags AS "Bags"
FROM g
ORDER BY picks DESC,
bags DESC
LIMIT 20
| Group | Type | Segment status | Segments | Pickups | Bags |
|---|---|---|---|---|---|
| Garver Asset Protection | Business | Adopted, Retired | 3 | 9 | 41 |
| Shelly & Sands | Adopted | 2 | 8 | 93 | |
| Owens Corning | Business | Cancelled, Retired | 3 | 7 | 241 |
| Hocking College Dental Hygiene Clinic | School | Cancelled, Retired | 3 | 5 | 25 |
| Fairfield Co Democratic Party | Other | Adopted | 3 | 4 | 75 |
| Central Ohio Roller Derby | Retired | 1 | 4 | 44 | |
| Boy Scout #826 | Retired | 1 | 4 | 18 | |
| Wayne Grange | Retired | 1 | 4 | 15 | |
| New Concord United M Church | Retired | 2 | 3 | 95 | |
| Mt. Vernon Nazarene Univ. A.D. | School | Adopted | 2 | 3 | 54 |
| North Valley Bank | Business | Retired | 1 | 3 | 50 |
| Gamblers MCC | Other | Retired | 1 | 3 | 22 |
| Cowboy's Caretakers | Retired | 1 | 3 | 0 | |
| The Gels Home | Retired | 1 | 3 | 0 | |
| Lakewood National Honor Society | School | Adopted | 2 | 2 | 20 |
| Zane State Criminal Justice | School | Adopted | 2 | 2 | 19 |
| Muskingum Hills Ruritan | Other | Retired | 1 | 2 | 14 |
| EMerge Real Estate | Business | Cancelled | 2 | 2 | 11 |
| 16:15 Skate Ministry | Retired | 1 | 2 | 11 | |
| Keene UMC | Church | Retired | 1 | 2 | 10 |
Query 9 — Totals by group type for currently adopted segments
WITH r AS (
SELECT group_type,
coalesce(permit_id, segment_id) k,
segment_status,
group_name,
max(total_num_pick_ups) pk,
max(total_num_of_bags) bg
FROM oh_adopt_a_highway
WHERE segment_status = 'Adopted'
GROUP BY 1,
2,
3,
4
)
SELECT coalesce(group_type, '(blank)') AS "Group type",
count(*) AS "Adopted segments",
count(DISTINCT group_name) AS "Groups",
sum(coalesce(pk, 0)) AS "Pickups",
sum(coalesce(bg, 0)) AS "Bags"
FROM r
GROUP BY 1
ORDER BY "Bags" DESC
| Group type | Adopted segments | Groups | Pickups | Bags |
|---|---|---|---|---|
| Community Service | 94 | 62 | 0 | 889 |
| In Memory | 73 | 57 | 1 | 842 |
| Other | 112 | 69 | 6 | 841 |
| Business | 174 | 129 | 3 | 785 |
| (blank) | 355 | 297 | 15 | 447 |
| School | 48 | 38 | 8 | 335 |
| Service Club | 127 | 98 | 2 | 330 |
| Church | 35 | 28 | 0 | 288 |
| Fraternity/Sorority | 101 | 51 | 0 | 189 |
| Family/Friends | 72 | 51 | 0 | 98 |
| Youth Group | 16 | 16 | 0 | 0 |
| Individual | 11 | 6 | 0 | 0 |
Map Layer Queries
Adopted segments — colored by "group_kind": Business (#1f77b4), Community Service (#2ca02c), Service Club (#ff7f0e), In Memory (#9467bd), Other (#8c564b), Fraternity/Sorority (#e377c2), Family/Friends (#d62728), School (#17becf), Church (#bcbd22), Youth Group (#000080), Individual (#ff99cc), Type not recorded (#555555)
SELECT geom,
coalesce(nullif(trim(group_type), ''), 'Not recorded') AS group_kind,
group_name AS "Group",
route_type || ' ' || route_nbr AS "Route",
county AS "County",
odot_district AS "ODOT district",
total_num_pick_ups AS "Pickups(permit)",
total_num_of_bags AS "Bags"
FROM oh_adopt_a_highway
WHERE segment_status = 'Adopted'
Picture: maps/turn-1-adopt-a-highway-group-types.png
Used Data Sets
oh_adopt_a_highway— last synced 2026-10-20 · 3,585 rows