# Maine geography package — v1.2 (2026-10-14; v1 of 2026-09-30, v1.1 of 2026-10-05, with the fixes listed under "What changed")

Map boundaries and the tables that tie every place to every district, for every districting plan since 2003.
Everything keys to the same `unit_id` as the registration, election, census and scores tables (via `megis_geocode`,
the State of Maine's town code that `registration-data/units.csv` already carries).

## Files

| File | What it is |
|---|---|
| `towns.geojson` | One polygon (or multipolygon) per Maine town, city, plantation **and unorganized township** — 923 places, from the Maine GeoLibrary's official *Town and Townships Boundary Polygons* layer (Feb 2024 edit). Coastal water polygons removed, so the shapes are the land (plus inland lakes and rivers) and the islands. Properties: `megis_geocode`, `unit_id` (blank for the 389 places — almost all unorganized townships — that are not registration units), `name`, `county`. Simplified to ~40 m for the web (3.3 MB). |
| `counties.geojson`, `state.geojson` | The 16 counties and the state outline, dissolved from the town polygons. |
| `congress_2003 / 2011 / 2021.geojson` | U.S. House districts under each plan (2003 plan used for the 2004–2010 elections, 2011 plan for 2012–2020, 2021 plan for 2022 on). |
| `senate_2003 / 2013 / 2021.geojson`, `house_2003 / 2013 / 2021.geojson` | State Senate and State House districts under each plan (2003 plan used for the 2004–2012 elections, 2013 plan for 2014–2020, 2021 plan for 2022 on). Properties: `level`, `plan_year`, `district`. |
| `county_commissioners_2013.geojson`, `county_commissioners_2021_with_2024_update.geojson` | County commissioner districts: the 2013 plan (58 districts) and the 2021 plan with Franklin County's 2024 change from 3 to 5 districts applied (60 districts). Property `district_id` is `County-N`. |
| `town_attributes.csv` | One row per place (923): 2020 Census population and housing units (**including every unorganized township**, which the Census never publishes separately), area in square miles, population density, number of island polygons, whether it is in the LURC/unorganized territory or Baxter State Park, its school administrative unit (2026-27), centroid, a guaranteed-inside label point and bounding box. |
| `town_district_crosswalk_all_plans.csv` | Which district(s) each place is in, under every plan (11 level × plan combinations, 10,624 rows in v1.1; v1 had 10,629, not the 10,662 its README stated), with 2020 population and housing units in each overlap and the share of the town and of the district that overlap represents. `town_split = yes` marks places with residents in more than one district at that level. |
| `districts_summary.csv` | Every district under every plan with its 2020 population, housing units, number of towns and number of split towns. |
| `block_assignments_all_plans.csv` | All 47,138 2020 Census blocks with their internal point (lat/lon), 2020 population and housing units, their place (`megis_geocode`, `unit_id`) and their district under every plan. This is the table the crosswalk is summed from; use it for any custom region. |
| `census_town_district_crosswalk.csv`, `census_block_assignments.csv` | The current-plan (2021) versions of the two crosswalk files that ship in `census-data/`, rebuilt from the state's official block equivalency files — copied there as census data v1.1. |
| `sources/` | The original downloads, gzipped: every GeoLibrary layer used (full-resolution towns, all district plans, 2010 voting districts, the 2024 commissioner update, school units) plus the block internal points from the Census Bureau's TIGERweb service. |
| `build_geo.py`, `finalize.py` | The code that made everything. |
| `regions.csv` | **Regions of Maine v1.0** (adopted 2026-10-02): every GeoLibrary town/township (923) with its region (`region_id`, `region`), county, 2020 population, area, LURC flag and school unit. |
| `regions_reporting_units.csv` | The 266 (v1.1: 217) results/registration units that have no GeoLibrary polygon (township reporting groups, retired units, results-only `MPD-08xx/09xx` codes, the 1969–70 township lines and the Maine Register 1868–1928 historical units `MPD-0967…1032`) and the region each one was given, with the `basis` (host town or successor town, township of the same name, county default for unorganized territory, or a special rule). The 16 "Men in Service" soldier-vote lines (1918) have **no region**, like UOCAVA ballots. |
| `regions_census_cousub.csv` | Every Census county subdivision in `census-data/census_profile.csv` (529, the shapes the site's maps draw and the ACS reports; v1.1 uses the ACS 2020–2024 codes, see below) with its region by majority of 2020 blocks; `split = yes` marks the two Somerset UT aggregates that straddle a region border (both go to North Woods). |
| `regions.geojson`, `regions_summary.csv` | The 12 regions dissolved from the town polygons, and one row per region (population, area, density, places, counties). |
| `build_regions.py` | Builds the five region files. |

## How the district tables were made

Every 2020 Census block has a Census-defined "internal point". Each block's point was placed inside the town polygons
and inside every district layer; the block's population then rolls up to the town × district crosswalk. Two overrides
make the result authoritative rather than approximate:

* For the **2021 plan** the state's own *Block Equivalency Files* (the Apportionment Commission's official block-by-block
  district assignments, also on the GeoLibrary) replace the point-in-polygon result. They agreed with it on all but one
  unpopulated block, and with the Census Bureau's TIGERweb boundaries used in census data v1 on all but six blocks (nine
  people, all in North Haven — see FLAGS).
* For **organized towns** the Census Bureau's own block-to-county-subdivision assignment replaces the point-in-polygon
  result (145 coastal blocks, 50 people, whose internal point falls in water). Result: 490 of the 493 organized places
  with a Census row match the 2020 Census population exactly; the three that differ are explained in FLAGS.

Checks against the election files: for every State House, State Senate and U.S. House contest from 2004 to 2026,
every town-to-district pairing the Secretary of State reported also appears in the crosswalk for the plan in force
that year, except a short list of stray rows carrying 0–13 votes that are listed in FLAGS.

## Numbers worth knowing

* 2021 plan: Congressional districts 681,179 / 681,180; Senate districts 37,121–40,798; House districts 8,578–9,465.
* 2013 plan: Senate 33,861–44,712 and House 7,801–11,587 measured with 2020 population (the plan was drawn on 2010 population, so the spread reflects a decade of change, not malapportionment).
* 160 of the 389 places that are not registration units (unorganized townships, gores, grants and islands) had residents in 2020 — 1,922 people in all; the largest is Fletchers Landing Twp (132). (v1 said 163 / 1,957; that figure could not be reproduced from `town_attributes.csv` and is replaced by the count above, which is `unit_id` blank and `pop_2020` > 0. Counting by the LURC flag instead gives 159 / 1,916.)

## Regions of Maine (v1.0, 2026-10-02)

Twelve regions built from whole towns, drawn by judgement: where people commute and shop (hub-city pull) combined with the regional names Mainers actually use, adjusted by hand. Order and ids: SC Southern Coast, GP Greater Portland, SL Sebago Lakes Region, WM Western Maine, LA Lewiston–Auburn, MC Midcoast, CM Central Maine, GB Greater Bangor, AC Acadia Region, DE Downeast, NW North Woods Region, TC The County. The map is `site-design/regions-draft/maine_regions_v1.0.jpg`; the reasoning is in the project doc `site-design/regions-analysis` (v1.0). Region results are sums of town rows (they equal the county-sum totals; UOCAVA ballots, which have no town, are left out exactly as for counties). Regions do not follow county lines, so pre-1990 contests that only print county totals have no region figures.

## What changed in v1.2 (2026-10-14)

* **`regions_reporting_units.csv`: 49 rows added (217 → 266)** for the units election results v3.11 created (MPD-1033 … MPD-1081, 1831–1892 historical places and unidentified tabulation-book lines). 31 get a region (successor town, present-day township, a one-region county, or a place whose every candidate location is in one region); 18 are left without a region because no single region is certain, with the reason in `basis` (FLAGS §10). Every `unit_id` in the registration units and the v3.11 election additions is again in `regions.csv` or this file. (Audit II, GC-5.)
* **1983 apportionment plan** (`district_plans_1983_1993/plan_1983.csv`): Litchfield added to House District 93 and Mattawamkeag to Senate District 3 (601 → 602 House rows, 533 → 534 Senate rows). Both were missing from LD 1320 as printed. Litchfield is also missing from House Districts 91–95 of the enacted law (PL 1983 c. 93); the enacted Senate text could not be read online. Their districts come from the Secretary of State's returns, which report them there in every election 1986–1992. Each added row says so in `note` and `source_page`. (P-169(4).)
* FLAGS: Drew's deorganization year corrected to 2023 (§2); the Edinburg 2003-plan House split (HD 12 / HD 13) that the crosswalk cannot show is documented (§4, GC-14), and the Millinocket SD 4 note now says that row also appears in the 2022 general election (§4); new §10 on historical units without a region.
* No geometry, block or crosswalk figure changed: the Edinburg split could not be fixed from `block_assignments_all_plans.csv`, which puts all 18 Edinburg blocks in HD 12.
* Script: `fix_v1_2_geography.py`.

## What changed in v1.1 (2026-10-05)

* **Two GIS slivers corrected.** Under the 2003 congressional plan one Harrison block (91 people) had its 2020 internal point 5 m over the Oxford County line and was counted in CD 2; under the 2013 county-commissioner plan one Westbrook block (42 people), 15 m from the Gorham line, was counted in Cumberland-1. Every other Cumberland County block is in CD 1 under the 2003 plan, the rest of Westbrook is in Cumberland-4, and the election files never report Harrison in CD 2 / House 100 (2004–2012) or Westbrook in Commissioner 1 / Senate 30 / House 27 (2014–2020). Both blocks now carry the town's district: Harrison 2003 CD 1 and House 98; Westbrook 2013 Cumberland-4, Senate 28 and House 34 (the district of its five nearest Westbrook blocks). `town_split` is now `no` for Harrison (2003 congress, 2003 House) and Westbrook (2013 commissioner). Ten district rows in `districts_summary.csv` change by 42 or 91 people.
* **Perkins.** Three empty Swan Island blocks (Sagadahoc) had been given to Perkins Twp in Franklin County (`07818`, MPD-0139) because the Census calls Swan Island "Perkins UT"; they now belong to the Perkins Twp Swan Island polygon (`23801`). Perkins Twp (Franklin) no longer shows phantom zero-population rows in Sagadahoc districts; `town_attributes.csv` block counts 13 → 10 and 0 → 3; populations unchanged.
* **`regions_census_cousub.csv` on current Census codes**: Drew UT 2301918582, Codyville UT 2302913612 and North Oxford UT 2301752575 (which absorbed Magalloway) replace the 2020-Census codes 2301918580, 2302913610 and 2301742835 (532 → 529 rows; every row now matches `census_profile.csv`). Perkins UT (Swan Island) moves from Western Maine to Midcoast with its blocks.
* **`regions_reporting_units.csv`**: the 16 soldier-vote lines added with no region; every `unit_id` in the registration units and election additions is now in `regions.csv` or this file.
* Script: `fix_v1_1_geography.py` (reproduces the v1 crosswalk exactly from the block table before changing anything).
