├── djapp ├── __init__.py ├── geo │ ├── __init__.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── clean_divisions.py │ │ │ └── load_divisions.py │ ├── migrations │ │ ├── __init__.py │ │ ├── 0002_remove_division_created_at.py │ │ ├── 0003_division_state.py │ │ └── 0001_initial.py │ └── models.py ├── urls.py ├── asgi.py ├── wsgi.py └── settings.py ├── .python-version ├── .dockerignore ├── tox.ini ├── tileset-screenshot.png ├── .gitignore ├── configs ├── jurisdictions │ ├── gu.yml │ ├── as.yml │ ├── vi.yml │ ├── mp.yml │ ├── pr.yml │ ├── id.yml │ ├── ne.yml │ ├── ia.yml │ ├── ks.yml │ ├── me.yml │ ├── ut.yml │ ├── al.yml │ ├── ar.yml │ ├── az.yml │ ├── ct.yml │ ├── fl.yml │ ├── hi.yml │ ├── il.yml │ ├── in.yml │ ├── ky.yml │ ├── la.yml │ ├── mo.yml │ ├── ms.yml │ ├── nm.yml │ ├── ok.yml │ ├── or.yml │ ├── tn.yml │ ├── tx.yml │ ├── wy.yml │ ├── ca.yml │ ├── nc.yml │ ├── nj.yml │ ├── ri.yml │ ├── sc.yml │ ├── dc.yml │ ├── ak.yml │ ├── md.yml │ ├── sd.yml │ ├── wv.yml │ ├── va.yml │ ├── ny.yml │ ├── de.yml │ ├── pa.yml │ ├── mt.yml │ ├── oh.yml │ ├── wa.yml │ ├── wi.yml │ ├── ga.yml │ ├── nd.yml │ ├── mn.yml │ ├── mi.yml │ ├── co.yml │ ├── nv.yml │ ├── vt.yml │ ├── ma.yml │ ├── nh.yml │ └── usa.yml └── settings.yml ├── docker-compose.yml ├── endpoint ├── tripod.yaml └── lookup.py ├── utils ├── __init__.py ├── bulk.py ├── general.py ├── tiger.py ├── mapbox.py └── geojson.py ├── pyproject.toml ├── testing └── load-fake-division.sh ├── .yamllint ├── .github └── workflows │ ├── deploy.yml │ └── ci.yml ├── LICENSE ├── Dockerfile ├── generate-geo-data.py └── README.md /djapp/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djapp/geo/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- 1 | 3.9.15 2 | -------------------------------------------------------------------------------- /djapp/geo/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djapp/geo/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | data 2 | .circleci 3 | -------------------------------------------------------------------------------- /djapp/geo/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /djapp/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path # noqa: F401 2 | 3 | urlpatterns = [] 4 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [flake8] 2 | basepython = python3 3 | ignore = E501,E402,W503,F401 4 | exclude = .git 5 | -------------------------------------------------------------------------------- /tileset-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openstates/openstates-geo/HEAD/tileset-screenshot.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | data 2 | final-geojson 3 | *.mbtiles 4 | *.DS_Store 5 | *.pyc 6 | endpoint/*.zip 7 | endpoint/awslambda-psycopg2 8 | .idea/ 9 | testing/divisiondata 10 | .env-file 11 | env-file 12 | -------------------------------------------------------------------------------- /configs/jurisdictions/gu.yml: -------------------------------------------------------------------------------- 1 | name: Guam 2 | os-id-prefix: "ocd-division/country:us/territory:gu" 3 | id-mappings: 4 | cd: 5 | sld-match: 'cd-66(\d+)' 6 | ignored_chambers: 7 | - sldl 8 | - sldu 9 | -------------------------------------------------------------------------------- /configs/jurisdictions/as.yml: -------------------------------------------------------------------------------- 1 | name: American Samoa 2 | os-id-prefix: "ocd-division/country:us/territory:as" 3 | id-mappings: 4 | cd: 5 | sld-match: 'cd-60(\d+)' 6 | ignored_chambers: 7 | - sldl 8 | - sldu 9 | -------------------------------------------------------------------------------- /configs/jurisdictions/vi.yml: -------------------------------------------------------------------------------- 1 | name: Virgin Islands 2 | os-id-prefix: "ocd-division/country:us/territory:vi" 3 | id-mappings: 4 | cd: 5 | sld-match: 'cd-78(\d+)' 6 | ignored_chambers: 7 | - sldl 8 | - sldu 9 | -------------------------------------------------------------------------------- /configs/jurisdictions/mp.yml: -------------------------------------------------------------------------------- 1 | name: Northern Mariana Islands 2 | os-id-prefix: "ocd-division/country:us/territory:mp" 3 | id-mappings: 4 | cd: 5 | sld-match: 'cd-69(\d+)' 6 | ignored_chambers: 7 | - sldl 8 | - sldu 9 | -------------------------------------------------------------------------------- /configs/jurisdictions/pr.yml: -------------------------------------------------------------------------------- 1 | name: Puerto Rico 2 | os-id-prefix: "ocd-division/country:us/territory:pr" 3 | id-mappings: 4 | sldl: 5 | sld-match: 'sldl-720(\d+)' 6 | sldu: 7 | sld-match: 'sldu-7200(\d)' 8 | cd: 9 | sld-match: 'cd-72(\d+)' 10 | -------------------------------------------------------------------------------- /configs/jurisdictions/id.yml: -------------------------------------------------------------------------------- 1 | name: Idaho 2 | os-id-prefix: "ocd-division/country:us/state:id" 3 | id-mappings: 4 | sldl: 5 | sld-match: 'sldl-160([\d]+)' 6 | split_districts: true 7 | sldu: 8 | sld-match: 'sldu-160([\d]+)' 9 | cd: 10 | sld-match: 'cd-160(\d)' 11 | -------------------------------------------------------------------------------- /configs/jurisdictions/ne.yml: -------------------------------------------------------------------------------- 1 | name: Nebraska 2 | os-id-prefix: "ocd-division/country:us/state:ne" 3 | id-mappings: 4 | sldu: 5 | key: DISTRICT 6 | sld-match: 'sldu-310([\d]+)' 7 | cd: 8 | key: DISTRICT 9 | sld-match: 'cd-310(\d)' 10 | ignored_chambers: 11 | - sldl 12 | -------------------------------------------------------------------------------- /configs/jurisdictions/ia.yml: -------------------------------------------------------------------------------- 1 | name: Iowa 2 | os-id-prefix: "ocd-division/country:us/state:ia" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-19([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-190([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-190(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ks.yml: -------------------------------------------------------------------------------- 1 | name: Kansas 2 | os-id-prefix: "ocd-division/country:us/state:ks" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-20([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-200([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-200(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/me.yml: -------------------------------------------------------------------------------- 1 | name: Maine 2 | os-id-prefix: "ocd-division/country:us/state:me" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-23([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-230([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-230(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ut.yml: -------------------------------------------------------------------------------- 1 | name: Utah 2 | os-id-prefix: "ocd-division/country:us/state:ut" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-490([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-490([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-490(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/al.yml: -------------------------------------------------------------------------------- 1 | name: Alabama 2 | os-id-prefix: "ocd-division/country:us/state:al" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-01([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-010([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-010(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ar.yml: -------------------------------------------------------------------------------- 1 | name: Arkansas 2 | os-id-prefix: "ocd-division/country:us/state:ar" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-05([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-050([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-050(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/az.yml: -------------------------------------------------------------------------------- 1 | name: Arizona 2 | os-id-prefix: "ocd-division/country:us/state:az" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-040([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-040([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-040(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ct.yml: -------------------------------------------------------------------------------- 1 | name: Connecticut 2 | os-id-prefix: "ocd-division/country:us/state:ct" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-09([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-090([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-090(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/fl.yml: -------------------------------------------------------------------------------- 1 | name: Florida 2 | os-id-prefix: "ocd-division/country:us/state:fl" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-12([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-120([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-12([\d]+)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/hi.yml: -------------------------------------------------------------------------------- 1 | name: Hawaii 2 | os-id-prefix: "ocd-division/country:us/state:hi" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-150([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-150([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-150(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/il.yml: -------------------------------------------------------------------------------- 1 | name: Illinois 2 | os-id-prefix: "ocd-division/country:us/state:il" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-17([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-170([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-17([\d]+)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/in.yml: -------------------------------------------------------------------------------- 1 | name: Indiana 2 | os-id-prefix: "ocd-division/country:us/state:in" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-18([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-180([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-180(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ky.yml: -------------------------------------------------------------------------------- 1 | name: Kentucky 2 | os-id-prefix: "ocd-division/country:us/state:ky" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-21([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-210([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-210(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/la.yml: -------------------------------------------------------------------------------- 1 | name: Louisiana 2 | os-id-prefix: "ocd-division/country:us/state:la" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-22([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-220([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-220(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/mo.yml: -------------------------------------------------------------------------------- 1 | name: Missouri 2 | os-id-prefix: "ocd-division/country:us/state:mo" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-29([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-290([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-290(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ms.yml: -------------------------------------------------------------------------------- 1 | name: Mississippi 2 | os-id-prefix: "ocd-division/country:us/state:ms" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-28([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-280([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-280(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/nm.yml: -------------------------------------------------------------------------------- 1 | name: New Mexico 2 | os-id-prefix: "ocd-division/country:us/state:nm" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-350([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-350([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-350(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ok.yml: -------------------------------------------------------------------------------- 1 | name: Oklahoma 2 | os-id-prefix: "ocd-division/country:us/state:ok" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-40([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-400([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-400(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/or.yml: -------------------------------------------------------------------------------- 1 | name: Oregon 2 | os-id-prefix: "ocd-division/country:us/state:or" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-410([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-410([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-410(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/tn.yml: -------------------------------------------------------------------------------- 1 | name: Tennessee 2 | os-id-prefix: "ocd-division/country:us/state:tn" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-47([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-470([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-470(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/tx.yml: -------------------------------------------------------------------------------- 1 | name: Texas 2 | os-id-prefix: "ocd-division/country:us/state:tx" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-48([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-480([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-48([\d]+)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/wy.yml: -------------------------------------------------------------------------------- 1 | name: Wyoming 2 | os-id-prefix: "ocd-division/country:us/state:wy" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-560([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-560([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-560(\d)' 13 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | services: 4 | make-tiles: 5 | build: 6 | context: . 7 | args: 8 | - MAPBOX_ACCESS_TOKEN 9 | - AWS_ACCESS_KEY_ID 10 | - AWS_SECRET_ACCESS_KEY 11 | - DATABASE_URL 12 | volumes: 13 | - ./data:/opt/openstates-district-maps/data 14 | -------------------------------------------------------------------------------- /configs/jurisdictions/ca.yml: -------------------------------------------------------------------------------- 1 | name: California 2 | os-id-prefix: "ocd-division/country:us/state:ca" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-060([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-060([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-06([\d]+)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/nc.yml: -------------------------------------------------------------------------------- 1 | name: North Carolina 2 | os-id-prefix: "ocd-division/country:us/state:nc" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-37([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-370([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-37([\d]+)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/nj.yml: -------------------------------------------------------------------------------- 1 | name: New Jersey 2 | os-id-prefix: "ocd-division/country:us/state:nj" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-340([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-340([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-34([\d]+)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ri.yml: -------------------------------------------------------------------------------- 1 | name: Rhode Island 2 | os-id-prefix: "ocd-division/country:us/state:ri" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-440([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-440([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-440(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/sc.yml: -------------------------------------------------------------------------------- 1 | name: South Carolina 2 | os-id-prefix: "ocd-division/country:us/state:sc" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-45([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-450([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-450(\d)' 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/dc.yml: -------------------------------------------------------------------------------- 1 | name: "District of Columbia" 2 | os-id-prefix: "ocd-division/country:us/district:dc" 3 | id-mappings: 4 | sldu: 5 | sld-prefix: "ward" 6 | sld-match: 'sldu-1100(\d)' 7 | ward: 8 | sld-match: 'ward-1100(\d)' 9 | cd: 10 | sld-match: 'cd-11([\d]+)' 11 | ignored_chambers: 12 | - sldl 13 | -------------------------------------------------------------------------------- /configs/jurisdictions/ak.yml: -------------------------------------------------------------------------------- 1 | name: Alaska 2 | os-id-prefix: "ocd-division/country:us/state:ak" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-020([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-0200([A-Z])' 10 | match_type: str 11 | cd: 12 | key: DISTRICT 13 | sld-match: 'cd-020(\d)' 14 | -------------------------------------------------------------------------------- /configs/jurisdictions/md.yml: -------------------------------------------------------------------------------- 1 | name: Maryland 2 | os-id-prefix: "ocd-division/country:us/state:md" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-24(\d+[A-Z]?)' 7 | match-type: str 8 | sldu: 9 | key: DISTRICT 10 | sld-match: 'sldu-240([\d]+)' 11 | cd: 12 | key: DISTRICT 13 | sld-match: 'cd-240(\d)' 14 | -------------------------------------------------------------------------------- /configs/jurisdictions/sd.yml: -------------------------------------------------------------------------------- 1 | name: South Dakota 2 | os-id-prefix: "ocd-division/country:us/state:sd" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-46(\d+[A-Z]?)' 7 | match-type: str 8 | sldu: 9 | key: DISTRICT 10 | sld-match: 'sldu-460([\d]+)' 11 | cd: 12 | key: DISTRICT 13 | sld-match: 'cd-460(\d)' 14 | -------------------------------------------------------------------------------- /configs/jurisdictions/wv.yml: -------------------------------------------------------------------------------- 1 | name: West Virginia 2 | os-id-prefix: "ocd-division/country:us/state:wv" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-54(\d+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-540(\d+)' 10 | custom: 11 | - os-id: "ocd-division/country:us/state:wv/sldu:817" 12 | cd: 13 | key: DISTRICT 14 | sld-match: 'cd-540(\d)' 15 | -------------------------------------------------------------------------------- /configs/jurisdictions/va.yml: -------------------------------------------------------------------------------- 1 | name: Virginia 2 | os-id-prefix: "ocd-division/country:us/state:va" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-51([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-51(\d+)' 10 | url: https://www2.census.gov/geo/tiger/TIGER2023/SLDU/tl_2023_51_sldu.zip 11 | cd: 12 | key: DISTRICT 13 | sld-match: 'cd-51([\d]+)' 14 | -------------------------------------------------------------------------------- /djapp/geo/migrations/0002_remove_division_created_at.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-15 21:39 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("geo", "0001_initial"), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name="Division", 15 | name="created_at", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /djapp/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for djapp project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djapp.settings") 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /djapp/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for djapp project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djapp.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /configs/jurisdictions/ny.yml: -------------------------------------------------------------------------------- 1 | name: New York 2 | os-id-prefix: "ocd-division/country:us/state:ny" 3 | id-mappings: 4 | # TIGER2024 is up to date with NYC Assembly changes effective Jan 1 2025 5 | sldl: 6 | key: DISTRICT 7 | sld-match: 'sldl-36([\d]+)' 8 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDL/tl_2024_36_sldl.zip' 9 | sldu: 10 | key: DISTRICT 11 | sld-match: 'sldu-360([\d]+)' 12 | cd: 13 | key: DISTRICT 14 | sld-match: 'cd-36([\d]+)' 15 | -------------------------------------------------------------------------------- /configs/jurisdictions/de.yml: -------------------------------------------------------------------------------- 1 | name: Delaware 2 | os-id-prefix: "ocd-division/country:us/state:de" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-100([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-100([\d]+)' 10 | # DE TIGER_RD18 SLDU files are split between whole_block and split_block versions 11 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/10_DELAWARE/10/tl_rd22_10_sldu_whole_block.zip 12 | cd: 13 | key: DISTRICT 14 | sld-match: 'cd-100(\d)' 15 | -------------------------------------------------------------------------------- /configs/jurisdictions/pa.yml: -------------------------------------------------------------------------------- 1 | name: Pennsylvania 2 | os-id-prefix: "ocd-division/country:us/state:pa" 3 | id-mappings: 4 | # PA TIGER_RD18 SLDL files are split between whole_block and split_block versions 5 | sldl: 6 | key: DISTRICT 7 | sld-match: 'sldl-42([\d]+)' 8 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/42_PENNSYLVANIA/42/tl_rd22_42_sldl_whole_block.zip 9 | sldu: 10 | key: DISTRICT 11 | sld-match: 'sldu-420([\d]+)' 12 | cd: 13 | key: DISTRICT 14 | sld-match: 'cd-42([\d]+)' 15 | -------------------------------------------------------------------------------- /endpoint/tripod.yaml: -------------------------------------------------------------------------------- 1 | functions: 2 | - name: v3-district-geo 3 | description: "API v3 District Geo Endpoint" 4 | runtime: python3.7 5 | files: 6 | - lookup.py 7 | role_arn: "arn:aws:iam::189670762819:role/v3_lambda_exec_role" 8 | handler: lookup.lambda_handler 9 | layers: 10 | - py37-psycopg2 11 | environment: 12 | DB_USER: geo 13 | DB_NAME: geo 14 | DB_HOST: 15 | paramstore: /bobsled/backups/PGHOST 16 | DB_PASSWORD: 17 | paramstore: /passwords/geo_db_password 18 | -------------------------------------------------------------------------------- /djapp/geo/models.py: -------------------------------------------------------------------------------- 1 | from django.contrib.gis.db import models 2 | 3 | 4 | class DivisionSet(models.Model): 5 | slug = models.SlugField(max_length=50, primary_key=True) 6 | 7 | 8 | class Division(models.Model): 9 | id = models.CharField(max_length=300, primary_key=True) 10 | division_set = models.ForeignKey( 11 | DivisionSet, on_delete=models.CASCADE, related_name="divisions" 12 | ) 13 | name = models.CharField(max_length=300) 14 | state = models.CharField(max_length=2) 15 | shape = models.MultiPolygonField() 16 | -------------------------------------------------------------------------------- /configs/jurisdictions/mt.yml: -------------------------------------------------------------------------------- 1 | name: Montana 2 | os-id-prefix: "ocd-division/country:us/state:mt" 3 | id-mappings: 4 | # TIGER2024 maps are up to date with changes effective 1/6/25 5 | sldl: 6 | key: DISTRICT 7 | sld-match: 'sldl-30([\d]+)' 8 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDL/tl_2024_30_sldl.zip' 9 | sldu: 10 | key: DISTRICT 11 | sld-match: 'sldu-300([\d]+)' 12 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDU/tl_2024_30_sldu.zip' 13 | cd: 14 | key: DISTRICT 15 | sld-match: 'cd-300(\d)' 16 | -------------------------------------------------------------------------------- /configs/jurisdictions/oh.yml: -------------------------------------------------------------------------------- 1 | name: Ohio 2 | os-id-prefix: "ocd-division/country:us/state:oh" 3 | id-mappings: 4 | # TIGER2024 files are up to date with maps effective 1/1/25 5 | sldl: 6 | key: DISTRICT 7 | sld-match: 'sldl-39([\d]+)' 8 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDL/tl_2024_39_sldl.zip' 9 | sldu: 10 | key: DISTRICT 11 | sld-match: 'sldu-390([\d]+)' 12 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDU/tl_2024_39_sldu.zip' 13 | cd: 14 | key: DISTRICT 15 | sld-match: 'cd-39([\d]+)' 16 | -------------------------------------------------------------------------------- /configs/jurisdictions/wa.yml: -------------------------------------------------------------------------------- 1 | name: Washington 2 | os-id-prefix: "ocd-division/country:us/state:wa" 3 | id-mappings: 4 | # TIGER2024 files are up to date with maps effective 1/13/25 5 | sldl: 6 | key: DISTRICT 7 | sld-match: 'sldl-530(\d+)' 8 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDL/tl_2024_53_sldl.zip' 9 | sldu: 10 | key: DISTRICT 11 | sld-match: 'sldu-53(\d+)' 12 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDU/tl_2024_53_sldu.zip' 13 | cd: 14 | key: DISTRICT 15 | sld-match: 'cd-53(\d+)' 16 | -------------------------------------------------------------------------------- /configs/jurisdictions/wi.yml: -------------------------------------------------------------------------------- 1 | name: Wisconsin 2 | os-id-prefix: "ocd-division/country:us/state:wi" 3 | id-mappings: 4 | # TIGER2024 files are up to date with maps effective 1/6/25 5 | sldl: 6 | key: DISTRICT 7 | sld-match: 'sldl-55([\d]+)' 8 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDL/tl_2024_55_sldl.zip' 9 | sldu: 10 | key: DISTRICT 11 | sld-match: 'sldu-550([\d]+)' 12 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDU/tl_2024_55_sldu.zip' 13 | cd: 14 | key: DISTRICT 15 | sld-match: 'cd-550(\d)' 16 | -------------------------------------------------------------------------------- /djapp/geo/migrations/0003_division_state.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-17 15:12 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("geo", "0002_remove_division_created_at"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="Division", 15 | name="state", 16 | field=models.CharField(default="", max_length=2), 17 | preserve_default=False, 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .general import ( # noqa: F401 2 | print_script_progress, 3 | find_jurisdiction, 4 | setup_source, 5 | load_settings, 6 | JURISDICTION_NAMES, 7 | ROOTDIR, 8 | ) 9 | 10 | from .tiger import ( # noqa: F401 11 | download_from_tiger, 12 | download_boundary_file, 13 | ) 14 | 15 | from .geojson import ( # noqa: F401 16 | convert_to_geojson, 17 | ) 18 | 19 | from .bulk import ( # noqa: F401 20 | bulk_upload, 21 | ) 22 | 23 | from .mapbox import ( # noqa: F401 24 | create_tiles, 25 | upload_tiles, 26 | ) 27 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "openstates-geo" 3 | version = "3.0.0" 4 | description = "" 5 | authors = ["James Turk ", "John Seekins "] 6 | license = "MIT" 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.9" 10 | requests = "^2.23.0" 11 | django = "^3.2.11" 12 | psycopg2-binary = "^2.9.2" 13 | dj-database-url = "^0.5.0" 14 | boto3 = "^1.26.69" 15 | geopandas = "^0.13.2" 16 | openstates = "^6.16.7" 17 | 18 | [tool.poetry.dev-dependencies] 19 | black = "^22.10.0" 20 | flake8 = "^5.0.4" 21 | 22 | [build-system] 23 | requires = ["poetry>=0.12"] 24 | build-backend = "poetry.masonry.api" 25 | -------------------------------------------------------------------------------- /configs/jurisdictions/ga.yml: -------------------------------------------------------------------------------- 1 | name: Georgia 2 | os-id-prefix: "ocd-division/country:us/state:ga" 3 | id-mappings: 4 | # https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/13_GEORGIA/13/ is wrong 5 | # so we override to TIGER2024 files to get correct maps as of late 2024 6 | sldl: 7 | key: DISTRICT 8 | sld-match: 'sldl-13([\d]+)' 9 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDL/tl_2024_13_sldl.zip' 10 | sldu: 11 | key: DISTRICT 12 | sld-match: 'sldu-130([\d]+)' 13 | url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDU/tl_2024_13_sldu.zip' 14 | cd: 15 | key: DISTRICT 16 | sld-match: 'cd-13([\d]+)' 17 | -------------------------------------------------------------------------------- /configs/jurisdictions/nd.yml: -------------------------------------------------------------------------------- 1 | name: North Dakota 2 | os-id-prefix: "ocd-division/country:us/state:nd" 3 | id-mappings: 4 | # ND TIGER_RD18 SLDU/SLDL files are split between whole_block and split_block versions 5 | sldl: 6 | key: DISTRICT 7 | sld-match: 'sldl-380(\d+[A-Z]?)' 8 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/38_NORTH_DAKOTA/38/tl_rd22_38_sldl_whole_block.zip 9 | sldu: 10 | key: DISTRICT 11 | sld-match: 'sldu-380([\d]+)' 12 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/38_NORTH_DAKOTA/38/tl_rd22_38_sldu_whole_block.zip 13 | cd: 14 | key: DISTRICT 15 | sld-match: 'cd-380(\d)' 16 | -------------------------------------------------------------------------------- /configs/jurisdictions/mn.yml: -------------------------------------------------------------------------------- 1 | name: Minnesota 2 | os-id-prefix: "ocd-division/country:us/state:mn" 3 | id-mappings: 4 | # MN TIGER_RD18 SLDU/SLDL files are split between whole_block and split_block versions 5 | sldl: 6 | key: DISTRICT 7 | sld-match: 'sldl-27(\d+[A-Z])' 8 | match-type: str 9 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/27_MINNESOTA/27/tl_rd22_27_sldl_whole_block.zip 10 | sldu: 11 | key: DISTRICT 12 | sld-match: 'sldu-270([\d]+)' 13 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/27_MINNESOTA/27/tl_rd22_27_sldu_whole_block.zip 14 | cd: 15 | key: DISTRICT 16 | sld-match: 'cd-270(\d)' 17 | -------------------------------------------------------------------------------- /configs/settings.yml: -------------------------------------------------------------------------------- 1 | BOUNDARY_YEAR: "2024" 2 | 3 | SKIPPED_GEOIDS: [] 4 | # cd-6098: American Samoa 5 | # cd-6998: Northern Mariana Islands 6 | # cd-6698: Guam 7 | # cd-7898: Virgin Islands 8 | 9 | MTFCC_MAPPING: 10 | G5200: cd 11 | G5210: sldu 12 | G5220: sldl 13 | 14 | FIPS_NAME_MAP: 15 | "69": "COMMONWEALTH_OF_THE_NORTHERN_MARIANA_ISLANDS" 16 | "78": "UNITED_STATES_VIRGIN_ISLANDS" 17 | 18 | bucket: data.openstates.org 19 | # you may not want to change this frequently. It is the congressional session marked when the files are created, not necesarily the current session 20 | congress_session: 119 21 | 22 | run_migrations: False 23 | upload_data: False 24 | create_tiles: True 25 | clean_source: False 26 | -------------------------------------------------------------------------------- /testing/load-fake-division.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SCRIPT_DIR=$(cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd) 4 | PGPASSWORD=openstates 5 | export PGPASSWORD 6 | 7 | # get geometry of a division 8 | psql -t -P pager=off -h localhost -p 5405 -U openstates openstatesorg -c "SELECT shape FROM geo_division WHERE id='ocd-division/country:us/state:al/sldl:100'" | tr -d ' ' > "${SCRIPT_DIR}/divisiondata" 9 | 10 | psql -t -P pager=off -h localhost -p 5405 -U openstates openstatesorg -c "INSERT INTO geo_division (id, name, shape, division_set_id, state) VALUES ('ocd-division/country:us/state:al/sldl:111', '111', '$(cat "${SCRIPT_DIR}/divisiondata")', 'sldl', 'AL')" 11 | 12 | rm -f "${SCRIPT_DIR}/divisiondata" 13 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | ignore: | 2 | yaml-files: 3 | - '*.yaml' 4 | - '*.yml' 5 | - '.yamllint' 6 | 7 | rules: 8 | braces: enable 9 | brackets: enable 10 | colons: enable 11 | commas: enable 12 | comments: disable 13 | comments-indentation: disable 14 | document-end: disable 15 | document-start: disable 16 | empty-lines: enable 17 | empty-values: disable 18 | hyphens: enable 19 | key-duplicates: enable 20 | key-ordering: disable 21 | line-length: disable 22 | new-line-at-end-of-file: enable 23 | new-lines: enable 24 | octal-values: disable 25 | quoted-strings: disable 26 | trailing-spaces: enable 27 | indentation: 28 | spaces: consistent 29 | indent-sequences: whatever 30 | check-multi-line-strings: true 31 | -------------------------------------------------------------------------------- /configs/jurisdictions/mi.yml: -------------------------------------------------------------------------------- 1 | name: Michigan 2 | os-id-prefix: "ocd-division/country:us/state:mi" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-26([\d]+)' 7 | # TIGER2024 files are up to date with state house maps effective 1/1/25 8 | # url: 'https://www2.census.gov/geo/tiger/TIGER2024/SLDL/tl_2024_26_sldl.zip' 9 | # HOWEVER as of 250516 the above URL returns an error 10 | # so falling back to this GENZ shape that seems to match MI source as well 11 | url: 'https://www2.census.gov/geo/tiger/GENZ2024/shp/cb_2024_26_sldl_500k.zip' 12 | sldu: 13 | # new maps not effective for senate until Nov 2026 supposedly 14 | key: DISTRICT 15 | sld-match: 'sldu-260([\d]+)' 16 | cd: 17 | key: DISTRICT 18 | sld-match: 'cd-26([\d]+)' 19 | -------------------------------------------------------------------------------- /configs/jurisdictions/co.yml: -------------------------------------------------------------------------------- 1 | name: Colorado 2 | os-id-prefix: "ocd-division/country:us/state:co" 3 | id-mappings: 4 | # CO TIGER_RD18 files are split between whole_block and split_block versions 5 | # so some override must take place as expected/generated zip URL does not exist 6 | sldl: 7 | key: DISTRICT 8 | sld-match: 'sldl-080([\d]+)' 9 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/08_COLORADO/08/tl_rd22_08_sldl_whole_block.zip 10 | sldu: 11 | key: DISTRICT 12 | sld-match: 'sldu-080([\d]+)' 13 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/08_COLORADO/08/tl_rd22_08_sldu_whole_block.zip 14 | cd: 15 | key: DISTRICT 16 | sld-match: 'cd-080(\d)' 17 | url: https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/08_COLORADO/08/tl_rd22_08_cd118_whole_block.zip 18 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Build and push Docker images 2 | on: 3 | push: 4 | branches: 5 | - main 6 | tags: 7 | - '*' 8 | jobs: 9 | publish: 10 | steps: 11 | - uses: actions/checkout@v3 12 | - name: Set up QEMU 13 | uses: docker/setup-qemu-action@v2 14 | - name: Set up Docker Buildx 15 | uses: docker/setup-buildx-action@v2 16 | - name: Docker Login 17 | uses: docker/login-action@v2 18 | with: 19 | username: ${{ secrets.DOCKER_USERNAME }} 20 | password: ${{ secrets.DOCKER_PASSWORD }} 21 | - name: build docker image 22 | uses: docker/build-push-action@v3 23 | with: 24 | tags: "openstates/geo:latest,openstates/geo:${{ github.ref_name }}" 25 | platforms: amd64 26 | push: true 27 | runs-on: ubuntu-latest 28 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Lint Files 2 | 3 | on: 4 | push: 5 | branches: 6 | - "*" 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | jobs: 12 | lint: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v3 17 | - name: setup Python 3.9 18 | uses: actions/setup-python@v4 19 | with: 20 | python-version: "3.9" 21 | - name: install Poetry 22 | uses: snok/install-poetry@v1.3.3 23 | - name: install dependencies 24 | run: poetry install --no-root 25 | - name: flake8 check 26 | run: poetry run flake8 . 27 | - name: black check 28 | run: poetry run black --check --diff . 29 | - name: Yaml file linting 30 | run: | 31 | docker run --rm \ 32 | -v $(pwd):/code \ 33 | registry.gitlab.com/pipeline-components/yamllint:latest -s . 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 James Turk, Open States 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /djapp/settings.py: -------------------------------------------------------------------------------- 1 | import os 2 | import dj_database_url 3 | 4 | DEBUG = os.environ.get("DEBUG", "false").lower() == "false" 5 | DATABASE_URL = os.environ.get( 6 | "DATABASE_URL", "postgis://openstates:openstates@localhost:5405/openstatesorg" 7 | ) 8 | 9 | DATABASES = {"default": dj_database_url.parse(DATABASE_URL)} 10 | 11 | SECRET_KEY = "not-used" 12 | ALLOWED_HOSTS = ["*"] 13 | 14 | INSTALLED_APPS = ["djapp.geo"] 15 | 16 | MIDDLEWARE = [ 17 | "django.middleware.security.SecurityMiddleware", 18 | "django.middleware.common.CommonMiddleware", 19 | ] 20 | 21 | ROOT_URLCONF = "djapp.urls" 22 | WSGI_APPLICATION = "djapp.wsgi.application" 23 | LANGUAGE_CODE = "en-us" 24 | TIME_ZONE = "UTC" 25 | USE_I18N = False 26 | USE_L10N = False 27 | USE_TZ = True 28 | STATIC_URL = "/static/" 29 | 30 | # TEMPLATES = [ 31 | # { 32 | # "BACKEND": "django.template.backends.django.DjangoTemplates", 33 | # "DIRS": [], 34 | # "APP_DIRS": True, 35 | # "OPTIONS": { 36 | # "context_processors": [ 37 | # "django.template.context_processors.debug", 38 | # "django.template.context_processors.request", 39 | # "django.contrib.auth.context_processors.auth", 40 | # "django.contrib.messages.context_processors.messages", 41 | # ] 42 | # }, 43 | # } 44 | # ] 45 | -------------------------------------------------------------------------------- /djapp/geo/management/commands/clean_divisions.py: -------------------------------------------------------------------------------- 1 | import glob 2 | import json 3 | from pathlib import Path 4 | from django.core.management.base import BaseCommand 5 | from ...models import Division 6 | 7 | ROOTDIR = Path(__file__).parent.parent.parent.parent.parent.absolute() 8 | 9 | 10 | class Command(BaseCommand): 11 | def handle(self, *args, **options): 12 | print("Checking for any divisions we should remove...") 13 | ocd_ids = [] 14 | for filename in glob.glob(f"{ROOTDIR}/data/geojson/*.geojson"): 15 | obj = json.load(open(filename, "r")) 16 | ocd_ids.extend(div["properties"]["ocdid"] for div in obj["features"]) 17 | print(f"Loaded {len(ocd_ids)} local divisions for comparison") 18 | if len(ocd_ids) < 1: 19 | raise Exception("No local divisions found") 20 | 21 | to_delete = [div for div in Division.objects.exclude(id__in=ocd_ids)] 22 | 23 | print(f"Found {len(to_delete)} divisions not stored locally") 24 | if len(to_delete) > len(ocd_ids): 25 | raise Exception("Found more objects to delete than expected objects") 26 | 27 | # delete command to remove old divisions 28 | # don't try to delete when there aren't any additional divisions 29 | if to_delete: 30 | print(f"Deleting {len(to_delete)} divisions from DB") 31 | Division.objects.exclude(id__in=ocd_ids).delete() 32 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.9-slim 2 | 3 | ENV LC_ALL=C.UTF-8 4 | ENV LANG=C.UTF-8 5 | ENV PYTHONUNBUFFERED=1 6 | ENV PYTHONDONTWRITEBYTECODE=1 7 | 8 | RUN apt-get update -qq \ 9 | && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -qqy \ 10 | gdal-bin \ 11 | git \ 12 | build-essential \ 13 | libsqlite3-dev \ 14 | zlib1g-dev 15 | RUN pip install --disable-pip-version-check --no-cache-dir wheel \ 16 | && pip install --disable-pip-version-check --no-cache-dir crcmod poetry 17 | RUN git clone https://github.com/felt/tippecanoe.git && \ 18 | cd tippecanoe && \ 19 | make -j && \ 20 | make install 21 | 22 | WORKDIR /opt/openstates-district-maps 23 | COPY pyproject.toml . 24 | COPY poetry.lock . 25 | RUN poetry install --only=main --no-root 26 | 27 | COPY utils utils/ 28 | COPY configs configs/ 29 | COPY djapp djapp/ 30 | COPY generate-geo-data.py . 31 | 32 | RUN poetry install --only=main \ 33 | && rm -r /root/.cache/pypoetry/cache /root/.cache/pypoetry/artifacts/ \ 34 | && DEBIAN_FRONTEND=noninteractive apt-get remove -yqq build-essential libsqlite3-dev zlib1g-dev git \ 35 | && DEBIAN_FRONTEND=noninteractive apt-get autoremove -yqq \ 36 | && apt-get clean \ 37 | && rm -rf /var/lib/apt/lists/* 38 | 39 | # We use --clean-source here to ensure we don't accidentally run against messy data somehow 40 | CMD ["poetry", "run", "python", "generate-geo-data.py", "--run-migrations", "--upload-data", "--clean-source"] 41 | -------------------------------------------------------------------------------- /djapp/geo/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-15 21:32 2 | 3 | import django.contrib.gis.db.models.fields 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | initial = True 11 | 12 | dependencies = [] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name="DivisionSet", 17 | fields=[ 18 | ("slug", models.SlugField(primary_key=True, serialize=False)), 19 | ], 20 | ), 21 | migrations.CreateModel( 22 | name="Division", 23 | fields=[ 24 | ( 25 | "id", 26 | models.CharField(max_length=300, primary_key=True, serialize=False), 27 | ), 28 | ("name", models.CharField(max_length=300)), 29 | ("created_at", models.DateTimeField(auto_now_add=True)), 30 | ( 31 | "shape", 32 | django.contrib.gis.db.models.fields.MultiPolygonField(srid=4326), 33 | ), 34 | ( 35 | "division_set", 36 | models.ForeignKey( 37 | on_delete=django.db.models.deletion.CASCADE, 38 | related_name="divisions", 39 | to="geo.DivisionSet", 40 | ), 41 | ), 42 | ], 43 | ), 44 | ] 45 | -------------------------------------------------------------------------------- /configs/jurisdictions/nv.yml: -------------------------------------------------------------------------------- 1 | name: Nevada 2 | os-id-prefix: "ocd-division/country:us/state:nv" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sld-match: 'sldl-320([\d]+)' 7 | sldu: 8 | key: DISTRICT 9 | sld-match: 'sldu-320([\d]+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-320(\d)' 13 | custom: 14 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_1" 15 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_2" 16 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_3" 17 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_4" 18 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_5" 19 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_6" 20 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_7" 21 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_8" 22 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_9" 23 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_10" 24 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_11" 25 | - os-id: "ocd-division/country:us/state:nv/sldu:clark_county_12" 26 | - os-id: "ocd-division/country:us/state:nv/sldu:washoe_county_1" 27 | - os-id: "ocd-division/country:us/state:nv/sldu:washoe_county_2" 28 | - os-id: "ocd-division/country:us/state:nv/sldu:washoe_county_3" 29 | - os-id: "ocd-division/country:us/state:nv/sldu:washoe_county_4" 30 | - os-id: "ocd-division/country:us/state:nv/sldu:capital" 31 | - os-id: "ocd-division/country:us/state:nv/sldu:central_nevada" 32 | - os-id: "ocd-division/country:us/state:nv/sldu:rural_nevada" 33 | -------------------------------------------------------------------------------- /djapp/geo/management/commands/load_divisions.py: -------------------------------------------------------------------------------- 1 | import glob 2 | from pathlib import Path 3 | from django.core.management.base import BaseCommand 4 | from django.contrib.gis.gdal import DataSource 5 | from django.contrib.gis.utils import LayerMapping, LayerMapError 6 | from ...models import DivisionSet, Division 7 | 8 | ROOTDIR = Path(__file__).parent.parent.parent.parent.parent.absolute() 9 | GEOJSON_MAPPING = { 10 | "id": "ocdid", 11 | "state": "state", 12 | "name": "name", 13 | "division_set": {"slug": "type"}, 14 | "shape": "GEOMETRY", 15 | } 16 | 17 | 18 | class Command(BaseCommand): 19 | def add_arguments(self, parser): 20 | parser.add_argument("--verbose", action="store_true") 21 | parser.add_argument("filenames", nargs="*") 22 | 23 | def handle(self, *args, **options): 24 | # create divisionsets 25 | DivisionSet.objects.get_or_create(slug="sldl") 26 | DivisionSet.objects.get_or_create(slug="sldu") 27 | DivisionSet.objects.get_or_create(slug="cd") 28 | 29 | filenames = options["filenames"] or sorted( 30 | glob.glob(f"{ROOTDIR}/data/geojson/*.geojson") 31 | ) 32 | 33 | for filename in filenames: 34 | print(f"processing {filename}...") 35 | source = DataSource(filename) 36 | try: 37 | lm = LayerMapping(Division, source, GEOJSON_MAPPING) 38 | except LayerMapError: 39 | # this error gets triggered if the GeoJSON type is MULTIPOLYGON 40 | multipoly_mapping = GEOJSON_MAPPING.copy() 41 | multipoly_mapping["shape"] = "MULTIPOLYGON" 42 | lm = LayerMapping(Division, source, multipoly_mapping) 43 | lm.save(verbose=options["verbose"]) 44 | -------------------------------------------------------------------------------- /endpoint/lookup.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import psycopg2 4 | from psycopg2.extras import RealDictCursor 5 | 6 | 7 | DB_PASSWORD = os.environ["DB_PASSWORD"] 8 | DB_PORT = os.environ.get("DB_PORT", "5432") 9 | DB_HOST = os.environ.get("DB_HOST", "localhost") 10 | DB_USER = os.environ.get("DB_USER", "openstates") 11 | DB_NAME = os.environ.get("DB_NAME", "geo") 12 | conn = psycopg2.connect( 13 | f"dbname='{DB_NAME}' user='{DB_USER}' host='{DB_HOST}' port='{DB_PORT}' password='{DB_PASSWORD}'" 14 | ) 15 | 16 | 17 | def response(body, status_code=200): 18 | return { 19 | "statusCode": 200, 20 | "body": json.dumps(body), 21 | "headers": {"Content-Type": "application/json"}, 22 | } 23 | 24 | 25 | def geo_query(lat, lon): 26 | cur = conn.cursor(cursor_factory=RealDictCursor) 27 | 28 | GEO_QUERY = """SELECT id, state, name, division_set_id as division_set FROM geo_division 29 | WHERE ST_Contains(shape, 'POINT(%s %s)'::geography::geometry);""" 30 | 31 | cur.execute(GEO_QUERY, [lat, lon]) 32 | return cur.fetchall() 33 | 34 | 35 | def lambda_handler(event, context): 36 | error = None 37 | params = event.get("queryStringParameters", {}) 38 | try: 39 | lat = float(params["lat"]) 40 | lng = float(params["lng"]) 41 | except KeyError: 42 | error = "Must provide lat & lng parameters." 43 | except ValueError: 44 | error = "Invalid lat, lng parameters." 45 | 46 | if error: 47 | return response({"error": error}, 400) 48 | 49 | divisions = geo_query(lng, lat) 50 | return response({"divisions": divisions}) 51 | 52 | 53 | if __name__ == "__main__": 54 | import pprint 55 | 56 | pprint.pprint( 57 | lambda_handler({"queryStringParameters": {"lat": 38.9, "lng": -77}}, None) 58 | ) 59 | print("Checking KS 33 -> 39 change ({'lat': 38.480357, 'lng': -100.906731})") 60 | pprint.pprint( 61 | lambda_handler( 62 | {"queryStringParameters": {"lat": 38.480357, "lng": -100.906731}}, None 63 | ) 64 | ) 65 | -------------------------------------------------------------------------------- /utils/bulk.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | from datetime import datetime 3 | import geopandas as gpd 4 | import glob 5 | import json 6 | import os 7 | 8 | from .general import ROOTDIR 9 | 10 | 11 | def _make_boundaries(year: str) -> None: 12 | os.makedirs(f"{ROOTDIR}/data/boundaries", exist_ok=True) 13 | for file in glob.glob(f"{ROOTDIR}/data/geojson/*.geojson"): 14 | with open(file, "r") as f: 15 | obj = json.load(f) 16 | print(f"Processing {file} into district-level boundary files") 17 | for feature in obj["features"]: 18 | # skip empty features 19 | if "ocdid" not in feature["properties"]: 20 | continue 21 | subpath = feature["properties"]["ocdid"] 22 | full_path = f"{ROOTDIR}/data/boundaries/{subpath}.json" 23 | if os.path.exists(full_path): 24 | continue 25 | folder = "/".join(subpath.split("/")[:-1]) 26 | os.makedirs(f"{ROOTDIR}/data/boundaries/{folder}", exist_ok=True) 27 | gdf = gpd.GeoDataFrame.from_features([feature]) 28 | bounds = gdf["geometry"].bounds 29 | centroid = gdf["geometry"].centroid 30 | obj = { 31 | "shape": feature["geometry"], 32 | "metadata": feature["properties"], 33 | "division_id": feature["properties"]["ocdid"], 34 | "year": year, 35 | "extent": [ 36 | bounds.minx[0], 37 | bounds.miny[0], 38 | bounds.maxx[0], 39 | bounds.maxy[0], 40 | ], 41 | "centroid": { 42 | "coordinates": [ 43 | centroid.x[0], 44 | centroid.y[0], 45 | ], 46 | "type": "Point", 47 | }, 48 | } 49 | with open(full_path, "w") as f: 50 | json.dump(obj, f) 51 | 52 | 53 | def bulk_upload(settings: dict) -> None: 54 | year = datetime.now().date().year 55 | _make_boundaries(year) 56 | 57 | # all geojson files processed...now to upload 58 | print("Uploading division files to S3") 59 | s3 = boto3.resource( 60 | "s3", 61 | aws_access_key_id=settings["aws_user"], 62 | aws_secret_access_key=settings["aws_password"], 63 | ) 64 | bucket = settings["bucket"] 65 | prefix_path = f"{ROOTDIR}/data/boundaries" 66 | bucket_path = f"boundaries/{year}" 67 | for index, file in enumerate(glob.glob(f"{prefix_path}/**/*.json", recursive=True)): 68 | path = file.removeprefix(f"{prefix_path}/") 69 | path = f"{bucket_path}/{path}" 70 | s3.Object(bucket, path).put(Body=open(file, "r").read(), ACL="public-read") 71 | if index and index % 50 == 0: 72 | print(f"Processed {index} files...") 73 | -------------------------------------------------------------------------------- /utils/general.py: -------------------------------------------------------------------------------- 1 | import glob 2 | import os 3 | from pathlib import Path 4 | import shutil 5 | from openstates.metadata.data import STATES_AND_TERRITORIES as JURISDICTIONS 6 | import yaml 7 | 8 | """ 9 | two 'parent' calls to move back to directory 10 | containing the script (scripts) and then 11 | move up one more directory (to the git root) 12 | """ 13 | ROOTDIR = Path(__file__).parent.parent.absolute() 14 | TIGER_ROOT = "https://www2.census.gov/geo/tiger" 15 | JURISDICTION_NAMES = [s.name for s in JURISDICTIONS] 16 | 17 | 18 | def print_script_progress(annotation): 19 | length = len(annotation) 20 | print("_" * length) 21 | print(annotation) 22 | print("‾" * length) 23 | 24 | 25 | def find_jurisdiction(jur_name: str): 26 | """ 27 | Return a github.com/unitedstates/python-us style 28 | jurisdiction object so we can (potentially) back fill 29 | """ 30 | for jurisdiction in JURISDICTIONS: 31 | if jur_name == jurisdiction.name: 32 | return jurisdiction 33 | 34 | 35 | def setup_source(settings: dict) -> None: 36 | """ 37 | simple function to clean up our source data 38 | if we're completely retrying 39 | """ 40 | for cmd in ["tippecanoe", "ogr2ogr"]: 41 | if not shutil.which(cmd): 42 | print(f"Cannot find {cmd} in PATH. Cannot continue.") 43 | exit(1) 44 | 45 | if settings["upload_data"]: 46 | token = os.environ.get("MAPBOX_ACCESS_TOKEN") 47 | if not token: 48 | raise Exception("Trying to upload data without MAPBOX_ACCESS_TOKEN set") 49 | if not settings["aws_user"]: 50 | raise Exception("Trying to upload data without AWS_ACCESS_KEY_ID set") 51 | if not settings["aws_password"]: 52 | raise Exception("Trying to upload data without AWS_SECRET_ACCESS_KEY set") 53 | if settings["clean_source"]: 54 | shutil.rmtree(f"{ROOTDIR}/data/", ignore_errors=True) 55 | os.makedirs(f"{ROOTDIR}/data/source_cache/", exist_ok=True) 56 | os.makedirs(f"{ROOTDIR}/data/geojson/", exist_ok=True) 57 | os.makedirs(f"{ROOTDIR}/data/boundary/", exist_ok=True) 58 | 59 | 60 | def load_settings( 61 | config_dir: str, 62 | run_migrations: bool, 63 | upload_data: bool, 64 | skip_tile_creation: bool, 65 | clean_source: bool, 66 | ) -> dict: 67 | """ 68 | Load all yaml files (settings) recursively from the defined config_dir 69 | """ 70 | with open(f"{config_dir}/settings.yml", "r") as f_in: 71 | settings = yaml.safe_load(f_in.read()) 72 | settings["jurisdictions"] = dict() 73 | for file in glob.glob(f"{config_dir}/jurisdictions/*.yml"): 74 | with open(file, "r") as f: 75 | jur_settings = yaml.safe_load(f.read()) 76 | settings["jurisdictions"][jur_settings["name"]] = dict(jur_settings) 77 | settings["run_migrations"] = run_migrations 78 | settings["upload_data"] = upload_data 79 | settings["create_tiles"] = not skip_tile_creation 80 | settings["clean_source"] = clean_source 81 | settings["aws_user"] = os.environ.get("AWS_ACCESS_KEY_ID") 82 | os.environ.pop("AWS_ACCESS_KEY_ID", None) 83 | settings["aws_password"] = os.environ.get("AWS_SECRET_ACCESS_KEY") 84 | os.environ.pop("AWS_SECRET_ACCESS_KEY", None) 85 | return settings 86 | -------------------------------------------------------------------------------- /generate-geo-data.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter 3 | import django 4 | from django.core.management import call_command 5 | import os 6 | 7 | from utils import ( 8 | JURISDICTION_NAMES, 9 | ROOTDIR, 10 | bulk_upload, 11 | convert_to_geojson, 12 | create_tiles, 13 | download_from_tiger, 14 | download_boundary_file, 15 | find_jurisdiction, 16 | load_settings, 17 | setup_source, 18 | upload_tiles, 19 | print_script_progress, 20 | ) 21 | 22 | 23 | def _django_cmds() -> None: 24 | """ 25 | Execute Django commands to ensure database is configured correctly 26 | """ 27 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djapp.settings") 28 | django.setup() 29 | call_command("migrate") 30 | call_command("load_divisions") 31 | call_command("clean_divisions") 32 | 33 | 34 | def generate_geo_data( 35 | SETTINGS, 36 | jurisdictions, 37 | ) -> None: 38 | db_url = os.environ.get("DATABASE_URL") 39 | if not db_url: 40 | os.environ.setdefault( 41 | "DATABASE_URL", 42 | "postgis://openstates:openstates@localhost:5405/openstatesorg", 43 | ) 44 | 45 | """ 46 | Download shp files from TIGER 47 | """ 48 | print_script_progress("Download shp files from TIGER") 49 | for jur in jurisdictions: 50 | if jur not in JURISDICTION_NAMES: 51 | print(f"Invalid jurisdiction {jur}. Skipping.") 52 | continue 53 | if jur not in SETTINGS["jurisdictions"]: 54 | print(f"Skipping {jur}. No configuration present.") 55 | continue 56 | print(f"Fetching shapefiles for {jur}") 57 | 58 | jurisdiction = find_jurisdiction(jur) 59 | download_from_tiger(jurisdiction, "RD18", SETTINGS) 60 | print_script_progress("Download boundary file") 61 | download_boundary_file(SETTINGS["BOUNDARY_YEAR"]) 62 | 63 | """ 64 | Convert downloaded shp files to geojson 65 | """ 66 | print_script_progress("Convert downloaded shp files to geojson") 67 | convert_to_geojson(SETTINGS) 68 | 69 | if SETTINGS["create_tiles"]: 70 | print_script_progress("Create tiles") 71 | create_tiles(SETTINGS) 72 | 73 | if SETTINGS["run_migrations"]: 74 | print_script_progress("Run migrations") 75 | _django_cmds() 76 | 77 | if SETTINGS["upload_data"]: 78 | print_script_progress("Upload data") 79 | bulk_upload(SETTINGS) 80 | upload_tiles() 81 | 82 | 83 | def main(): 84 | parser = ArgumentParser( 85 | description="Download and process shapefiles for defined jurisdictions", 86 | formatter_class=ArgumentDefaultsHelpFormatter, 87 | ) 88 | parser.add_argument( 89 | "--clean-source", 90 | action="store_true", 91 | default=False, 92 | help="Remove any cached download/processed data", 93 | ) 94 | parser.add_argument( 95 | "--config", 96 | "-c", 97 | type=str, 98 | default=f"{ROOTDIR}/configs", 99 | help="Config directory for downloading geo data", 100 | ) 101 | parser.add_argument( 102 | "--run-migrations", 103 | "-m", 104 | action="store_true", 105 | default=False, 106 | help="Run database migrations and uploads", 107 | ) 108 | parser.add_argument( 109 | "--upload-data", 110 | "-u", 111 | action="store_true", 112 | default=False, 113 | help="Actually upload data to S3/Mapbox", 114 | ) 115 | parser.add_argument( 116 | "--skip-tile-creation", 117 | "-s", 118 | action="store_true", 119 | default=False, 120 | help="Don't generate Mapbox tilesets", 121 | ) 122 | args = parser.parse_args() 123 | SETTINGS = load_settings( 124 | args.config, 125 | args.run_migrations, 126 | args.upload_data, 127 | args.skip_tile_creation, 128 | args.clean_source, 129 | ) 130 | setup_source(SETTINGS) 131 | 132 | generate_geo_data( 133 | SETTINGS, 134 | JURISDICTION_NAMES, 135 | ) 136 | 137 | 138 | if __name__ == "__main__": 139 | main() 140 | -------------------------------------------------------------------------------- /utils/tiger.py: -------------------------------------------------------------------------------- 1 | import os 2 | import zipfile 3 | import random 4 | import requests 5 | import time 6 | import urllib.request 7 | 8 | from .general import ( 9 | ROOTDIR, 10 | TIGER_ROOT, 11 | ) 12 | 13 | 14 | def download_from_tiger(jurisdiction: str, prefix: str, settings: dict): 15 | """ 16 | URLs are somewhat hard-coded here... 17 | Generally...download three files for each jurisdiction: 18 | 1. Federal congress (cd) boundaries 19 | 2. Upper chamber boundaries (sldu) 20 | 3. lower chamber boundaries (sldl) 21 | Some jurisdictions (e.g. NE, DC) don't have all three files 22 | so we allow a download to fail and just log and move on 23 | """ 24 | fips = jurisdiction.fips 25 | jur_name = settings["FIPS_NAME_MAP"].get( 26 | fips, jurisdiction.name.upper().replace(" ", "_") 27 | ) 28 | # should end up like cd118 29 | session = f"cd{settings['congress_session']}" 30 | url_root = f"{TIGER_ROOT}/TIGER_{prefix}/STATE/{fips}_{jur_name}/{fips}" 31 | urls = { 32 | # previously we were getting CD shapes from the RD18 directory 33 | # eg https://www2.census.gov/geo/tiger/TIGER_RD18/STATE/12_FLORIDA/12/tl_rd22_12_cd118.zip 34 | # f"{url_root}/tl_rd22_{fips}_{session}.zip", 35 | # 36 | # however 2024 shapes seem to be present for all states 37 | # eg https://www2.census.gov/geo/tiger/TIGER2024/CD/tl_2024_13_cd119.zip 38 | "cd": f"{TIGER_ROOT}/TIGER2024/CD/tl_2024_{fips}_{session}.zip", 39 | "sldu": f"{url_root}/tl_rd22_{fips}_sldu.zip", 40 | "sldl": f"{url_root}/tl_rd22_{fips}_sldl.zip", 41 | } 42 | """ 43 | remove any URLs we shouldn't download for the jurisdiction 44 | e.g. lower chamber in NE/DC 45 | """ 46 | for k in settings["jurisdictions"][jurisdiction.name].get("ignored_chambers", []): 47 | urls.pop(k) 48 | mappings = settings["jurisdictions"][jurisdiction.name]["id-mappings"] 49 | for key in urls.keys(): 50 | if "url" in mappings.get(key, {}): 51 | urls[key] = mappings[key]["url"] 52 | for url_type, url in urls.items(): 53 | filename = url.split("/")[-1] 54 | fullpath = f"{ROOTDIR}/data/{filename}" 55 | # Download source file if it does not exist locally 56 | if not os.path.exists(fullpath): 57 | try: 58 | _download_and_extract(url, fullpath) 59 | except Exception as e: 60 | print( 61 | f"Couldn't download {jurisdiction.name} {filename} :: {e} :: {url}" 62 | ) 63 | else: 64 | print( 65 | f"skipping download of {jurisdiction.name} {filename}, already exists locally" 66 | ) 67 | 68 | # Extract source file to source_cache 69 | try: 70 | with zipfile.ZipFile(fullpath, "r") as z: 71 | for obj in z.infolist(): 72 | z.extract(obj, f"{ROOTDIR}/data/source_cache/") 73 | except Exception as e: 74 | print(f"Failed to extract {fullpath}: {e}") 75 | 76 | 77 | def download_boundary_file(boundary_year: str): 78 | """ 79 | Use separate download pattern because this file 80 | needs to be processed separately 81 | """ 82 | source_file = f"{ROOTDIR}/data/cb_{boundary_year}_us_nation_5m.zip" 83 | if not os.path.exists(source_file): 84 | url = ( 85 | f"{TIGER_ROOT}/GENZ{boundary_year}/shp/cb_{boundary_year}_us_nation_5m.zip" 86 | ) 87 | print(f"Downloading national boundary from {url}") 88 | _ = urllib.request.urlretrieve(url, source_file) 89 | else: 90 | print("Boundary file exists. Skipping download.") 91 | directory = f"{ROOTDIR}/data/boundary/" 92 | with zipfile.ZipFile(source_file, "r") as zf: 93 | zf.extractall(directory) 94 | 95 | 96 | def _download_and_extract(url: str, filename: str): 97 | # Getting 429 Client Error: Too Many Requests for url errors from TIGER 98 | # so try to slow down requests here, between 2-5 sec delay between requests 99 | delay = random.uniform(2, 5) 100 | time.sleep(delay) 101 | 102 | response = requests.get(url) 103 | 104 | if response.status_code == 200: 105 | # This _could_ all be done with a single file operation, 106 | # by using a `BytesIO` file-like object to temporarily hold the 107 | # HTTP response. However, that's less readable and maintainable, 108 | # and a bit of delay isn't a problem given the slowness 109 | # of the Census downloads in the first place. 110 | with open(filename, "wb") as f: 111 | f.write(response.content) 112 | else: 113 | response.raise_for_status() 114 | -------------------------------------------------------------------------------- /utils/mapbox.py: -------------------------------------------------------------------------------- 1 | import boto3 2 | import glob 3 | import os 4 | import requests 5 | import subprocess 6 | import time 7 | 8 | from .general import ROOTDIR 9 | 10 | 11 | def create_tiles(settings: dict): 12 | os.makedirs(f"{ROOTDIR}/data/mapbox", exist_ok=True) 13 | 14 | print("Clip GeoJSON to shoreline") 15 | sld_filenames = [] 16 | cd_filenames = [] 17 | for filename in sorted(glob.glob(f"{ROOTDIR}/data/geojson/*.geojson")): 18 | newfilename = filename.replace("/geojson/", "/mapbox/") 19 | if "sld" in newfilename: 20 | sld_filenames.append(newfilename) 21 | else: 22 | cd_filenames.append(newfilename) 23 | if os.path.exists(newfilename): 24 | print(f"{newfilename} exists, skipping") 25 | continue 26 | else: 27 | print(f"{filename} => {newfilename}") 28 | subprocess.run( 29 | [ 30 | "ogr2ogr", 31 | "-clipsrc", 32 | f"{ROOTDIR}/data/boundary/cb_{settings['BOUNDARY_YEAR']}_us_nation_5m.shp", 33 | newfilename, 34 | filename, 35 | ], 36 | check=True, 37 | ) 38 | 39 | cd_file = f"{ROOTDIR}/data/cd.mbtiles" 40 | if os.path.exists(cd_file): 41 | print(f"Existing CD tiles. Remove {cd_file} to re-generate") 42 | else: 43 | print("Generating CD MBTiles file") 44 | subprocess.run( 45 | [ 46 | "tippecanoe", 47 | "--layer", 48 | "cd", 49 | "--minimum-zoom", 50 | "2", 51 | "--maximum-zoom", 52 | "13", 53 | "--detect-shared-borders", 54 | "--simplification", 55 | "10", 56 | "--force", 57 | "--output", 58 | f"{ROOTDIR}/data/cd.mbtiles", 59 | ] 60 | + cd_filenames, 61 | check=True, 62 | ) 63 | sld_file = f"{ROOTDIR}/data/sld.mbtiles" 64 | if os.path.exists(sld_file): 65 | print(f"Existing SLD tiles. Remove {sld_file} to re-generate") 66 | else: 67 | print("Generating SLD MBTiles file") 68 | subprocess.run( 69 | [ 70 | "tippecanoe", 71 | "--layer", 72 | "sld", 73 | "--minimum-zoom", 74 | "2", 75 | "--maximum-zoom", 76 | "13", 77 | "--detect-shared-borders", 78 | "--simplification", 79 | "10", 80 | "--force", 81 | "--output", 82 | f"{ROOTDIR}/data/sld.mbtiles", 83 | ] 84 | + sld_filenames, 85 | check=True, 86 | ) 87 | 88 | 89 | def _upload_tile(tileset: str, settings: dict, mapbox_token: str) -> None: 90 | """ 91 | Actually upload a tileset to mapbox 92 | """ 93 | mapbox_user = "openstates" 94 | params = {"access_token": mapbox_token} 95 | resp = requests.post( 96 | f"https://api.mapbox.com/uploads/v1/{mapbox_user}/credentials", params=params 97 | ).json() 98 | bucket = resp["bucket"] 99 | key = resp["key"] 100 | access_id = resp["accessKeyId"] 101 | access_key = resp["secretAccessKey"] 102 | session_token = resp["sessionToken"] 103 | url = resp["url"] 104 | s3 = boto3.resource( 105 | "s3", 106 | aws_access_key_id=access_id, 107 | aws_secret_access_key=access_key, 108 | aws_session_token=session_token, 109 | ) 110 | print(f"Uploading {tileset} to Mapbox") 111 | s3.Object(bucket, key).put(Body=open(settings["path"], "rb").read()) 112 | data = {"tileset": f"openstates.{tileset}", "url": url, "name": settings["name"]} 113 | resp = requests.post( 114 | f"https://api.mapbox.com/uploads/v1/{mapbox_user}", params=params, json=data 115 | ).json() 116 | upload_id = resp["id"] 117 | print(f"Starting processing of {tileset} ({settings['name']}) within Mapbox") 118 | resp = requests.get( 119 | f"https://api.mapbox.com/uploads/v1/{mapbox_user}/{upload_id}", params=params 120 | ).json() 121 | checks = 0 122 | while not resp["complete"]: 123 | time.sleep(10) 124 | checks += 1 125 | resp = requests.get( 126 | f"https://api.mapbox.com/uploads/v1/{mapbox_user}/{upload_id}", 127 | params=params, 128 | ).json() 129 | if resp["complete"]: 130 | break 131 | if checks and checks % 6 == 0: 132 | print(f"Still waiting on {tileset}") 133 | 134 | 135 | def upload_tiles() -> None: 136 | """ 137 | Following the pattern in https://docs.mapbox.com/api/maps/uploads/ 138 | """ 139 | mapbox_token = os.environ.get("MAPBOX_ACCESS_TOKEN") 140 | # tileset names are set for historical reasons 141 | tilesets = { 142 | "sld": { 143 | "path": f"{ROOTDIR}/data/sld.mbtiles", 144 | "name": "sld", 145 | }, 146 | "cq8nw57b": { 147 | "path": f"{ROOTDIR}/data/cd.mbtiles", 148 | "name": "cd-diwr39", 149 | }, 150 | } 151 | for tileset, settings in tilesets.items(): 152 | _upload_tile(tileset, settings, mapbox_token) 153 | -------------------------------------------------------------------------------- /utils/geojson.py: -------------------------------------------------------------------------------- 1 | import copy 2 | import glob 3 | import json 4 | import openstates.metadata as metadata 5 | import os 6 | import re 7 | import subprocess 8 | 9 | from .general import ( 10 | JURISDICTIONS, 11 | ROOTDIR, 12 | print_script_progress, 13 | ) 14 | 15 | FIPS_KEYS = ( 16 | "STATEFP", 17 | "STATEFP20", 18 | "STATEFP", # Used in shapefiles from https://www2.census.gov/geo/tiger/GENZ2024/shp/ 19 | ) 20 | GEOID_KEYS = ("GEOID", "GEOID20") 21 | MTFCC_KEYS = ("MTFCC", "MTFCC20") 22 | 23 | 24 | def _find_key(district_properties, keys): 25 | for key in keys: 26 | res = district_properties.get(key, None) 27 | if res: 28 | return res 29 | else: 30 | print(f"Couldn't find {keys} in {district_properties}") 31 | return None 32 | 33 | 34 | def convert_to_geojson(SETTINGS: dict) -> None: 35 | print("convert_to_geojson: find source_cache/**/*.shp") 36 | files = glob.glob(f"{ROOTDIR}/data/source_cache/**/*.shp", recursive=True) 37 | for file in files: 38 | newfilename = file.replace(".shp", ".geojson") 39 | if os.path.exists(newfilename): 40 | print(f"convert_to_geojson: {newfilename} already exists, skipping") 41 | else: 42 | print(f"convert_to_geojson: Converting {file} => {newfilename}") 43 | subprocess.run( 44 | [ 45 | "ogr2ogr", 46 | "-t_srs", 47 | "crs:84", 48 | "-f", 49 | "GeoJSON", 50 | newfilename, 51 | file, 52 | ], 53 | check=True, 54 | ) 55 | _merge_ids(newfilename, SETTINGS) 56 | 57 | 58 | def _merge_ids(geojson_path: str, settings: dict) -> None: 59 | print_script_progress(f"convert_to_geojson: _merge_ids for {geojson_path}") 60 | with open(geojson_path, "r") as f: 61 | rawgeodata = json.load(f) 62 | geodata = {k: v for k, v in rawgeodata.items() if k not in ["features"]} 63 | geodata["features"] = [] 64 | for district in rawgeodata["features"]: 65 | fips = _find_key(district["properties"], FIPS_KEYS) 66 | if not fips: 67 | print(f"_merge_ids: {fips} not defined in metadata. Skipping") 68 | continue 69 | """ 70 | Find the matching jurisdiction based on FIPS code 71 | """ 72 | # print(f"_merge_ids: Find the matching jurisdiction based on FIPS code {fips}") 73 | for j in JURISDICTIONS: 74 | if fips == j.fips: 75 | juris = j 76 | break 77 | else: 78 | print(f"_merge_ids: {fips} not defined in metadata. Skipping") 79 | continue 80 | state_meta = metadata.lookup(abbr=juris.abbr) 81 | mtfcc_type_from_mtfcc_property = _find_key(district["properties"], MTFCC_KEYS) 82 | if mtfcc_type_from_mtfcc_property: 83 | dt = settings["MTFCC_MAPPING"][mtfcc_type_from_mtfcc_property].lower() 84 | else: 85 | # See if we can fallback to getting district type from filename 86 | if "sldl" in geojson_path: 87 | print( 88 | f"_merge_ids: got district type 'sldl' from filename {geojson_path}" 89 | ) 90 | dt = "sldl" 91 | elif "sldu" in geojson_path: 92 | print( 93 | f"_merge_ids: got district type 'sldu' from filename {geojson_path}" 94 | ) 95 | dt = "sldu" 96 | else: 97 | print( 98 | f"_merge_ids: failed to find district type in geojson district properties {district['properties']}" 99 | ) 100 | continue 101 | mappings = settings["jurisdictions"][juris.name]["id-mappings"] 102 | if "sld-prefix" in mappings[dt]: 103 | district_type = mappings[dt]["sld-prefix"] 104 | else: 105 | district_type = dt 106 | ocd_prefix = settings["jurisdictions"][juris.name]["os-id-prefix"] 107 | geoid = _find_key(district["properties"], GEOID_KEYS) 108 | if not geoid or geoid in settings["SKIPPED_GEOIDS"] or geoid.endswith("ZZ"): 109 | print( 110 | f"_merge_ids: Skipping bad geoid: {geoid} in {juris.name} file {geojson_path}" 111 | ) 112 | continue 113 | census_id = f"{district_type}-{geoid}" 114 | ocd_id = None 115 | for custom_match in mappings.get("custom", []): 116 | if "sld-id" not in custom_match: 117 | continue 118 | if census_id == custom_match["sld-id"]: 119 | ocd_id = custom_match["os-id"] 120 | break 121 | if not ocd_id: 122 | try: 123 | di_match = re.compile(mappings[district_type]["sld-match"]) 124 | except Exception: 125 | print(f"_merge_ids: Missing any way to classify {census_id}") 126 | continue 127 | sld_id = di_match.search(census_id) 128 | if not sld_id: 129 | print( 130 | f"_merge_ids: {census_id} doesn't match any districts with {di_match}" 131 | ) 132 | continue 133 | sld_id = sld_id.groups()[0] 134 | ocd_id = f"{ocd_prefix}/{district_type}:{sld_id.lstrip('0')}".lower() 135 | if district_type == "cd": 136 | """ 137 | Federal files have some quirks that other jurisdictional boundaries 138 | don't have. Particularly: 139 | 1. the actual district name 140 | 2. handling "at large" districts 141 | """ 142 | cd_num = geoid.removeprefix(fips) 143 | if cd_num in ["00", "98"]: 144 | ocd_id = f"{ocd_prefix}/{district_type}:at-large" 145 | district_name = f"{juris.abbr.upper()}-AL" 146 | else: 147 | ocd_id = f"{ocd_prefix}/{district_type}:{int(cd_num)}" 148 | district_name = f"{juris.abbr.upper()}-{cd_num}" 149 | else: 150 | # Jurisdictional boundaries we can look up in OpenStates 151 | if not mappings[district_type].get("split_districts", False): 152 | district_meta = state_meta.lookup_district(ocd_id) 153 | if not district_meta: 154 | print(f"_merge_ids: Couldn't find metadata for {ocd_id}") 155 | exit(1) 156 | district_name = district_meta.name 157 | 158 | if mappings[district_type].get("split_districts", False): 159 | district_name = ocd_id.split(":")[1] 160 | for key in ["a", "b"]: 161 | this_district = copy.deepcopy(district) 162 | this_district["properties"]["ocdid"] = f"{ocd_id}{key}" 163 | this_district["properties"]["type"] = dt 164 | this_district["properties"]["state"] = juris.abbr 165 | this_district["properties"]["name"] = f"{district_name}{key.upper()}" 166 | geodata["features"].append(this_district) 167 | else: 168 | district["properties"]["ocdid"] = ocd_id 169 | district["properties"]["type"] = dt 170 | district["properties"]["state"] = juris.abbr 171 | district["properties"]["name"] = district_name 172 | geodata["features"].append(district) 173 | 174 | output_filename = f"{ROOTDIR}/data/geojson/{juris.abbr}-{dt}.geojson" 175 | print_script_progress( 176 | f"_merge_ids: Writing data from {geojson_path} => {output_filename}" 177 | ) 178 | with open(output_filename, "w") as geojson_file: 179 | json.dump(geodata, geojson_file) 180 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Issues 2 | 3 | - Tracked in our central issue repository: [Geo Issues](https://github.com/openstates/issues/labels/component%3Ageo) 4 | 5 | # Geo lookup endpoint (v3-district-geo) 6 | 7 | A small part of the code here, in the `/endpoint` directory, comprises a lambda function that is deployed as an AWS 8 | lambda called `v3-district-geo` (in the openstates account). This function does geographic-specific querying. At this 9 | point I don't remember why it is a separately deployed endpoint (maybe because API v2 was sharing it under the hood?). 10 | 11 | ## Upgrading Python version/runtime + associated layer 12 | 13 | Occasionally the Python runtime needs to be upgraded. This also involves updating 14 | the [Lambda Layer](https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html) 15 | that the function depends on to provide its psycopg2 dependency. 16 | 17 | To build and create a new layer: 18 | 19 | * I used the `aws-psycopg2` package to obtain a version of psycopg2 compiled for the AWS environment 20 | * Change directory to the `endpoint` directory 21 | * Create a folder called `python` 22 | * Install the dependency to the folder: `pip install --target ./python aws-psycopg2` 23 | * Package up the folder as a zip: `zip -r python39awspscycopg2.zip python` 24 | * Use 25 | the [AWS console to upload the new layer](https://us-east-1.console.aws.amazon.com/lambda/home?region=us-east-1#/layers) 26 | (or add it as a new version to an existing layer) 27 | 28 | To upgrade the Python version/runtime of the function: 29 | 30 | * Click the "Layers" icon in 31 | the [AWS Lambda console UI](https://us-east-1.console.aws.amazon.com/lambda/home?region=us-east-1#/functions/v3-district-geo?tab=code) 32 | * Click the "Edit" button 33 | * Choose the existing layer (associated with the previous python runtime/version) and Delete it 34 | * Go back to the `v3-district-geo` function, scroll down to "Runtime Settings" and click "Edit" 35 | * Change the python version 36 | * Now go back to the Layers section and use Add a Layer to associate the layer that is compatible with that python 37 | version 38 | 39 | # Open States Geography Processing & Server 40 | 41 | Generate and upload map tiles for the state-level legislative district maps 42 | on [openstates.org](https://openstates.org/), both for [state overviews](https://openstates.org/ca/) and 43 | for [individual legislators](https://openstates.org/person/tim-ashe-4mV4UFZqI2WsxsnYXLM8Vb/). 44 | 45 | - Source: SLDL and SLDU shapefiles 46 | from [the Census's TIGER/Line database](https://www.census.gov/geo/maps-data/data/tiger-line.html) 47 | - Output: a single nationwide MBTiles vector tile set, uploaded to Mapbox for hosting 48 | - Intermediate files are also built and retained locally, stored in the `data` directory for debugging 49 | 50 | ![](tileset-screenshot.png) 51 | 52 | ## Dependencies 53 | 54 | - Python 3 and `poetry` 55 | - GDAL 2 56 | - [tippecanoe](https://github.com/felt/tippecanoe) 57 | 58 | ## Ensuring The Right Shape Files 59 | 60 | We download our shapefiles from [census.gov](https://www2.census.gov/geo/tiger). 61 | 62 | The organization of files within TIGER's site means that we may have to change the layout of downloaded files from year 63 | to year (in `utils/tiger.py`). As long as we consistently add proper files into `data/source_cache` for the rest of the 64 | scripts to process, changing the initial download location shouldn't matter. 65 | 66 | See Appendix A below on Geographic Data Sources for more context. 67 | 68 | ## Re-running the script: cached data concerns 69 | 70 | The geo generate script has a multitude of places where it checks for existing files and prefers to use them, rather 71 | than regenerate them. That means it is easy to *think* you are regenerating data completely, but one or more parts 72 | are actually the previously generated data. 73 | 74 | BUT there is a caveat: re-downloading source shapefiles (esp from US Census server) is very slow, and occasionally 75 | a source file becomes unavailable. Deleting you full `./data/` folder can thus set you back. 76 | 77 | ### Option 1: full clean 78 | 79 | You can manually delete `./data/` OR use the `--clean-source` parameter to do so when running the script. Please note 80 | that re-downloading shapefiles from source sites will be slow, and occasionally US Census/Tiger will just not serve 81 | a file. 82 | 83 | So, before deleting, it is recommended to copy the files in `./data/*` (excluding subfolders) to a backup location. 84 | 85 | ### Option 2: selectively delete generated files 86 | 87 | If you want to regen without changing source files, these are some locations within `./data/` you can delete: 88 | 89 | * `./data/source_cache/`: this is the unzipped contents of the zipfiles downloaded from sources 90 | * EXCEPT for the `.geojson` files in this subfolder! They are generated by `convert_to_geojson()` and if one already 91 | exists, then the dependency process `_merge_ids()` will NOT run, and thus data in `./data/geojson/` will NOT be 92 | (re)generated. So if you are working on `_marge_ids()` code, then you WILL want to delete at least the `.geojson` 93 | files in this subdirectory. 94 | * Mapbox data/upload: 95 | * `./data/mapbox/`: if geojson files exists in here, then `create_tiles()` will NOT regenerate them 96 | * `./data/cd.mbtiles` and `./data/sld.mbtiles`: if either of these are present, then `create_tiles()` will NOT 97 | regenerate them. 98 | * `./data/boundaries/*.json`: if these boundary files already exist, then `_make_boundaries()` will NOT regen them 99 | 100 | ### National Boundary Update 101 | 102 | `config/settings.yml` holds the `BOUNDARY_YEAR` config. This setting defines what to apply to our US boundary template 103 | link: 104 | 105 | ```python 106 | f"{TIGER_ROOT}/GENZ{boundary_year}/shp/cb_{boundary_year}_us_nation_5m.zip" 107 | ``` 108 | 109 | We should verify/update this setting to the most recently available boundary year whenever we run geo data. 110 | 111 | ### Note on file naming 112 | 113 | You'll see many files with names like `sldu`, `sldl` or `cd` during this process. Here is a quick layout of what those 114 | file name abbreviations mean: 115 | 116 | - `sldu` 117 | - State Level District Upper -> Upper Chamber District boundaries 118 | - `sldl` 119 | - State Level District Lower -> Lower Chamber District boundaries 120 | - `cd` 121 | - Congressional District -> Federal Congressional District boundaries 122 | 123 | We do not collect boundaries for Federal Senate because each state has the same number of senators and they are 124 | considered "at-large" (having no district boundaries beyond the entire state). 125 | 126 | ## Running 127 | 128 | There are several steps, which typically need to be run in order: 129 | 130 | 1) Setup Poetry: 131 | 132 | - `poetry install` 133 | 134 | 2 ) Make sure environment variables are set correctly: 135 | 136 | - `DATABASE_URL`: pointing at either the `geo` database in production or to a local copy, 137 | e.g. `DATABASE_URL=postgis://:@/geo` 138 | - `MAPBOX_ACCESS_TOKEN`: a API token for Mapbox with permissions to upload tilesets 139 | - `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`: AWS credentials to upload bulk versions of geo data 140 | 141 | 3) Download and format geo data: 142 | 143 | - `poetry run python generate-geo-data.py --run-migrations --upload-data` 144 | - Note that this script does not fail on individual download failures. If you see failures in the run, make sure 145 | they are expected (e.g. NE/DC lower should fail) 146 | 147 | ### Setting up environment variables 148 | 149 | There are plenty of ways to set environment variables, but quick way to manage many environment variables is with an " 150 | environment file". e.g. 151 | 152 | ```bash 153 | AWS_ACCESS_KEY_ID="user" 154 | export AWS_ACCESS_KEY_ID 155 | AWS_SECRET_ACCESS_KEY="test" 156 | export AWS_SECRET_ACCESS_KEY 157 | MAPBOX_ACCESS_TOKEN="token" 158 | export MAPBOX_ACCESS_TOKEN 159 | DATABASE_URL="postgis://openstates:openstates@localhost:5405/openstatesorg" 160 | export DATABASE_URL 161 | ``` 162 | 163 | After that, we can easily load the file: 164 | 165 | ```bash 166 | . env-file 167 | ``` 168 | 169 | ### Running within Docker 170 | 171 | Instead of setting up your local environment you can instead run using Docker. Using Docker Compose will still allow you 172 | to access all intermediate files from the processing, within your local `data` directory. 173 | 174 | Build and run with Docker Compose. Similar to running without Docker, environment variables must be set in your local 175 | environment. 176 | 177 | ``` 178 | docker-compose up make-tiles 179 | ``` 180 | 181 | # Appendix A: Geo Data Sources used by openstates-geo 182 | 183 | openstates-geo works with shapefiles. Shapefiles can be opened by a tool called [qgis](https://www.qgis.org/en/site/) 184 | For example, to inspect a source shapefile, such as `tl_2022_01_sldl.shp`, open up qgis and navigate to the folder where 185 | that file resides. Open the file, it should appear in the main pane as a map. Use the "Select Features by Area or single 186 | click" 187 | button in the toolbar, and then select a district. Metadata should appear in the right pane. 188 | 189 | ## US Census 190 | 191 | ### Redistricting 192 | 193 | During the next major sessions after a Census (e.g. 2022 was the major session for _most_ jurisdictions after the 2020 194 | Census), the TIGER data we rely on may be significantly "behind" reality as the example note from 2022 indicates: 195 | 196 | > "We hold the districts used for the 2018 election until we collect the postcensal congressional and state legislative 197 | > district plans 198 | > for the 118th Congress and year 2022 state 199 | > 200 | legislatures" [US Census CD/SLD note](https://www.census.gov/programs-surveys/geography/technical-documentation/user-note/cd-sld-note.html) 201 | 202 | As of 2022, TIGER was still the most consistent data source for district boundaries we were able to find. 203 | 204 | ### US Census: TIGER 205 | 206 | Files in the TIGER data source are organized according to 207 | [Federal Information Processing System (FIPS)](https://transition.fcc.gov/oet/info/maps/census/fips/fips.txt) codes. 208 | Each numeric code corresponds to a US state (or other levels). For example `01` represents Alabama. 209 | 210 | #### TIGER SLDL 211 | 212 | [2022](https://www2.census.gov/geo/tiger/TIGER2022/SLDL/) 213 | 214 | This contains data, including shapefiles, about State Legislative Districts in Lower chambers (SLDL). 215 | 216 | #### TIGER SLDU 217 | 218 | [2022](https://www2.census.gov/geo/tiger/TIGER2022/SLDU/) 219 | 220 | This contains data, including shapefiles, about State Legislative Districts in Upper chambers (SLDU). 221 | 222 | #### TIGER CD 223 | 224 | [2022](https://www2.census.gov/geo/tiger/TIGER2022/CD/) 225 | 226 | This contains data, including shapefiles, about Congressional Districts. 227 | 228 | # Appendix B: Manually checking geographic data 229 | 230 | As mentioned above, the open source desktop app [QGIS](https://qgis.org/) can help to investigate and debug your 231 | expectations about both source geo files and geo files that are generated by the script. It can open files of the type: 232 | 233 | * .shp 234 | * .geojson 235 | * .mbtiles 236 | -------------------------------------------------------------------------------- /configs/jurisdictions/vt.yml: -------------------------------------------------------------------------------- 1 | name: Vermont 2 | os-id-prefix: "ocd-division/country:us/state:vt" 3 | id-mappings: 4 | sldl: 5 | key: DISTRICT 6 | sldu: 7 | key: DISTRICT 8 | cd: 9 | key: DISTRICT 10 | sld-match: 'cd-500(\d)' 11 | custom: 12 | - os-id: "ocd-division/country:us/state:vt/sldu:addison" 13 | sld-id: sldu-50ADD 14 | - os-id: "ocd-division/country:us/state:vt/sldu:bennington" 15 | sld-id: sldu-50BEN 16 | - os-id: "ocd-division/country:us/state:vt/sldu:caledonia" 17 | sld-id: sldu-50CAL 18 | - os-id: "ocd-division/country:us/state:vt/sldu:grand_isle" 19 | sld-id: sldu-50GRI 20 | - os-id: "ocd-division/country:us/state:vt/sldu:chittenden-north" 21 | sld-id: sldu-50CHN 22 | - os-id: "ocd-division/country:us/state:vt/sldu:chittenden-central" 23 | sld-id: sldu-50CHC 24 | - os-id: "ocd-division/country:us/state:vt/sldu:chittenden-southeast" 25 | sld-id: sldu-50CHS 26 | - os-id: "ocd-division/country:us/state:vt/sldu:orleans" 27 | sld-id: sldu-50ORL 28 | - os-id: "ocd-division/country:us/state:vt/sldu:essex" 29 | sld-id: sldu-50ESX 30 | - os-id: "ocd-division/country:us/state:vt/sldu:franklin" 31 | sld-id: sldu-50FRA 32 | - os-id: "ocd-division/country:us/state:vt/sldu:lamoille" 33 | sld-id: sldu-50LAM 34 | - os-id: "ocd-division/country:us/state:vt/sldu:orange" 35 | sld-id: sldu-50ORA 36 | - os-id: "ocd-division/country:us/state:vt/sldu:rutland" 37 | sld-id: sldu-50RUT 38 | - os-id: "ocd-division/country:us/state:vt/sldu:washington" 39 | sld-id: sldu-50WAS 40 | - os-id: "ocd-division/country:us/state:vt/sldu:windham" 41 | sld-id: sldu-50WDH 42 | - os-id: "ocd-division/country:us/state:vt/sldu:windsor" 43 | sld-id: sldu-50WSR 44 | 45 | - os-id: "ocd-division/country:us/state:vt/sldl:addison-1" 46 | sld-id: sldl-50A-1 47 | - os-id: "ocd-division/country:us/state:vt/sldl:addison-2" 48 | sld-id: sldl-50A-2 49 | - os-id: "ocd-division/country:us/state:vt/sldl:addison-3" 50 | sld-id: sldl-50A-3 51 | - os-id: "ocd-division/country:us/state:vt/sldl:addison-4" 52 | sld-id: sldl-50A-4 53 | - os-id: "ocd-division/country:us/state:vt/sldl:addison-5" 54 | sld-id: sldl-50A-5 55 | - os-id: "ocd-division/country:us/state:vt/sldl:addison-rutland" 56 | sld-id: sldl-50A-R 57 | - os-id: "ocd-division/country:us/state:vt/sldl:bennington-1" 58 | sld-id: sldl-50B-1 59 | - os-id: "ocd-division/country:us/state:vt/sldl:bennington-2" 60 | sld-id: sldl-50B-2 61 | - os-id: "ocd-division/country:us/state:vt/sldl:bennington-3" 62 | sld-id: sldl-50B-3 63 | - os-id: "ocd-division/country:us/state:vt/sldl:bennington-4" 64 | sld-id: sldl-50B-4 65 | - os-id: "ocd-division/country:us/state:vt/sldl:bennington-5" 66 | sld-id: sldl-50B-5 67 | - os-id: "ocd-division/country:us/state:vt/sldl:bennington-rutland" 68 | sld-id: sldl-50B-R 69 | - os-id: "ocd-division/country:us/state:vt/sldl:caledonia-1" 70 | sld-id: sldl-50CA1 71 | - os-id: "ocd-division/country:us/state:vt/sldl:caledonia-2" 72 | sld-id: sldl-50CA2 73 | - os-id: "ocd-division/country:us/state:vt/sldl:caledonia-3" 74 | sld-id: sldl-50CA3 75 | - os-id: "ocd-division/country:us/state:vt/sldl:caledonia-washington" 76 | sld-id: sldl-50CAW 77 | - os-id: "ocd-division/country:us/state:vt/sldl:essex-caledonia" 78 | sld-id: sldl-50E-C 79 | - os-id: "ocd-division/country:us/state:vt/sldl:franklin-1" 80 | sld-id: sldl-50F-1 81 | - os-id: "ocd-division/country:us/state:vt/sldl:franklin-2" 82 | sld-id: sldl-50F-2 83 | - os-id: "ocd-division/country:us/state:vt/sldl:franklin-3" 84 | sld-id: sldl-50F-3 85 | - os-id: "ocd-division/country:us/state:vt/sldl:franklin-4" 86 | sld-id: sldl-50F-4 87 | - os-id: "ocd-division/country:us/state:vt/sldl:franklin-5" 88 | sld-id: sldl-50F-5 89 | - os-id: "ocd-division/country:us/state:vt/sldl:franklin-6" 90 | sld-id: sldl-50F-6 91 | - os-id: "ocd-division/country:us/state:vt/sldl:franklin-7" 92 | sld-id: sldl-50F-7 93 | - os-id: "ocd-division/country:us/state:vt/sldl:franklin-8" 94 | sld-id: sldl-50F-8 95 | - os-id: "ocd-division/country:us/state:vt/sldl:grand_isle-chittenden" 96 | sld-id: sldl-50GIC 97 | - os-id: "ocd-division/country:us/state:vt/sldl:lamoille-1" 98 | sld-id: sldl-50L-1 99 | - os-id: "ocd-division/country:us/state:vt/sldl:lamoille-2" 100 | sld-id: sldl-50L-2 101 | - os-id: "ocd-division/country:us/state:vt/sldl:lamoille-3" 102 | sld-id: sldl-50L-3 103 | - os-id: "ocd-division/country:us/state:vt/sldl:lamoille-washington" 104 | sld-id: sldl-50L-W 105 | - os-id: "ocd-division/country:us/state:vt/sldl:orleans-1" 106 | sld-id: sldl-50O-1 107 | - os-id: "ocd-division/country:us/state:vt/sldl:orleans-2" 108 | sld-id: sldl-50O-2 109 | - os-id: "ocd-division/country:us/state:vt/sldl:orleans-3" 110 | sld-id: sldl-50O-3 111 | - os-id: "ocd-division/country:us/state:vt/sldl:orleans-4" 112 | sld-id: sldl-50O-4 113 | - os-id: "ocd-division/country:us/state:vt/sldl:orange-caledonia" 114 | sld-id: sldl-50ORC 115 | - os-id: "ocd-division/country:us/state:vt/sldl:orleans-lamoille" 116 | sld-id: sldl-50O-L 117 | - os-id: "ocd-division/country:us/state:vt/sldl:orange-1" 118 | sld-id: sldl-50OR1 119 | - os-id: "ocd-division/country:us/state:vt/sldl:orange-2" 120 | sld-id: sldl-50OR2 121 | - os-id: "ocd-division/country:us/state:vt/sldl:orange-3" 122 | sld-id: sldl-50OR3 123 | - os-id: "ocd-division/country:us/state:vt/sldl:orange-washington-addison" 124 | sld-id: sldl-50OWA 125 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-1" 126 | sld-id: sldl-50R-1 127 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-2" 128 | sld-id: sldl-50R-2 129 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-3" 130 | sld-id: sldl-50R-3 131 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-4" 132 | sld-id: sldl-50R-4 133 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-5" 134 | sld-id: sldl-50R-5 135 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-6" 136 | sld-id: sldl-50R-6 137 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-7" 138 | sld-id: sldl-50R-7 139 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-8" 140 | sld-id: sldl-50R-8 141 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-9" 142 | sld-id: sldl-50R-9 143 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-10" 144 | sld-id: sldl-50R10 145 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-11" 146 | sld-id: sldl-50R11 147 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-bennington" 148 | sld-id: sldl-50R-B 149 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-1" 150 | sld-id: sldl-50W-1 151 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-2" 152 | sld-id: sldl-50W-2 153 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-3" 154 | sld-id: sldl-50W-3 155 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-4" 156 | sld-id: sldl-50W-4 157 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-5" 158 | sld-id: sldl-50W-5 159 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-6" 160 | sld-id: sldl-50W-6 161 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-7" 162 | sld-id: sldl-50W-7 163 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-8" 164 | sld-id: sldl-50W-8 165 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-9" 166 | sld-id: sldl-50W-9 167 | - os-id: "ocd-division/country:us/state:vt/sldl:washington-1" 168 | sld-id: sldl-50WA1 169 | - os-id: "ocd-division/country:us/state:vt/sldl:washington-2" 170 | sld-id: sldl-50WA2 171 | - os-id: "ocd-division/country:us/state:vt/sldl:washington-3" 172 | sld-id: sldl-50WA3 173 | - os-id: "ocd-division/country:us/state:vt/sldl:washington-4" 174 | sld-id: sldl-50WA4 175 | - os-id: "ocd-division/country:us/state:vt/sldl:washington-5" 176 | sld-id: sldl-50WA5 177 | - os-id: "ocd-division/country:us/state:vt/sldl:washington-6" 178 | sld-id: sldl-50WA6 179 | - os-id: "ocd-division/country:us/state:vt/sldl:washington-chittenden" 180 | sld-id: sldl-50WAC 181 | - os-id: "ocd-division/country:us/state:vt/sldl:windham-bennington-windsor" 182 | sld-id: sldl-50WWB 183 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-1" 184 | sld-id: sldl-50Y-1 185 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-2" 186 | sld-id: sldl-50Y-2 187 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-3" 188 | sld-id: sldl-50Y-3 189 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-4" 190 | sld-id: sldl-50Y-4 191 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-5" 192 | sld-id: sldl-50Y-5 193 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-6" 194 | sld-id: sldl-50Y-6 195 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-orange-1" 196 | sld-id: sldl-50YO1 197 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-orange-2" 198 | sld-id: sldl-50YO2 199 | - os-id: "ocd-division/country:us/state:vt/sldl:essex-orleans" 200 | sld-id: sldl-50E-O 201 | - os-id: "ocd-division/country:us/state:vt/sldl:caledonia-essex" 202 | sld-id: sldl-50CAE 203 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-franklin" 204 | sld-id: sldl-50C-F 205 | - os-id: "ocd-division/country:us/state:vt/sldl:washington-orange" 206 | sld-id: sldl-50WAO 207 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-1" 208 | sld-id: sldl-50C-1 209 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-2" 210 | sld-id: sldl-50C-2 211 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-3" 212 | sld-id: sldl-50C-3 213 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-4" 214 | sld-id: sldl-50C-4 215 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-5" 216 | sld-id: sldl-50C-5 217 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-6" 218 | sld-id: sldl-50C-6 219 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-7" 220 | sld-id: sldl-50C-7 221 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-8" 222 | sld-id: sldl-50C-8 223 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-9" 224 | sld-id: sldl-50C-9 225 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-10" 226 | sld-id: sldl-50C10 227 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-11" 228 | sld-id: sldl-50C11 229 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-12" 230 | sld-id: sldl-50C12 231 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-13" 232 | sld-id: sldl-50C13 233 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-14" 234 | sld-id: sldl-50C14 235 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-15" 236 | sld-id: sldl-50C15 237 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-16" 238 | sld-id: sldl-50C16 239 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-17" 240 | sld-id: sldl-50C17 241 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-18" 242 | sld-id: sldl-50C18 243 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-19" 244 | sld-id: sldl-50C19 245 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-20" 246 | sld-id: sldl-50C20 247 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-21" 248 | sld-id: sldl-50C21 249 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-22" 250 | sld-id: sldl-50C22 251 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-23" 252 | sld-id: sldl-50C23 253 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-24" 254 | sld-id: sldl-50C24 255 | - os-id: "ocd-division/country:us/state:vt/sldl:chittenden-25" 256 | sld-id: sldl-50C25 257 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-addison" 258 | sld-id: sldl-50Y-A 259 | - os-id: "ocd-division/country:us/state:vt/sldl:rutland-windsor" 260 | sld-id: sldl-50R-W 261 | - os-id: "ocd-division/country:us/state:vt/sldl:windsor-windham" 262 | sld-id: sldl-50Y-W 263 | -------------------------------------------------------------------------------- /configs/jurisdictions/ma.yml: -------------------------------------------------------------------------------- 1 | name: Massachusetts 2 | os-id-prefix: "ocd-division/country:us/state:ma" 3 | id-mappings: 4 | sldu: {} 5 | sldl: {} 6 | cd: 7 | key: DISTRICT 8 | sld-match: 'cd-250(\d)' 9 | custom: 10 | - os-id: "ocd-division/country:us/state:ma/sldu:berkshire_hampden_franklin_and_hampshire" 11 | sld-id: sldu-25D01 12 | - os-id: "ocd-division/country:us/state:ma/sldu:hampden_and_hampshire" 13 | sld-id: sldu-25D02 14 | - os-id: "ocd-division/country:us/state:ma/sldu:hampden" 15 | sld-id: sldu-25D03 16 | - os-id: "ocd-division/country:us/state:ma/sldu:hampden_hampshire_and_worcester" 17 | sld-id: sldu-25D04 18 | - os-id: "ocd-division/country:us/state:ma/sldu:hampshire_franklin_and_worcester" 19 | sld-id: sldu-25D05 20 | - os-id: "ocd-division/country:us/state:ma/sldu:worcester_and_hampshire" 21 | sld-id: sldu-25D06 22 | - os-id: "ocd-division/country:us/state:ma/sldu:worcester_and_hampden" 23 | sld-id: sldu-25D07 24 | - os-id: "ocd-division/country:us/state:ma/sldu:2nd_worcester" 25 | sld-id: sldu-25D08 26 | - os-id: "ocd-division/country:us/state:ma/sldu:1st_worcester" 27 | sld-id: sldu-25D09 28 | - os-id: "ocd-division/country:us/state:ma/sldu:worcester_and_middlesex" 29 | sld-id: sldu-25D10 30 | - os-id: "ocd-division/country:us/state:ma/sldu:1st_middlesex" 31 | sld-id: sldu-25D11 32 | - os-id: "ocd-division/country:us/state:ma/sldu:middlesex_and_worcester" 33 | sld-id: sldu-25D12 34 | - os-id: "ocd-division/country:us/state:ma/sldu:middlesex_and_norfolk" 35 | sld-id: sldu-25D13 36 | - os-id: "ocd-division/country:us/state:ma/sldu:norfolk_worcester_and_middlesex" 37 | sld-id: sldu-25D14 38 | - os-id: "ocd-division/country:us/state:ma/sldu:3rd_middlesex" 39 | sld-id: sldu-25D15 40 | - os-id: "ocd-division/country:us/state:ma/sldu:4th_middlesex" 41 | sld-id: sldu-25D16 42 | - os-id: "ocd-division/country:us/state:ma/sldu:norfolk_and_middlesex" 43 | sld-id: sldu-25D17 44 | - os-id: "ocd-division/country:us/state:ma/sldu:norfolk_and_suffolk" 45 | sld-id: sldu-25D18 46 | - os-id: "ocd-division/country:us/state:ma/sldu:1st_essex" 47 | sld-id: sldu-25D19 48 | - os-id: "ocd-division/country:us/state:ma/sldu:2nd_essex_and_middlesex" 49 | sld-id: sldu-25D20 50 | - os-id: "ocd-division/country:us/state:ma/sldu:1st_essex_and_middlesex" 51 | sld-id: sldu-25D21 52 | - os-id: "ocd-division/country:us/state:ma/sldu:2nd_essex" 53 | sld-id: sldu-25D22 54 | - os-id: "ocd-division/country:us/state:ma/sldu:5th_middlesex" 55 | sld-id: sldu-25D23 56 | - os-id: "ocd-division/country:us/state:ma/sldu:3rd_essex" 57 | sld-id: sldu-25D24 58 | - os-id: "ocd-division/country:us/state:ma/sldu:3rd_suffolk" 59 | sld-id: sldu-25D25 60 | - os-id: "ocd-division/country:us/state:ma/sldu:middlesex_and_suffolk" 61 | sld-id: sldu-25D26 62 | - os-id: "ocd-division/country:us/state:ma/sldu:2nd_middlesex" 63 | sld-id: sldu-25D27 64 | - os-id: "ocd-division/country:us/state:ma/sldu:suffolk_and_middlesex" 65 | sld-id: sldu-25D28 66 | - os-id: "ocd-division/country:us/state:ma/sldu:2nd_suffolk" 67 | sld-id: sldu-25D29 68 | - os-id: "ocd-division/country:us/state:ma/sldu:1st_suffolk" 69 | sld-id: sldu-25D30 70 | - os-id: "ocd-division/country:us/state:ma/sldu:1st_plymouth_and_norfolk" 71 | sld-id: sldu-25D31 72 | - os-id: "ocd-division/country:us/state:ma/sldu:norfolk_and_plymouth" 73 | sld-id: sldu-25D32 74 | - os-id: "ocd-division/country:us/state:ma/sldu:norfolk_plymouth_and_bristol" 75 | sld-id: sldu-25D33 76 | - os-id: "ocd-division/country:us/state:ma/sldu:2nd_plymouth_and_norfolk" 77 | sld-id: sldu-25D34 78 | - os-id: "ocd-division/country:us/state:ma/sldu:bristol_and_norfolk" 79 | sld-id: sldu-25D35 80 | - os-id: "ocd-division/country:us/state:ma/sldu:3rd_bristol_and_plymouth" 81 | sld-id: sldu-25D36 82 | - os-id: "ocd-division/country:us/state:ma/sldu:1st_bristol_and_plymouth" 83 | sld-id: sldu-25D37 84 | - os-id: "ocd-division/country:us/state:ma/sldu:2nd_bristol_and_plymouth" 85 | sld-id: sldu-25D38 86 | - os-id: "ocd-division/country:us/state:ma/sldu:plymouth_and_barnstable" 87 | sld-id: sldu-25D39 88 | - os-id: "ocd-division/country:us/state:ma/sldu:cape_and_islands" 89 | sld-id: sldu-25D40 90 | 91 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_barnstable" 92 | sld-id: sldl-25001 93 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_barnstable" 94 | sld-id: sldl-25002 95 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_barnstable" 96 | sld-id: sldl-25003 97 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_barnstable" 98 | sld-id: sldl-25004 99 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_barnstable" 100 | sld-id: sldl-25005 101 | - os-id: "ocd-division/country:us/state:ma/sldl:barnstable_dukes_and_nantucket" 102 | sld-id: sldl-25006 103 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_berkshire" 104 | sld-id: sldl-25007 105 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_berkshire" 106 | sld-id: sldl-25008 107 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_berkshire" 108 | sld-id: sldl-25009 109 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_bristol" 110 | sld-id: sldl-25010 111 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_bristol" 112 | sld-id: sldl-25011 113 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_bristol" 114 | sld-id: sldl-25012 115 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_bristol" 116 | sld-id: sldl-25013 117 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_bristol" 118 | sld-id: sldl-25014 119 | - os-id: "ocd-division/country:us/state:ma/sldl:6th_bristol" 120 | sld-id: sldl-25015 121 | - os-id: "ocd-division/country:us/state:ma/sldl:7th_bristol" 122 | sld-id: sldl-25016 123 | - os-id: "ocd-division/country:us/state:ma/sldl:8th_bristol" 124 | sld-id: sldl-25017 125 | - os-id: "ocd-division/country:us/state:ma/sldl:9th_bristol" 126 | sld-id: sldl-25018 127 | - os-id: "ocd-division/country:us/state:ma/sldl:10th_bristol" 128 | sld-id: sldl-25019 129 | - os-id: "ocd-division/country:us/state:ma/sldl:11th_bristol" 130 | sld-id: sldl-25020 131 | - os-id: "ocd-division/country:us/state:ma/sldl:12th_bristol" 132 | sld-id: sldl-25021 133 | - os-id: "ocd-division/country:us/state:ma/sldl:13th_bristol" 134 | sld-id: sldl-25022 135 | - os-id: "ocd-division/country:us/state:ma/sldl:14th_bristol" 136 | sld-id: sldl-25023 137 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_essex" 138 | sld-id: sldl-25024 139 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_essex" 140 | sld-id: sldl-25025 141 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_essex" 142 | sld-id: sldl-25026 143 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_essex" 144 | sld-id: sldl-25027 145 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_essex" 146 | sld-id: sldl-25028 147 | - os-id: "ocd-division/country:us/state:ma/sldl:6th_essex" 148 | sld-id: sldl-25029 149 | - os-id: "ocd-division/country:us/state:ma/sldl:7th_essex" 150 | sld-id: sldl-25030 151 | - os-id: "ocd-division/country:us/state:ma/sldl:8th_essex" 152 | sld-id: sldl-25031 153 | - os-id: "ocd-division/country:us/state:ma/sldl:9th_essex" 154 | sld-id: sldl-25032 155 | - os-id: "ocd-division/country:us/state:ma/sldl:10th_essex" 156 | sld-id: sldl-25033 157 | - os-id: "ocd-division/country:us/state:ma/sldl:11th_essex" 158 | sld-id: sldl-25034 159 | - os-id: "ocd-division/country:us/state:ma/sldl:12th_essex" 160 | sld-id: sldl-25035 161 | - os-id: "ocd-division/country:us/state:ma/sldl:13th_essex" 162 | sld-id: sldl-25036 163 | - os-id: "ocd-division/country:us/state:ma/sldl:14th_essex" 164 | sld-id: sldl-25037 165 | - os-id: "ocd-division/country:us/state:ma/sldl:15th_essex" 166 | sld-id: sldl-25038 167 | - os-id: "ocd-division/country:us/state:ma/sldl:16th_essex" 168 | sld-id: sldl-25039 169 | - os-id: "ocd-division/country:us/state:ma/sldl:17th_essex" 170 | sld-id: sldl-25040 171 | - os-id: "ocd-division/country:us/state:ma/sldl:18th_essex" 172 | sld-id: sldl-25041 173 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_franklin" 174 | sld-id: sldl-25042 175 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_franklin" 176 | sld-id: sldl-25043 177 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_hampden" 178 | sld-id: sldl-25044 179 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_hampden" 180 | sld-id: sldl-25045 181 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_hampden" 182 | sld-id: sldl-25046 183 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_hampden" 184 | sld-id: sldl-25047 185 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_hampden" 186 | sld-id: sldl-25048 187 | - os-id: "ocd-division/country:us/state:ma/sldl:6th_hampden" 188 | sld-id: sldl-25049 189 | - os-id: "ocd-division/country:us/state:ma/sldl:7th_hampden" 190 | sld-id: sldl-25050 191 | - os-id: "ocd-division/country:us/state:ma/sldl:8th_hampden" 192 | sld-id: sldl-25051 193 | - os-id: "ocd-division/country:us/state:ma/sldl:9th_hampden" 194 | sld-id: sldl-25052 195 | - os-id: "ocd-division/country:us/state:ma/sldl:10th_hampden" 196 | sld-id: sldl-25053 197 | - os-id: "ocd-division/country:us/state:ma/sldl:11th_hampden" 198 | sld-id: sldl-25054 199 | - os-id: "ocd-division/country:us/state:ma/sldl:12th_hampden" 200 | sld-id: sldl-25055 201 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_hampshire" 202 | sld-id: sldl-25056 203 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_hampshire" 204 | sld-id: sldl-25057 205 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_hampshire" 206 | sld-id: sldl-25058 207 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_middlesex" 208 | sld-id: sldl-25059 209 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_middlesex" 210 | sld-id: sldl-25060 211 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_middlesex" 212 | sld-id: sldl-25061 213 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_middlesex" 214 | sld-id: sldl-25062 215 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_middlesex" 216 | sld-id: sldl-25063 217 | - os-id: "ocd-division/country:us/state:ma/sldl:6th_middlesex" 218 | sld-id: sldl-25064 219 | - os-id: "ocd-division/country:us/state:ma/sldl:7th_middlesex" 220 | sld-id: sldl-25065 221 | - os-id: "ocd-division/country:us/state:ma/sldl:8th_middlesex" 222 | sld-id: sldl-25066 223 | - os-id: "ocd-division/country:us/state:ma/sldl:9th_middlesex" 224 | sld-id: sldl-25067 225 | - os-id: "ocd-division/country:us/state:ma/sldl:10th_middlesex" 226 | sld-id: sldl-25068 227 | - os-id: "ocd-division/country:us/state:ma/sldl:11th_middlesex" 228 | sld-id: sldl-25069 229 | - os-id: "ocd-division/country:us/state:ma/sldl:12th_middlesex" 230 | sld-id: sldl-25070 231 | - os-id: "ocd-division/country:us/state:ma/sldl:13th_middlesex" 232 | sld-id: sldl-25071 233 | - os-id: "ocd-division/country:us/state:ma/sldl:14th_middlesex" 234 | sld-id: sldl-25072 235 | - os-id: "ocd-division/country:us/state:ma/sldl:15th_middlesex" 236 | sld-id: sldl-25073 237 | - os-id: "ocd-division/country:us/state:ma/sldl:16th_middlesex" 238 | sld-id: sldl-25074 239 | - os-id: "ocd-division/country:us/state:ma/sldl:17th_middlesex" 240 | sld-id: sldl-25075 241 | - os-id: "ocd-division/country:us/state:ma/sldl:18th_middlesex" 242 | sld-id: sldl-25076 243 | - os-id: "ocd-division/country:us/state:ma/sldl:19th_middlesex" 244 | sld-id: sldl-25077 245 | - os-id: "ocd-division/country:us/state:ma/sldl:20th_middlesex" 246 | sld-id: sldl-25078 247 | - os-id: "ocd-division/country:us/state:ma/sldl:21st_middlesex" 248 | sld-id: sldl-25079 249 | - os-id: "ocd-division/country:us/state:ma/sldl:22nd_middlesex" 250 | sld-id: sldl-25080 251 | - os-id: "ocd-division/country:us/state:ma/sldl:23rd_middlesex" 252 | sld-id: sldl-25081 253 | - os-id: "ocd-division/country:us/state:ma/sldl:24th_middlesex" 254 | sld-id: sldl-25082 255 | - os-id: "ocd-division/country:us/state:ma/sldl:25th_middlesex" 256 | sld-id: sldl-25083 257 | - os-id: "ocd-division/country:us/state:ma/sldl:26th_middlesex" 258 | sld-id: sldl-25084 259 | - os-id: "ocd-division/country:us/state:ma/sldl:27th_middlesex" 260 | sld-id: sldl-25085 261 | - os-id: "ocd-division/country:us/state:ma/sldl:28th_middlesex" 262 | sld-id: sldl-25086 263 | - os-id: "ocd-division/country:us/state:ma/sldl:29th_middlesex" 264 | sld-id: sldl-25087 265 | - os-id: "ocd-division/country:us/state:ma/sldl:30th_middlesex" 266 | sld-id: sldl-25088 267 | - os-id: "ocd-division/country:us/state:ma/sldl:31st_middlesex" 268 | sld-id: sldl-25089 269 | - os-id: "ocd-division/country:us/state:ma/sldl:32nd_middlesex" 270 | sld-id: sldl-25090 271 | - os-id: "ocd-division/country:us/state:ma/sldl:33rd_middlesex" 272 | sld-id: sldl-25091 273 | - os-id: "ocd-division/country:us/state:ma/sldl:34th_middlesex" 274 | sld-id: sldl-25092 275 | - os-id: "ocd-division/country:us/state:ma/sldl:35th_middlesex" 276 | sld-id: sldl-25093 277 | - os-id: "ocd-division/country:us/state:ma/sldl:36th_middlesex" 278 | sld-id: sldl-25094 279 | - os-id: "ocd-division/country:us/state:ma/sldl:37th_middlesex" 280 | sld-id: sldl-25095 281 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_norfolk" 282 | sld-id: sldl-25096 283 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_norfolk" 284 | sld-id: sldl-25097 285 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_norfolk" 286 | sld-id: sldl-25098 287 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_norfolk" 288 | sld-id: sldl-25099 289 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_norfolk" 290 | sld-id: sldl-25100 291 | - os-id: "ocd-division/country:us/state:ma/sldl:6th_norfolk" 292 | sld-id: sldl-25101 293 | - os-id: "ocd-division/country:us/state:ma/sldl:7th_norfolk" 294 | sld-id: sldl-25102 295 | - os-id: "ocd-division/country:us/state:ma/sldl:8th_norfolk" 296 | sld-id: sldl-25103 297 | - os-id: "ocd-division/country:us/state:ma/sldl:9th_norfolk" 298 | sld-id: sldl-25104 299 | - os-id: "ocd-division/country:us/state:ma/sldl:10th_norfolk" 300 | sld-id: sldl-25105 301 | - os-id: "ocd-division/country:us/state:ma/sldl:11th_norfolk" 302 | sld-id: sldl-25106 303 | - os-id: "ocd-division/country:us/state:ma/sldl:12th_norfolk" 304 | sld-id: sldl-25107 305 | - os-id: "ocd-division/country:us/state:ma/sldl:13th_norfolk" 306 | sld-id: sldl-25108 307 | - os-id: "ocd-division/country:us/state:ma/sldl:14th_norfolk" 308 | sld-id: sldl-25109 309 | - os-id: "ocd-division/country:us/state:ma/sldl:15th_norfolk" 310 | sld-id: sldl-25110 311 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_plymouth" 312 | sld-id: sldl-25111 313 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_plymouth" 314 | sld-id: sldl-25112 315 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_plymouth" 316 | sld-id: sldl-25113 317 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_plymouth" 318 | sld-id: sldl-25114 319 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_plymouth" 320 | sld-id: sldl-25115 321 | - os-id: "ocd-division/country:us/state:ma/sldl:6th_plymouth" 322 | sld-id: sldl-25116 323 | - os-id: "ocd-division/country:us/state:ma/sldl:7th_plymouth" 324 | sld-id: sldl-25117 325 | - os-id: "ocd-division/country:us/state:ma/sldl:8th_plymouth" 326 | sld-id: sldl-25118 327 | - os-id: "ocd-division/country:us/state:ma/sldl:9th_plymouth" 328 | sld-id: sldl-25119 329 | - os-id: "ocd-division/country:us/state:ma/sldl:10th_plymouth" 330 | sld-id: sldl-25120 331 | - os-id: "ocd-division/country:us/state:ma/sldl:11th_plymouth" 332 | sld-id: sldl-25121 333 | - os-id: "ocd-division/country:us/state:ma/sldl:12th_plymouth" 334 | sld-id: sldl-25122 335 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_suffolk" 336 | sld-id: sldl-25123 337 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_suffolk" 338 | sld-id: sldl-25124 339 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_suffolk" 340 | sld-id: sldl-25125 341 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_suffolk" 342 | sld-id: sldl-25126 343 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_suffolk" 344 | sld-id: sldl-25127 345 | - os-id: "ocd-division/country:us/state:ma/sldl:6th_suffolk" 346 | sld-id: sldl-25128 347 | - os-id: "ocd-division/country:us/state:ma/sldl:7th_suffolk" 348 | sld-id: sldl-25129 349 | - os-id: "ocd-division/country:us/state:ma/sldl:8th_suffolk" 350 | sld-id: sldl-25130 351 | - os-id: "ocd-division/country:us/state:ma/sldl:9th_suffolk" 352 | sld-id: sldl-25131 353 | - os-id: "ocd-division/country:us/state:ma/sldl:10th_suffolk" 354 | sld-id: sldl-25132 355 | - os-id: "ocd-division/country:us/state:ma/sldl:11th_suffolk" 356 | sld-id: sldl-25133 357 | - os-id: "ocd-division/country:us/state:ma/sldl:12th_suffolk" 358 | sld-id: sldl-25134 359 | - os-id: "ocd-division/country:us/state:ma/sldl:13th_suffolk" 360 | sld-id: sldl-25135 361 | - os-id: "ocd-division/country:us/state:ma/sldl:14th_suffolk" 362 | sld-id: sldl-25136 363 | - os-id: "ocd-division/country:us/state:ma/sldl:15th_suffolk" 364 | sld-id: sldl-25137 365 | - os-id: "ocd-division/country:us/state:ma/sldl:16th_suffolk" 366 | sld-id: sldl-25138 367 | - os-id: "ocd-division/country:us/state:ma/sldl:17th_suffolk" 368 | sld-id: sldl-25139 369 | - os-id: "ocd-division/country:us/state:ma/sldl:18th_suffolk" 370 | sld-id: sldl-25140 371 | - os-id: "ocd-division/country:us/state:ma/sldl:19th_suffolk" 372 | sld-id: sldl-25141 373 | - os-id: "ocd-division/country:us/state:ma/sldl:1st_worcester" 374 | sld-id: sldl-25142 375 | - os-id: "ocd-division/country:us/state:ma/sldl:2nd_worcester" 376 | sld-id: sldl-25143 377 | - os-id: "ocd-division/country:us/state:ma/sldl:3rd_worcester" 378 | sld-id: sldl-25144 379 | - os-id: "ocd-division/country:us/state:ma/sldl:4th_worcester" 380 | sld-id: sldl-25145 381 | - os-id: "ocd-division/country:us/state:ma/sldl:5th_worcester" 382 | sld-id: sldl-25146 383 | - os-id: "ocd-division/country:us/state:ma/sldl:6th_worcester" 384 | sld-id: sldl-25147 385 | - os-id: "ocd-division/country:us/state:ma/sldl:7th_worcester" 386 | sld-id: sldl-25148 387 | - os-id: "ocd-division/country:us/state:ma/sldl:8th_worcester" 388 | sld-id: sldl-25149 389 | - os-id: "ocd-division/country:us/state:ma/sldl:9th_worcester" 390 | sld-id: sldl-25150 391 | - os-id: "ocd-division/country:us/state:ma/sldl:10th_worcester" 392 | sld-id: sldl-25151 393 | - os-id: "ocd-division/country:us/state:ma/sldl:11th_worcester" 394 | sld-id: sldl-25152 395 | - os-id: "ocd-division/country:us/state:ma/sldl:12th_worcester" 396 | sld-id: sldl-25153 397 | - os-id: "ocd-division/country:us/state:ma/sldl:13th_worcester" 398 | sld-id: sldl-25154 399 | - os-id: "ocd-division/country:us/state:ma/sldl:14th_worcester" 400 | sld-id: sldl-25155 401 | - os-id: "ocd-division/country:us/state:ma/sldl:15th_worcester" 402 | sld-id: sldl-25156 403 | - os-id: "ocd-division/country:us/state:ma/sldl:16th_worcester" 404 | sld-id: sldl-25157 405 | - os-id: "ocd-division/country:us/state:ma/sldl:17th_worcester" 406 | sld-id: sldl-25158 407 | - os-id: "ocd-division/country:us/state:ma/sldl:18th_worcester" 408 | sld-id: sldl-25159 409 | - os-id: "ocd-division/country:us/state:ma/sldl:19th_worcester" 410 | sld-id: sldl-25160 411 | -------------------------------------------------------------------------------- /configs/jurisdictions/nh.yml: -------------------------------------------------------------------------------- 1 | name: New Hampshire 2 | os-id-prefix: "ocd-division/country:us/state:nh" 3 | id-mappings: 4 | sldu: 5 | key: DISTRICT 6 | sld-match: 'sldu-330([\d]+)' 7 | sldl: 8 | key: DISTRICT 9 | sld-match: 'sldl-33(\d+)' 10 | cd: 11 | key: DISTRICT 12 | sld-match: 'cd-330(\d)' 13 | custom: 14 | - os-id: "ocd-division/country:us/state:nh/sldl:belknap_1" 15 | sld-id: sldl-33001 16 | - os-id: "ocd-division/country:us/state:nh/sldl:belknap_2" 17 | sld-id: sldl-33002 18 | - os-id: "ocd-division/country:us/state:nh/sldl:belknap_3" 19 | sld-id: sldl-33003 20 | - os-id: "ocd-division/country:us/state:nh/sldl:belknap_4" 21 | sld-id: sldl-33004 22 | - os-id: "ocd-division/country:us/state:nh/sldl:belknap_5" 23 | sld-id: sldl-33005 24 | - os-id: "ocd-division/country:us/state:nh/sldl:belknap_6" 25 | sld-id: sldl-33006 26 | - os-id: "ocd-division/country:us/state:nh/sldl:belknap_7" 27 | sld-id: sldl-33007 28 | - os-id: "ocd-division/country:us/state:nh/sldl:belknap_8" 29 | sld-id: sldl-33008 30 | - os-id: "ocd-division/country:us/state:nh/sldl:carroll_1" 31 | sld-id: sldl-33101 32 | - os-id: "ocd-division/country:us/state:nh/sldl:carroll_2" 33 | sld-id: sldl-33102 34 | - os-id: "ocd-division/country:us/state:nh/sldl:carroll_3" 35 | sld-id: sldl-33103 36 | - os-id: "ocd-division/country:us/state:nh/sldl:carroll_4" 37 | sld-id: sldl-33104 38 | - os-id: "ocd-division/country:us/state:nh/sldl:carroll_5" 39 | sld-id: sldl-33105 40 | - os-id: "ocd-division/country:us/state:nh/sldl:carroll_6" 41 | sld-id: sldl-33106 42 | - os-id: "ocd-division/country:us/state:nh/sldl:carroll_7" 43 | sld-id: sldl-33107 44 | - os-id: "ocd-division/country:us/state:nh/sldl:carroll_8" 45 | sld-id: sldl-33108 46 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_1" 47 | sld-id: sldl-33201 48 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_2" 49 | sld-id: sldl-33202 50 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_3" 51 | sld-id: sldl-33203 52 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_4" 53 | sld-id: sldl-33204 54 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_5" 55 | sld-id: sldl-33205 56 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_6" 57 | sld-id: sldl-33206 58 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_7" 59 | sld-id: sldl-33207 60 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_8" 61 | sld-id: sldl-33208 62 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_9" 63 | sld-id: sldl-33209 64 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_10" 65 | sld-id: sldl-33210 66 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_11" 67 | sld-id: sldl-33211 68 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_12" 69 | sld-id: sldl-33212 70 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_13" 71 | sld-id: sldl-33213 72 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_14" 73 | sld-id: sldl-33214 74 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_15" 75 | sld-id: sldl-33215 76 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_16" 77 | sld-id: sldl-33216 78 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_17" 79 | sld-id: sldl-33217 80 | - os-id: "ocd-division/country:us/state:nh/sldl:cheshire_18" 81 | sld-id: sldl-33218 82 | - os-id: "ocd-division/country:us/state:nh/sldl:coos_1" 83 | sld-id: sldl-33301 84 | - os-id: "ocd-division/country:us/state:nh/sldl:coos_2" 85 | sld-id: sldl-33302 86 | - os-id: "ocd-division/country:us/state:nh/sldl:coos_3" 87 | sld-id: sldl-33303 88 | - os-id: "ocd-division/country:us/state:nh/sldl:coos_4" 89 | sld-id: sldl-33304 90 | - os-id: "ocd-division/country:us/state:nh/sldl:coos_5" 91 | sld-id: sldl-33305 92 | - os-id: "ocd-division/country:us/state:nh/sldl:coos_6" 93 | sld-id: sldl-33306 94 | - os-id: "ocd-division/country:us/state:nh/sldl:coos_7" 95 | sld-id: sldl-33307 96 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_1" 97 | sld-id: sldl-33401 98 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_2" 99 | sld-id: sldl-33402 100 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_3" 101 | sld-id: sldl-33403 102 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_4" 103 | sld-id: sldl-33404 104 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_5" 105 | sld-id: sldl-33405 106 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_6" 107 | sld-id: sldl-33406 108 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_7" 109 | sld-id: sldl-33407 110 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_8" 111 | sld-id: sldl-33408 112 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_9" 113 | sld-id: sldl-33409 114 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_10" 115 | sld-id: sldl-33410 116 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_11" 117 | sld-id: sldl-33411 118 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_12" 119 | sld-id: sldl-33412 120 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_13" 121 | sld-id: sldl-33413 122 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_14" 123 | sld-id: sldl-33414 124 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_15" 125 | sld-id: sldl-33415 126 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_16" 127 | sld-id: sldl-33416 128 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_17" 129 | sld-id: sldl-33417 130 | - os-id: "ocd-division/country:us/state:nh/sldl:grafton_18" 131 | sld-id: sldl-33418 132 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_1" 133 | sld-id: sldl-33501 134 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_2" 135 | sld-id: sldl-33502 136 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_3" 137 | sld-id: sldl-33503 138 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_4" 139 | sld-id: sldl-33504 140 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_5" 141 | sld-id: sldl-33505 142 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_6" 143 | sld-id: sldl-33506 144 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_7" 145 | sld-id: sldl-33507 146 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_8" 147 | sld-id: sldl-33508 148 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_9" 149 | sld-id: sldl-33509 150 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_10" 151 | sld-id: sldl-33510 152 | - os-id: 'ocd-division/country:us/state:nh/sldl:hillsborough_11' 153 | sld-id: sldl-33511 154 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_12" 155 | sld-id: sldl-33512 156 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_13" 157 | sld-id: sldl-33513 158 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_14" 159 | sld-id: sldl-33514 160 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_15" 161 | sld-id: sldl-33515 162 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_16" 163 | sld-id: sldl-33516 164 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_17" 165 | sld-id: sldl-33517 166 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_18" 167 | sld-id: sldl-33518 168 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_19" 169 | sld-id: sldl-33519 170 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_20" 171 | sld-id: sldl-33520 172 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_21" 173 | sld-id: sldl-33521 174 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_22" 175 | sld-id: sldl-33522 176 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_23" 177 | sld-id: sldl-33523 178 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_24" 179 | sld-id: sldl-33524 180 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_25" 181 | sld-id: sldl-33525 182 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_26" 183 | sld-id: sldl-33526 184 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_27" 185 | sld-id: sldl-33527 186 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_28" 187 | sld-id: sldl-33528 188 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_29" 189 | sld-id: sldl-33529 190 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_30" 191 | sld-id: sldl-33530 192 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_31" 193 | sld-id: sldl-33531 194 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_32" 195 | sld-id: sldl-33532 196 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_33" 197 | sld-id: sldl-33533 198 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_34" 199 | sld-id: sldl-33534 200 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_35" 201 | sld-id: sldl-33535 202 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_36" 203 | sld-id: sldl-33536 204 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_37" 205 | sld-id: sldl-33537 206 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_38" 207 | sld-id: sldl-33538 208 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_39" 209 | sld-id: sldl-33539 210 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_40" 211 | sld-id: sldl-33540 212 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_41" 213 | sld-id: sldl-33541 214 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_42" 215 | sld-id: sldl-33542 216 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_43" 217 | sld-id: sldl-33543 218 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_44" 219 | sld-id: sldl-33544 220 | - os-id: "ocd-division/country:us/state:nh/sldl:hillsborough_45" 221 | sld-id: sldl-33545 222 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_1" 223 | sld-id: sldl-33601 224 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_2" 225 | sld-id: sldl-33602 226 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_3" 227 | sld-id: sldl-33603 228 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_4" 229 | sld-id: sldl-33604 230 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_5" 231 | sld-id: sldl-33605 232 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_6" 233 | sld-id: sldl-33606 234 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_7" 235 | sld-id: sldl-33607 236 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_8" 237 | sld-id: sldl-33608 238 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_9" 239 | sld-id: sldl-33609 240 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_10" 241 | sld-id: sldl-33610 242 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_11" 243 | sld-id: sldl-33611 244 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_12" 245 | sld-id: sldl-33612 246 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_13" 247 | sld-id: sldl-33613 248 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_14" 249 | sld-id: sldl-33614 250 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_15" 251 | sld-id: sldl-33615 252 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_16" 253 | sld-id: sldl-33616 254 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_17" 255 | sld-id: sldl-33617 256 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_18" 257 | sld-id: sldl-33618 258 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_19" 259 | sld-id: sldl-33619 260 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_20" 261 | sld-id: sldl-33620 262 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_21" 263 | sld-id: sldl-33621 264 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_22" 265 | sld-id: sldl-33622 266 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_23" 267 | sld-id: sldl-33623 268 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_24" 269 | sld-id: sldl-33624 270 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_25" 271 | sld-id: sldl-33625 272 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_26" 273 | sld-id: sldl-33626 274 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_27" 275 | sld-id: sldl-33627 276 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_28" 277 | sld-id: sldl-33628 278 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_29" 279 | sld-id: sldl-33629 280 | - os-id: "ocd-division/country:us/state:nh/sldl:merrimack_30" 281 | sld-id: sldl-33630 282 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_1" 283 | sld-id: sldl-33701 284 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_2" 285 | sld-id: sldl-33702 286 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_3" 287 | sld-id: sldl-33703 288 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_4" 289 | sld-id: sldl-33704 290 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_5" 291 | sld-id: sldl-33705 292 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_6" 293 | sld-id: sldl-33706 294 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_7" 295 | sld-id: sldl-33707 296 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_8" 297 | sld-id: sldl-33708 298 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_9" 299 | sld-id: sldl-33709 300 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_10" 301 | sld-id: sldl-33710 302 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_11" 303 | sld-id: sldl-33711 304 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_12" 305 | sld-id: sldl-33712 306 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_13" 307 | sld-id: sldl-33713 308 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_14" 309 | sld-id: sldl-33714 310 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_15" 311 | sld-id: sldl-33715 312 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_16" 313 | sld-id: sldl-33716 314 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_17" 315 | sld-id: sldl-33717 316 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_18" 317 | sld-id: sldl-33718 318 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_19" 319 | sld-id: sldl-33719 320 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_20" 321 | sld-id: sldl-33720 322 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_21" 323 | sld-id: sldl-33721 324 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_22" 325 | sld-id: sldl-33722 326 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_23" 327 | sld-id: sldl-33723 328 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_24" 329 | sld-id: sldl-33724 330 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_25" 331 | sld-id: sldl-33725 332 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_26" 333 | sld-id: sldl-33726 334 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_27" 335 | sld-id: sldl-33727 336 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_28" 337 | sld-id: sldl-33728 338 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_29" 339 | sld-id: sldl-33729 340 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_30" 341 | sld-id: sldl-33730 342 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_31" 343 | sld-id: sldl-33731 344 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_32" 345 | sld-id: sldl-33732 346 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_33" 347 | sld-id: sldl-33733 348 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_34" 349 | sld-id: sldl-33734 350 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_35" 351 | sld-id: sldl-33735 352 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_36" 353 | sld-id: sldl-33736 354 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_37" 355 | sld-id: sldl-33737 356 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_38" 357 | sld-id: sldl-33738 358 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_39" 359 | sld-id: sldl-33739 360 | - os-id: "ocd-division/country:us/state:nh/sldl:rockingham_40" 361 | sld-id: sldl-33740 362 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_1" 363 | sld-id: sldl-33801 364 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_2" 365 | sld-id: sldl-33802 366 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_3" 367 | sld-id: sldl-33803 368 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_4" 369 | sld-id: sldl-33804 370 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_5" 371 | sld-id: sldl-33805 372 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_6" 373 | sld-id: sldl-33806 374 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_7" 375 | sld-id: sldl-33807 376 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_8" 377 | sld-id: sldl-33808 378 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_9" 379 | sld-id: sldl-33809 380 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_10" 381 | sld-id: sldl-33810 382 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_11" 383 | sld-id: sldl-33811 384 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_12" 385 | sld-id: sldl-33812 386 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_13" 387 | sld-id: sldl-33813 388 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_14" 389 | sld-id: sldl-33814 390 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_15" 391 | sld-id: sldl-33815 392 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_16" 393 | sld-id: sldl-33816 394 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_17" 395 | sld-id: sldl-33817 396 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_18" 397 | sld-id: sldl-33818 398 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_19" 399 | sld-id: sldl-33819 400 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_20" 401 | sld-id: sldl-33820 402 | - os-id: "ocd-division/country:us/state:nh/sldl:strafford_21" 403 | sld-id: sldl-33821 404 | - os-id: "ocd-division/country:us/state:nh/sldl:sullivan_1" 405 | sld-id: sldl-33901 406 | - os-id: "ocd-division/country:us/state:nh/sldl:sullivan_2" 407 | sld-id: sldl-33902 408 | - os-id: "ocd-division/country:us/state:nh/sldl:sullivan_3" 409 | sld-id: sldl-33903 410 | - os-id: "ocd-division/country:us/state:nh/sldl:sullivan_4" 411 | sld-id: sldl-33904 412 | - os-id: "ocd-division/country:us/state:nh/sldl:sullivan_5" 413 | sld-id: sldl-33905 414 | - os-id: "ocd-division/country:us/state:nh/sldl:sullivan_6" 415 | sld-id: sldl-33906 416 | - os-id: "ocd-division/country:us/state:nh/sldl:sullivan_7" 417 | sld-id: sldl-33907 418 | - os-id: "ocd-division/country:us/state:nh/sldl:sullivan_8" 419 | sld-id: sldl-33908 420 | -------------------------------------------------------------------------------- /configs/jurisdictions/usa.yml: -------------------------------------------------------------------------------- 1 | name: United States 2 | id-mappings: 3 | custom: 4 | - os-id: "ocd-division/country:us/state:ak/cd:at-large" 5 | name: "Alaska's at-large congressional district" 6 | sld-id: cd-0200 7 | - os-id: "ocd-division/country:us/state:al/cd:1" 8 | name: "Alabama's 1st congressional district" 9 | sld-id: cd-0101 10 | - os-id: "ocd-division/country:us/state:al/cd:2" 11 | name: "Alabama's 2nd congressional district" 12 | sld-id: cd-0102 13 | - os-id: "ocd-division/country:us/state:al/cd:3" 14 | name: "Alabama's 3rd congressional district" 15 | sld-id: cd-0103 16 | - os-id: "ocd-division/country:us/state:al/cd:4" 17 | name: "Alabama's 4th congressional district" 18 | sld-id: cd-0104 19 | - os-id: "ocd-division/country:us/state:al/cd:5" 20 | name: "Alabama's 5th congressional district" 21 | sld-id: cd-0105 22 | - os-id: "ocd-division/country:us/state:al/cd:6" 23 | name: "Alabama's 6th congressional district" 24 | sld-id: cd-0106 25 | - os-id: "ocd-division/country:us/state:al/cd:7" 26 | name: "Alabama's 7th congressional district" 27 | sld-id: cd-0107 28 | - os-id: "ocd-division/country:us/state:ar/cd:1" 29 | name: "Arkansas's 1st congressional district" 30 | sld-id: cd-0501 31 | - os-id: "ocd-division/country:us/state:ar/cd:2" 32 | name: "Arkansas's 2nd congressional district" 33 | sld-id: cd-0502 34 | - os-id: "ocd-division/country:us/state:ar/cd:3" 35 | name: "Arkansas's 3rd congressional district" 36 | sld-id: cd-0503 37 | - os-id: "ocd-division/country:us/state:ar/cd:4" 38 | name: "Arkansas's 4th congressional district" 39 | sld-id: cd-0504 40 | - os-id: "ocd-division/country:us/state:az/cd:1" 41 | name: "Arizona's 1st congressional district" 42 | sld-id: cd-0401 43 | - os-id: "ocd-division/country:us/state:az/cd:2" 44 | name: "Arizona's 2nd congressional district" 45 | sld-id: cd-0402 46 | - os-id: "ocd-division/country:us/state:az/cd:3" 47 | name: "Arizona's 3rd congressional district" 48 | sld-id: cd-0403 49 | - os-id: "ocd-division/country:us/state:az/cd:4" 50 | name: "Arizona's 4th congressional district" 51 | sld-id: cd-0404 52 | - os-id: "ocd-division/country:us/state:az/cd:5" 53 | name: "Arizona's 5th congressional district" 54 | sld-id: cd-0405 55 | - os-id: "ocd-division/country:us/state:az/cd:6" 56 | name: "Arizona's 6th congressional district" 57 | sld-id: cd-0406 58 | - os-id: "ocd-division/country:us/state:az/cd:7" 59 | name: "Arizona's 7th congressional district" 60 | sld-id: cd-0407 61 | - os-id: "ocd-division/country:us/state:az/cd:8" 62 | name: "Arizona's 8th congressional district" 63 | sld-id: cd-0408 64 | - os-id: "ocd-division/country:us/state:az/cd:9" 65 | name: "Arizona's 9th congressional district" 66 | sld-id: cd-0409 67 | - os-id: "ocd-division/country:us/state:ca/cd:10" 68 | name: "California's 10th congressional district" 69 | sld-id: cd-0610 70 | - os-id: "ocd-division/country:us/state:ca/cd:11" 71 | name: "California's 11th congressional district" 72 | sld-id: cd-0611 73 | - os-id: "ocd-division/country:us/state:ca/cd:12" 74 | name: "California's 12th congressional district" 75 | sld-id: cd-0612 76 | - os-id: "ocd-division/country:us/state:ca/cd:13" 77 | name: "California's 13th congressional district" 78 | sld-id: cd-0613 79 | - os-id: "ocd-division/country:us/state:ca/cd:14" 80 | name: "California's 14th congressional district" 81 | sld-id: cd-0614 82 | - os-id: "ocd-division/country:us/state:ca/cd:15" 83 | name: "California's 15th congressional district" 84 | sld-id: cd-0615 85 | - os-id: "ocd-division/country:us/state:ca/cd:16" 86 | name: "California's 16th congressional district" 87 | sld-id: cd-0616 88 | - os-id: "ocd-division/country:us/state:ca/cd:17" 89 | name: "California's 17th congressional district" 90 | sld-id: cd-0617 91 | - os-id: "ocd-division/country:us/state:ca/cd:18" 92 | name: "California's 18th congressional district" 93 | sld-id: cd-0618 94 | - os-id: "ocd-division/country:us/state:ca/cd:19" 95 | name: "California's 19th congressional district" 96 | sld-id: cd-0619 97 | - os-id: "ocd-division/country:us/state:ca/cd:1" 98 | name: "California's 1st congressional district" 99 | sld-id: cd-0601 100 | - os-id: "ocd-division/country:us/state:ca/cd:20" 101 | name: "California's 20th congressional district" 102 | sld-id: cd-0620 103 | - os-id: "ocd-division/country:us/state:ca/cd:21" 104 | name: "California's 21st congressional district" 105 | sld-id: cd-0621 106 | - os-id: "ocd-division/country:us/state:ca/cd:22" 107 | name: "California's 22nd congressional district" 108 | sld-id: cd-0622 109 | - os-id: "ocd-division/country:us/state:ca/cd:23" 110 | name: "California's 23rd congressional district" 111 | sld-id: cd-0623 112 | - os-id: "ocd-division/country:us/state:ca/cd:24" 113 | name: "California's 24th congressional district" 114 | sld-id: cd-0624 115 | - os-id: "ocd-division/country:us/state:ca/cd:25" 116 | name: "California's 25th congressional district" 117 | sld-id: cd-0625 118 | - os-id: "ocd-division/country:us/state:ca/cd:26" 119 | name: "California's 26th congressional district" 120 | sld-id: cd-0626 121 | - os-id: "ocd-division/country:us/state:ca/cd:27" 122 | name: "California's 27th congressional district" 123 | sld-id: cd-0627 124 | - os-id: "ocd-division/country:us/state:ca/cd:28" 125 | name: "California's 28th congressional district" 126 | sld-id: cd-0628 127 | - os-id: "ocd-division/country:us/state:ca/cd:29" 128 | name: "California's 29th congressional district" 129 | sld-id: cd-0629 130 | - os-id: "ocd-division/country:us/state:ca/cd:2" 131 | name: "California's 2nd congressional district" 132 | sld-id: cd-0602 133 | - os-id: "ocd-division/country:us/state:ca/cd:30" 134 | name: "California's 30th congressional district" 135 | sld-id: cd-0630 136 | - os-id: "ocd-division/country:us/state:ca/cd:31" 137 | name: "California's 31st congressional district" 138 | sld-id: cd-0631 139 | - os-id: "ocd-division/country:us/state:ca/cd:32" 140 | name: "California's 32nd congressional district" 141 | sld-id: cd-0632 142 | - os-id: "ocd-division/country:us/state:ca/cd:33" 143 | name: "California's 33rd congressional district" 144 | sld-id: cd-0633 145 | - os-id: "ocd-division/country:us/state:ca/cd:34" 146 | name: "California's 34th congressional district" 147 | sld-id: cd-0634 148 | - os-id: "ocd-division/country:us/state:ca/cd:35" 149 | name: "California's 35th congressional district" 150 | sld-id: cd-0635 151 | - os-id: "ocd-division/country:us/state:ca/cd:36" 152 | name: "California's 36th congressional district" 153 | sld-id: cd-0636 154 | - os-id: "ocd-division/country:us/state:ca/cd:37" 155 | name: "California's 37th congressional district" 156 | sld-id: cd-0637 157 | - os-id: "ocd-division/country:us/state:ca/cd:38" 158 | name: "California's 38th congressional district" 159 | sld-id: cd-0638 160 | - os-id: "ocd-division/country:us/state:ca/cd:39" 161 | name: "California's 39th congressional district" 162 | sld-id: cd-0639 163 | - os-id: "ocd-division/country:us/state:ca/cd:3" 164 | name: "California's 3rd congressional district" 165 | sld-id: cd-0603 166 | - os-id: "ocd-division/country:us/state:ca/cd:40" 167 | name: "California's 40th congressional district" 168 | sld-id: cd-0640 169 | - os-id: "ocd-division/country:us/state:ca/cd:41" 170 | name: "California's 41st congressional district" 171 | sld-id: cd-0641 172 | - os-id: "ocd-division/country:us/state:ca/cd:42" 173 | name: "California's 42nd congressional district" 174 | sld-id: cd-0642 175 | - os-id: "ocd-division/country:us/state:ca/cd:43" 176 | name: "California's 43rd congressional district" 177 | sld-id: cd-0643 178 | - os-id: "ocd-division/country:us/state:ca/cd:44" 179 | name: "California's 44th congressional district" 180 | sld-id: cd-0644 181 | - os-id: "ocd-division/country:us/state:ca/cd:45" 182 | name: "California's 45th congressional district" 183 | sld-id: cd-0645 184 | - os-id: "ocd-division/country:us/state:ca/cd:46" 185 | name: "California's 46th congressional district" 186 | sld-id: cd-0646 187 | - os-id: "ocd-division/country:us/state:ca/cd:47" 188 | name: "California's 47th congressional district" 189 | sld-id: cd-0647 190 | - os-id: "ocd-division/country:us/state:ca/cd:48" 191 | name: "California's 48th congressional district" 192 | sld-id: cd-0648 193 | - os-id: "ocd-division/country:us/state:ca/cd:49" 194 | name: "California's 49th congressional district" 195 | sld-id: cd-0649 196 | - os-id: "ocd-division/country:us/state:ca/cd:4" 197 | name: "California's 4th congressional district" 198 | sld-id: cd-0604 199 | - os-id: "ocd-division/country:us/state:ca/cd:50" 200 | name: "California's 50th congressional district" 201 | sld-id: cd-0650 202 | - os-id: "ocd-division/country:us/state:ca/cd:51" 203 | name: "California's 51st congressional district" 204 | sld-id: cd-0651 205 | - os-id: "ocd-division/country:us/state:ca/cd:52" 206 | name: "California's 52nd congressional district" 207 | sld-id: cd-0652 208 | - os-id: "ocd-division/country:us/state:ca/cd:53" 209 | name: "California's 53rd congressional district" 210 | sld-id: cd-0653 211 | - os-id: "ocd-division/country:us/state:ca/cd:5" 212 | name: "California's 5th congressional district" 213 | sld-id: cd-0605 214 | - os-id: "ocd-division/country:us/state:ca/cd:6" 215 | name: "California's 6th congressional district" 216 | sld-id: cd-0606 217 | - os-id: "ocd-division/country:us/state:ca/cd:7" 218 | name: "California's 7th congressional district" 219 | sld-id: cd-0607 220 | - os-id: "ocd-division/country:us/state:ca/cd:8" 221 | name: "California's 8th congressional district" 222 | sld-id: cd-0608 223 | - os-id: "ocd-division/country:us/state:ca/cd:9" 224 | name: "California's 9th congressional district" 225 | sld-id: cd-0609 226 | - os-id: "ocd-division/country:us/state:co/cd:1" 227 | name: "Colorado's 1st congressional district" 228 | sld-id: cd-0801 229 | - os-id: "ocd-division/country:us/state:co/cd:2" 230 | name: "Colorado's 2nd congressional district" 231 | sld-id: cd-0802 232 | - os-id: "ocd-division/country:us/state:co/cd:3" 233 | name: "Colorado's 3rd congressional district" 234 | sld-id: cd-0803 235 | - os-id: "ocd-division/country:us/state:co/cd:4" 236 | name: "Colorado's 4th congressional district" 237 | sld-id: cd-0804 238 | - os-id: "ocd-division/country:us/state:co/cd:5" 239 | name: "Colorado's 5th congressional district" 240 | sld-id: cd-0805 241 | - os-id: "ocd-division/country:us/state:co/cd:6" 242 | name: "Colorado's 6th congressional district" 243 | sld-id: cd-0806 244 | - os-id: "ocd-division/country:us/state:co/cd:7" 245 | name: "Colorado's 7th congressional district" 246 | sld-id: cd-0807 247 | - os-id: "ocd-division/country:us/state:ct/cd:1" 248 | name: "Connecticut's 1st congressional district" 249 | sld-id: cd-0901 250 | - os-id: "ocd-division/country:us/state:ct/cd:2" 251 | name: "Connecticut's 2nd congressional district" 252 | sld-id: cd-0902 253 | - os-id: "ocd-division/country:us/state:ct/cd:3" 254 | name: "Connecticut's 3rd congressional district" 255 | sld-id: cd-0903 256 | - os-id: "ocd-division/country:us/state:ct/cd:4" 257 | name: "Connecticut's 4th congressional district" 258 | sld-id: cd-0904 259 | - os-id: "ocd-division/country:us/state:ct/cd:5" 260 | name: "Connecticut's 5th congressional district" 261 | sld-id: cd-0905 262 | - os-id: "ocd-division/country:us/state:de/cd:at-large" 263 | name: "Delaware's at-large congressional district" 264 | sld-id: cd-1000 265 | - os-id: "ocd-division/country:us/state:fl/cd:10" 266 | name: "Florida's 10th congressional district" 267 | sld-id: cd-1210 268 | - os-id: "ocd-division/country:us/state:fl/cd:11" 269 | name: "Florida's 11th congressional district" 270 | sld-id: cd-1211 271 | - os-id: "ocd-division/country:us/state:fl/cd:12" 272 | name: "Florida's 12th congressional district" 273 | sld-id: cd-1212 274 | - os-id: "ocd-division/country:us/state:fl/cd:13" 275 | name: "Florida's 13th congressional district" 276 | sld-id: cd-1213 277 | - os-id: "ocd-division/country:us/state:fl/cd:14" 278 | name: "Florida's 14th congressional district" 279 | sld-id: cd-1214 280 | - os-id: "ocd-division/country:us/state:fl/cd:15" 281 | name: "Florida's 15th congressional district" 282 | sld-id: cd-1215 283 | - os-id: "ocd-division/country:us/state:fl/cd:16" 284 | name: "Florida's 16th congressional district" 285 | sld-id: cd-1216 286 | - os-id: "ocd-division/country:us/state:fl/cd:17" 287 | name: "Florida's 17th congressional district" 288 | sld-id: cd-1217 289 | - os-id: "ocd-division/country:us/state:fl/cd:18" 290 | name: "Florida's 18th congressional district" 291 | sld-id: cd-1218 292 | - os-id: "ocd-division/country:us/state:fl/cd:19" 293 | name: "Florida's 19th congressional district" 294 | sld-id: cd-1219 295 | - os-id: "ocd-division/country:us/state:fl/cd:1" 296 | name: "Florida's 1st congressional district" 297 | sld-id: cd-1201 298 | - os-id: "ocd-division/country:us/state:fl/cd:20" 299 | name: "Florida's 20th congressional district" 300 | sld-id: cd-1220 301 | - os-id: "ocd-division/country:us/state:fl/cd:21" 302 | name: "Florida's 21st congressional district" 303 | sld-id: cd-1221 304 | - os-id: "ocd-division/country:us/state:fl/cd:22" 305 | name: "Florida's 22nd congressional district" 306 | sld-id: cd-1222 307 | - os-id: "ocd-division/country:us/state:fl/cd:23" 308 | name: "Florida's 23rd congressional district" 309 | sld-id: cd-1223 310 | - os-id: "ocd-division/country:us/state:fl/cd:24" 311 | name: "Florida's 24th congressional district" 312 | sld-id: cd-1224 313 | - os-id: "ocd-division/country:us/state:fl/cd:25" 314 | name: "Florida's 25th congressional district" 315 | sld-id: cd-1225 316 | - os-id: "ocd-division/country:us/state:fl/cd:26" 317 | name: "Florida's 26th congressional district" 318 | sld-id: cd-1226 319 | - os-id: "ocd-division/country:us/state:fl/cd:27" 320 | name: "Florida's 27th congressional district" 321 | sld-id: cd-1227 322 | - os-id: "ocd-division/country:us/state:fl/cd:2" 323 | name: "Florida's 2nd congressional district" 324 | sld-id: cd-1202 325 | - os-id: "ocd-division/country:us/state:fl/cd:3" 326 | name: "Florida's 3rd congressional district" 327 | sld-id: cd-1203 328 | - os-id: "ocd-division/country:us/state:fl/cd:4" 329 | name: "Florida's 4th congressional district" 330 | sld-id: cd-1204 331 | - os-id: "ocd-division/country:us/state:fl/cd:5" 332 | name: "Florida's 5th congressional district" 333 | sld-id: cd-1205 334 | - os-id: "ocd-division/country:us/state:fl/cd:6" 335 | name: "Florida's 6th congressional district" 336 | sld-id: cd-1206 337 | - os-id: "ocd-division/country:us/state:fl/cd:7" 338 | name: "Florida's 7th congressional district" 339 | sld-id: cd-1207 340 | - os-id: "ocd-division/country:us/state:fl/cd:8" 341 | name: "Florida's 8th congressional district" 342 | sld-id: cd-1208 343 | - os-id: "ocd-division/country:us/state:fl/cd:9" 344 | name: "Florida's 9th congressional district" 345 | sld-id: cd-1209 346 | - os-id: "ocd-division/country:us/state:ga/cd:10" 347 | name: "Georgia's 10th congressional district" 348 | sld-id: cd-1310 349 | - os-id: "ocd-division/country:us/state:ga/cd:11" 350 | name: "Georgia's 11th congressional district" 351 | sld-id: cd-1311 352 | - os-id: "ocd-division/country:us/state:ga/cd:12" 353 | name: "Georgia's 12th congressional district" 354 | sld-id: cd-1312 355 | - os-id: "ocd-division/country:us/state:ga/cd:13" 356 | name: "Georgia's 13th congressional district" 357 | sld-id: cd-1313 358 | - os-id: "ocd-division/country:us/state:ga/cd:14" 359 | name: "Georgia's 14th congressional district" 360 | sld-id: cd-1314 361 | - os-id: "ocd-division/country:us/state:ga/cd:1" 362 | name: "Georgia's 1st congressional district" 363 | sld-id: cd-1301 364 | - os-id: "ocd-division/country:us/state:ga/cd:2" 365 | name: "Georgia's 2nd congressional district" 366 | sld-id: cd-1302 367 | - os-id: "ocd-division/country:us/state:ga/cd:3" 368 | name: "Georgia's 3rd congressional district" 369 | sld-id: cd-1303 370 | - os-id: "ocd-division/country:us/state:ga/cd:4" 371 | name: "Georgia's 4th congressional district" 372 | sld-id: cd-1304 373 | - os-id: "ocd-division/country:us/state:ga/cd:5" 374 | name: "Georgia's 5th congressional district" 375 | sld-id: cd-1305 376 | - os-id: "ocd-division/country:us/state:ga/cd:6" 377 | name: "Georgia's 6th congressional district" 378 | sld-id: cd-1306 379 | - os-id: "ocd-division/country:us/state:ga/cd:7" 380 | name: "Georgia's 7th congressional district" 381 | sld-id: cd-1307 382 | - os-id: "ocd-division/country:us/state:ga/cd:8" 383 | name: "Georgia's 8th congressional district" 384 | sld-id: cd-1308 385 | - os-id: "ocd-division/country:us/state:ga/cd:9" 386 | name: "Georgia's 9th congressional district" 387 | sld-id: cd-1309 388 | - os-id: "ocd-division/country:us/state:hi/cd:1" 389 | name: "Hawaii's 1st congressional district" 390 | sld-id: cd-1501 391 | - os-id: "ocd-division/country:us/state:hi/cd:2" 392 | name: "Hawaii's 2nd congressional district" 393 | sld-id: cd-1502 394 | - os-id: "ocd-division/country:us/state:ia/cd:1" 395 | name: "Iowa's 1st congressional district" 396 | sld-id: cd-1901 397 | - os-id: "ocd-division/country:us/state:ia/cd:2" 398 | name: "Iowa's 2nd congressional district" 399 | sld-id: cd-1902 400 | - os-id: "ocd-division/country:us/state:ia/cd:3" 401 | name: "Iowa's 3rd congressional district" 402 | sld-id: cd-1903 403 | - os-id: "ocd-division/country:us/state:ia/cd:4" 404 | name: "Iowa's 4th congressional district" 405 | sld-id: cd-1904 406 | - os-id: "ocd-division/country:us/state:ia/cd:5" 407 | name: "Iowa's 5th congressional district (obsolete as of 2012)" 408 | sld-id: cd-1905 409 | expired: 2013-01-03 410 | - os-id: "ocd-division/country:us/state:id/cd:1" 411 | name: "Idaho's 1st congressional district" 412 | sld-id: cd-1601 413 | - os-id: "ocd-division/country:us/state:id/cd:2" 414 | name: "Idaho's 2nd congressional district" 415 | sld-id: cd-1602 416 | - os-id: "ocd-division/country:us/state:il/cd:19" 417 | name: "Illinois's 19th congressional district (obsolete as of 2012)" 418 | sld-id: cd-1719 419 | expiration: 2013-01-03 420 | - os-id: "ocd-division/country:us/state:il/cd:10" 421 | name: "Illinois's 10th congressional district" 422 | sld-id: cd-1710 423 | - os-id: "ocd-division/country:us/state:il/cd:11" 424 | name: "Illinois's 11th congressional district" 425 | sld-id: cd-1711 426 | - os-id: "ocd-division/country:us/state:il/cd:12" 427 | name: "Illinois's 12th congressional district" 428 | sld-id: cd-1712 429 | - os-id: "ocd-division/country:us/state:il/cd:13" 430 | name: "Illinois's 13th congressional district" 431 | sld-id: cd-1713 432 | - os-id: "ocd-division/country:us/state:il/cd:14" 433 | name: "Illinois's 14th congressional district" 434 | sld-id: cd-1714 435 | - os-id: "ocd-division/country:us/state:il/cd:15" 436 | name: "Illinois's 15th congressional district" 437 | sld-id: cd-1715 438 | - os-id: "ocd-division/country:us/state:il/cd:16" 439 | name: "Illinois's 16th congressional district" 440 | sld-id: cd-1716 441 | - os-id: "ocd-division/country:us/state:il/cd:17" 442 | name: "Illinois's 17th congressional district" 443 | sld-id: cd-1717 444 | - os-id: "ocd-division/country:us/state:il/cd:18" 445 | name: "Illinois's 18th congressional district" 446 | sld-id: cd-1718 447 | - os-id: "ocd-division/country:us/state:il/cd:1" 448 | name: "Illinois's 1st congressional district" 449 | sld-id: cd-1701 450 | - os-id: "ocd-division/country:us/state:il/cd:2" 451 | name: "Illinois's 2nd congressional district" 452 | sld-id: cd-1702 453 | - os-id: "ocd-division/country:us/state:il/cd:3" 454 | name: "Illinois's 3rd congressional district" 455 | sld-id: cd-1703 456 | - os-id: "ocd-division/country:us/state:il/cd:4" 457 | name: "Illinois's 4th congressional district" 458 | sld-id: cd-1704 459 | - os-id: "ocd-division/country:us/state:il/cd:5" 460 | name: "Illinois's 5th congressional district" 461 | sld-id: cd-1705 462 | - os-id: "ocd-division/country:us/state:il/cd:6" 463 | name: "Illinois's 6th congressional district" 464 | sld-id: cd-1706 465 | - os-id: "ocd-division/country:us/state:il/cd:7" 466 | name: "Illinois's 7th congressional district" 467 | sld-id: cd-1707 468 | - os-id: "ocd-division/country:us/state:il/cd:8" 469 | name: "Illinois's 8th congressional district" 470 | sld-id: cd-1708 471 | - os-id: "ocd-division/country:us/state:il/cd:9" 472 | name: "Illinois's 9th congressional district" 473 | sld-id: cd-1709 474 | - os-id: "ocd-division/country:us/state:in/cd:1" 475 | name: "Indiana's 1st congressional district" 476 | sld-id: cd-1801 477 | - os-id: "ocd-division/country:us/state:in/cd:2" 478 | name: "Indiana's 2nd congressional district" 479 | sld-id: cd-1802 480 | - os-id: "ocd-division/country:us/state:in/cd:3" 481 | name: "Indiana's 3rd congressional district" 482 | sld-id: cd-1803 483 | - os-id: "ocd-division/country:us/state:in/cd:4" 484 | name: "Indiana's 4th congressional district" 485 | sld-id: cd-1804 486 | - os-id: "ocd-division/country:us/state:in/cd:5" 487 | name: "Indiana's 5th congressional district" 488 | sld-id: cd-1805 489 | - os-id: "ocd-division/country:us/state:in/cd:6" 490 | name: "Indiana's 6th congressional district" 491 | sld-id: cd-1806 492 | - os-id: "ocd-division/country:us/state:in/cd:7" 493 | name: "Indiana's 7th congressional district" 494 | sld-id: cd-1807 495 | - os-id: "ocd-division/country:us/state:in/cd:8" 496 | name: "Indiana's 8th congressional district" 497 | sld-id: cd-1808 498 | - os-id: "ocd-division/country:us/state:in/cd:9" 499 | name: "Indiana's 9th congressional district" 500 | sld-id: cd-1809 501 | - os-id: "ocd-division/country:us/state:ks/cd:1" 502 | name: "Kansas's 1st congressional district" 503 | sld-id: cd-2001 504 | - os-id: "ocd-division/country:us/state:ks/cd:2" 505 | name: "Kansas's 2nd congressional district" 506 | sld-id: cd-2002 507 | - os-id: "ocd-division/country:us/state:ks/cd:3" 508 | name: "Kansas's 3rd congressional district" 509 | sld-id: cd-2003 510 | - os-id: "ocd-division/country:us/state:ks/cd:4" 511 | name: "Kansas's 4th congressional district" 512 | sld-id: cd-2004 513 | - os-id: "ocd-division/country:us/state:ky/cd:1" 514 | name: "Kentucky's 1st congressional district" 515 | sld-id: cd-2101 516 | - os-id: "ocd-division/country:us/state:ky/cd:2" 517 | name: "Kentucky's 2nd congressional district" 518 | sld-id: cd-2102 519 | - os-id: "ocd-division/country:us/state:ky/cd:3" 520 | name: "Kentucky's 3rd congressional district" 521 | sld-id: cd-2103 522 | - os-id: "ocd-division/country:us/state:ky/cd:4" 523 | name: "Kentucky's 4th congressional district" 524 | sld-id: cd-2104 525 | - os-id: "ocd-division/country:us/state:ky/cd:5" 526 | name: "Kentucky's 5th congressional district" 527 | sld-id: cd-2105 528 | - os-id: "ocd-division/country:us/state:ky/cd:6" 529 | name: "Kentucky's 6th congressional district" 530 | sld-id: cd-2106 531 | - os-id: "ocd-division/country:us/state:la/cd:1" 532 | name: "Louisiana's 1st congressional district" 533 | sld-id: cd-2201 534 | - os-id: "ocd-division/country:us/state:la/cd:2" 535 | name: "Louisiana's 2nd congressional district" 536 | sld-id: cd-2202 537 | - os-id: "ocd-division/country:us/state:la/cd:3" 538 | name: "Louisiana's 3rd congressional district" 539 | sld-id: cd-2203 540 | - os-id: "ocd-division/country:us/state:la/cd:4" 541 | name: "Louisiana's 4th congressional district" 542 | sld-id: cd-2204 543 | - os-id: "ocd-division/country:us/state:la/cd:5" 544 | name: "Louisiana's 5th congressional district" 545 | sld-id: cd-2205 546 | - os-id: "ocd-division/country:us/state:la/cd:6" 547 | name: "Louisiana's 6th congressional district" 548 | sld-id: cd-2206 549 | - os-id: "ocd-division/country:us/state:la/cd:7" 550 | name: "Louisiana's 7th congressional district (obsolete as of 2012)" 551 | sld-id: cd-2207 552 | expired: 2013-01-03 553 | - os-id: "ocd-division/country:us/state:ma/cd:1" 554 | name: "Massachusetts's 1st congressional district" 555 | sld-id: cd-2501 556 | - os-id: "ocd-division/country:us/state:ma/cd:2" 557 | name: "Massachusetts's 2nd congressional district" 558 | sld-id: cd-2502 559 | - os-id: "ocd-division/country:us/state:ma/cd:3" 560 | name: "Massachusetts's 3rd congressional district" 561 | sld-id: cd-2503 562 | - os-id: "ocd-division/country:us/state:ma/cd:4" 563 | name: "Massachusetts's 4th congressional district" 564 | sld-id: cd-2504 565 | - os-id: "ocd-division/country:us/state:ma/cd:5" 566 | name: "Massachusetts's 5th congressional district" 567 | sld-id: cd-2505 568 | - os-id: "ocd-division/country:us/state:ma/cd:6" 569 | name: "Massachusetts's 6th congressional district" 570 | sld-id: cd-2506 571 | - os-id: "ocd-division/country:us/state:ma/cd:7" 572 | name: "Massachusetts's 7th congressional district" 573 | sld-id: cd-2507 574 | - os-id: "ocd-division/country:us/state:ma/cd:8" 575 | name: "Massachusetts's 8th congressional district" 576 | sld-id: cd-2508 577 | - os-id: "ocd-division/country:us/state:ma/cd:9" 578 | name: "Massachusetts's 9th congressional district" 579 | sld-id: cd-2509 580 | - os-id: "ocd-division/country:us/state:ma/cd:10" 581 | name: "Massachusetts's 10th congressional district (obsolete as of 2012)" 582 | sld-id: cd-2510 583 | expired: 2013-01-03 584 | - os-id: "ocd-division/country:us/state:md/cd:1" 585 | name: "Maryland's 1st congressional district" 586 | sld-id: cd-2401 587 | - os-id: "ocd-division/country:us/state:md/cd:2" 588 | name: "Maryland's 2nd congressional district" 589 | sld-id: cd-2402 590 | - os-id: "ocd-division/country:us/state:md/cd:3" 591 | name: "Maryland's 3rd congressional district" 592 | sld-id: cd-2403 593 | - os-id: "ocd-division/country:us/state:md/cd:4" 594 | name: "Maryland's 4th congressional district" 595 | sld-id: cd-2404 596 | - os-id: "ocd-division/country:us/state:md/cd:5" 597 | name: "Maryland's 5th congressional district" 598 | sld-id: cd-2405 599 | - os-id: "ocd-division/country:us/state:md/cd:6" 600 | name: "Maryland's 6th congressional district" 601 | sld-id: cd-2406 602 | - os-id: "ocd-division/country:us/state:md/cd:7" 603 | name: "Maryland's 7th congressional district" 604 | sld-id: cd-2407 605 | - os-id: "ocd-division/country:us/state:md/cd:8" 606 | name: "Maryland's 8th congressional district" 607 | sld-id: cd-2408 608 | - os-id: "ocd-division/country:us/state:me/cd:1" 609 | name: "Maine's 1st congressional district" 610 | sld-id: cd-2301 611 | - os-id: "ocd-division/country:us/state:me/cd:2" 612 | name: "Maine's 2nd congressional district" 613 | sld-id: cd-2302 614 | - os-id: "ocd-division/country:us/state:mi/cd:10" 615 | name: "Michigan's 10th congressional district" 616 | sld-id: cd-2610 617 | - os-id: "ocd-division/country:us/state:mi/cd:11" 618 | name: "Michigan's 11th congressional district" 619 | sld-id: cd-2611 620 | - os-id: "ocd-division/country:us/state:mi/cd:12" 621 | name: "Michigan's 12th congressional district" 622 | sld-id: cd-2612 623 | - os-id: "ocd-division/country:us/state:mi/cd:13" 624 | name: "Michigan's 13th congressional district" 625 | sld-id: cd-2613 626 | - os-id: "ocd-division/country:us/state:mi/cd:14" 627 | name: "Michigan's 14th congressional district" 628 | sld-id: cd-2614 629 | - os-id: "ocd-division/country:us/state:mi/cd:1" 630 | name: "Michigan's 1st congressional district" 631 | sld-id: cd-2601 632 | - os-id: "ocd-division/country:us/state:mi/cd:2" 633 | name: "Michigan's 2nd congressional district" 634 | sld-id: cd-2602 635 | - os-id: "ocd-division/country:us/state:mi/cd:3" 636 | name: "Michigan's 3rd congressional district" 637 | sld-id: cd-2603 638 | - os-id: "ocd-division/country:us/state:mi/cd:4" 639 | name: "Michigan's 4th congressional district" 640 | sld-id: cd-2604 641 | - os-id: "ocd-division/country:us/state:mi/cd:5" 642 | name: "Michigan's 5th congressional district" 643 | sld-id: cd-2605 644 | - os-id: "ocd-division/country:us/state:mi/cd:6" 645 | name: "Michigan's 6th congressional district" 646 | sld-id: cd-2606 647 | - os-id: "ocd-division/country:us/state:mi/cd:7" 648 | name: "Michigan's 7th congressional district" 649 | sld-id: cd-2607 650 | - os-id: "ocd-division/country:us/state:mi/cd:8" 651 | name: "Michigan's 8th congressional district" 652 | sld-id: cd-2608 653 | - os-id: "ocd-division/country:us/state:mi/cd:9" 654 | name: "Michigan's 9th congressional district" 655 | sld-id: cd-2609 656 | - os-id: "ocd-division/country:us/state:mi/cd:15" 657 | name: "Michigan's 15th congressional district (obsolete as of 2012)" 658 | sld-id: cd-2615 659 | expired: 2013-01-03 660 | - os-id: "ocd-division/country:us/state:mn/cd:1" 661 | name: "Minnesota's 1st congressional district" 662 | sld-id: cd-2701 663 | - os-id: "ocd-division/country:us/state:mn/cd:2" 664 | name: "Minnesota's 2nd congressional district" 665 | sld-id: cd-2702 666 | - os-id: "ocd-division/country:us/state:mn/cd:3" 667 | name: "Minnesota's 3rd congressional district" 668 | sld-id: cd-2703 669 | - os-id: "ocd-division/country:us/state:mn/cd:4" 670 | name: "Minnesota's 4th congressional district" 671 | sld-id: cd-2704 672 | - os-id: "ocd-division/country:us/state:mn/cd:5" 673 | name: "Minnesota's 5th congressional district" 674 | sld-id: cd-2705 675 | - os-id: "ocd-division/country:us/state:mn/cd:6" 676 | name: "Minnesota's 6th congressional district" 677 | sld-id: cd-2706 678 | - os-id: "ocd-division/country:us/state:mn/cd:7" 679 | name: "Minnesota's 7th congressional district" 680 | sld-id: cd-2707 681 | - os-id: "ocd-division/country:us/state:mn/cd:8" 682 | name: "Minnesota's 8th congressional district" 683 | sld-id: cd-2708 684 | - os-id: "ocd-division/country:us/state:mo/cd:1" 685 | name: "Missouri's 1st congressional district" 686 | sld-id: cd-2901 687 | - os-id: "ocd-division/country:us/state:mo/cd:2" 688 | name: "Missouri's 2nd congressional district" 689 | sld-id: cd-2902 690 | - os-id: "ocd-division/country:us/state:mo/cd:3" 691 | name: "Missouri's 3rd congressional district" 692 | sld-id: cd-2903 693 | - os-id: "ocd-division/country:us/state:mo/cd:4" 694 | name: "Missouri's 4th congressional district" 695 | sld-id: cd-2904 696 | - os-id: "ocd-division/country:us/state:mo/cd:5" 697 | name: "Missouri's 5th congressional district" 698 | sld-id: cd-2905 699 | - os-id: "ocd-division/country:us/state:mo/cd:6" 700 | name: "Missouri's 6th congressional district" 701 | sld-id: cd-2906 702 | - os-id: "ocd-division/country:us/state:mo/cd:7" 703 | name: "Missouri's 7th congressional district" 704 | sld-id: cd-2907 705 | - os-id: "ocd-division/country:us/state:mo/cd:8" 706 | name: "Missouri's 8th congressional district" 707 | sld-id: cd-2908 708 | - os-id: "ocd-division/country:us/state:mo/cd:9" 709 | name: "Missouri's 9th congressional district (obsolete as of 2012)" 710 | sld-id: cd-2909 711 | expired: 2013-01-03 712 | - os-id: "ocd-division/country:us/state:ms/cd:1" 713 | name: "Mississippi's 1st congressional district" 714 | sld-id: cd-2801 715 | - os-id: "ocd-division/country:us/state:ms/cd:2" 716 | name: "Mississippi's 2nd congressional district" 717 | sld-id: cd-2802 718 | - os-id: "ocd-division/country:us/state:ms/cd:3" 719 | name: "Mississippi's 3rd congressional district" 720 | sld-id: cd-2803 721 | - os-id: "ocd-division/country:us/state:ms/cd:4" 722 | name: "Mississippi's 4th congressional district" 723 | sld-id: cd-2804 724 | - os-id: "ocd-division/country:us/state:mt/cd:at-large" 725 | name: "Montana's at-large congressional district" 726 | sld-id: cd-3000 727 | - os-id: "ocd-division/country:us/state:nc/cd:10" 728 | name: "North Carolina's 10th congressional district" 729 | sld-id: cd-3710 730 | - os-id: "ocd-division/country:us/state:nc/cd:11" 731 | name: "North Carolina's 11th congressional district" 732 | sld-id: cd-3711 733 | - os-id: "ocd-division/country:us/state:nc/cd:12" 734 | name: "North Carolina's 12th congressional district" 735 | sld-id: cd-3712 736 | - os-id: "ocd-division/country:us/state:nc/cd:13" 737 | name: "North Carolina's 13th congressional district" 738 | sld-id: cd-3713 739 | - os-id: "ocd-division/country:us/state:nc/cd:1" 740 | name: "North Carolina's 1st congressional district" 741 | sld-id: cd-3701 742 | - os-id: "ocd-division/country:us/state:nc/cd:2" 743 | name: "North Carolina's 2nd congressional district" 744 | sld-id: cd-3702 745 | - os-id: "ocd-division/country:us/state:nc/cd:3" 746 | name: "North Carolina's 3rd congressional district" 747 | sld-id: cd-3703 748 | - os-id: "ocd-division/country:us/state:nc/cd:4" 749 | name: "North Carolina's 4th congressional district" 750 | sld-id: cd-3704 751 | - os-id: "ocd-division/country:us/state:nc/cd:5" 752 | name: "North Carolina's 5th congressional district" 753 | sld-id: cd-3705 754 | - os-id: "ocd-division/country:us/state:nc/cd:6" 755 | name: "North Carolina's 6th congressional district" 756 | sld-id: cd-3706 757 | - os-id: "ocd-division/country:us/state:nc/cd:7" 758 | name: "North Carolina's 7th congressional district" 759 | sld-id: cd-3707 760 | - os-id: "ocd-division/country:us/state:nc/cd:8" 761 | name: "North Carolina's 8th congressional district" 762 | sld-id: cd-3708 763 | - os-id: "ocd-division/country:us/state:nc/cd:9" 764 | name: "North Carolina's 9th congressional district" 765 | sld-id: cd-3709 766 | - os-id: "ocd-division/country:us/state:nd/cd:at-large" 767 | name: "North Dakota's at-large congressional district" 768 | sld-id: cd-3800 769 | - os-id: "ocd-division/country:us/state:ne/cd:1" 770 | name: "Nebraska's 1st congressional district" 771 | sld-id: cd-3101 772 | - os-id: "ocd-division/country:us/state:ne/cd:2" 773 | name: "Nebraska's 2nd congressional district" 774 | sld-id: cd-3102 775 | - os-id: "ocd-division/country:us/state:ne/cd:3" 776 | name: "Nebraska's 3rd congressional district" 777 | sld-id: cd-3103 778 | - os-id: "ocd-division/country:us/state:nh/cd:1" 779 | name: "New Hampshire's 1st congressional district" 780 | sld-id: cd-3301 781 | - os-id: "ocd-division/country:us/state:nh/cd:2" 782 | name: "New Hampshire's 2nd congressional district" 783 | sld-id: cd-3302 784 | - os-id: "ocd-division/country:us/state:nj/cd:10" 785 | name: "New Jersey's 10th congressional district" 786 | sld-id: cd-3410 787 | - os-id: "ocd-division/country:us/state:nj/cd:11" 788 | name: "New Jersey's 11th congressional district" 789 | sld-id: cd-3411 790 | - os-id: "ocd-division/country:us/state:nj/cd:12" 791 | name: "New Jersey's 12th congressional district" 792 | sld-id: cd-3412 793 | - os-id: "ocd-division/country:us/state:nj/cd:1" 794 | name: "New Jersey's 1st congressional district" 795 | sld-id: cd-3401 796 | - os-id: "ocd-division/country:us/state:nj/cd:2" 797 | name: "New Jersey's 2nd congressional district" 798 | sld-id: cd-3402 799 | - os-id: "ocd-division/country:us/state:nj/cd:3" 800 | name: "New Jersey's 3rd congressional district" 801 | sld-id: cd-3403 802 | - os-id: "ocd-division/country:us/state:nj/cd:4" 803 | name: "New Jersey's 4th congressional district" 804 | sld-id: cd-3404 805 | - os-id: "ocd-division/country:us/state:nj/cd:5" 806 | name: "New Jersey's 5th congressional district" 807 | sld-id: cd-3405 808 | - os-id: "ocd-division/country:us/state:nj/cd:6" 809 | name: "New Jersey's 6th congressional district" 810 | sld-id: cd-3406 811 | - os-id: "ocd-division/country:us/state:nj/cd:7" 812 | name: "New Jersey's 7th congressional district" 813 | sld-id: cd-3407 814 | - os-id: "ocd-division/country:us/state:nj/cd:8" 815 | name: "New Jersey's 8th congressional district" 816 | sld-id: cd-3408 817 | - os-id: "ocd-division/country:us/state:nj/cd:9" 818 | name: "New Jersey's 9th congressional district" 819 | sld-id: cd-3409 820 | - os-id: "ocd-division/country:us/state:nj/cd:13" 821 | name: "New Jersey's 13th congressional district (obsolete as of 2012)" 822 | sld-id: cd-3413 823 | expired: 2013-01-03 824 | - os-id: "ocd-division/country:us/state:nm/cd:1" 825 | name: "New Mexico's 1st congressional district" 826 | sld-id: cd-3501 827 | - os-id: "ocd-division/country:us/state:nm/cd:2" 828 | name: "New Mexico's 2nd congressional district" 829 | sld-id: cd-3502 830 | - os-id: "ocd-division/country:us/state:nm/cd:3" 831 | name: "New Mexico's 3rd congressional district" 832 | sld-id: cd-3503 833 | - os-id: "ocd-division/country:us/state:nv/cd:1" 834 | name: "Nevada's 1st congressional district" 835 | sld-id: cd-3201 836 | - os-id: "ocd-division/country:us/state:nv/cd:2" 837 | name: "Nevada's 2nd congressional district" 838 | sld-id: cd-3202 839 | - os-id: "ocd-division/country:us/state:nv/cd:3" 840 | name: "Nevada's 3rd congressional district" 841 | sld-id: cd-3203 842 | - os-id: "ocd-division/country:us/state:nv/cd:4" 843 | name: "Nevada's 4th congressional district" 844 | sld-id: cd-3204 845 | - os-id: "ocd-division/country:us/state:ny/cd:10" 846 | name: "New York's 10th congressional district" 847 | sld-id: cd-3610 848 | - os-id: "ocd-division/country:us/state:ny/cd:11" 849 | name: "New York's 11th congressional district" 850 | sld-id: cd-3611 851 | - os-id: "ocd-division/country:us/state:ny/cd:12" 852 | name: "New York's 12th congressional district" 853 | sld-id: cd-3612 854 | - os-id: "ocd-division/country:us/state:ny/cd:13" 855 | name: "New York's 13th congressional district" 856 | sld-id: cd-3613 857 | - os-id: "ocd-division/country:us/state:ny/cd:14" 858 | name: "New York's 14th congressional district" 859 | sld-id: cd-3614 860 | - os-id: "ocd-division/country:us/state:ny/cd:15" 861 | name: "New York's 15th congressional district" 862 | sld-id: cd-3615 863 | - os-id: "ocd-division/country:us/state:ny/cd:16" 864 | name: "New York's 16th congressional district" 865 | sld-id: cd-3616 866 | - os-id: "ocd-division/country:us/state:ny/cd:17" 867 | name: "New York's 17th congressional district" 868 | sld-id: cd-3617 869 | - os-id: "ocd-division/country:us/state:ny/cd:18" 870 | name: "New York's 18th congressional district" 871 | sld-id: cd-3618 872 | - os-id: "ocd-division/country:us/state:ny/cd:19" 873 | name: "New York's 19th congressional district" 874 | sld-id: cd-3619 875 | - os-id: "ocd-division/country:us/state:ny/cd:1" 876 | name: "New York's 1st congressional district" 877 | sld-id: cd-3601 878 | - os-id: "ocd-division/country:us/state:ny/cd:20" 879 | name: "New York's 20th congressional district" 880 | sld-id: cd-3620 881 | - os-id: "ocd-division/country:us/state:ny/cd:21" 882 | name: "New York's 21st congressional district" 883 | sld-id: cd-3621 884 | - os-id: "ocd-division/country:us/state:ny/cd:22" 885 | name: "New York's 22nd congressional district" 886 | sld-id: cd-3622 887 | - os-id: "ocd-division/country:us/state:ny/cd:23" 888 | name: "New York's 23rd congressional district" 889 | sld-id: cd-3623 890 | - os-id: "ocd-division/country:us/state:ny/cd:24" 891 | name: "New York's 24th congressional district" 892 | sld-id: cd-3624 893 | - os-id: "ocd-division/country:us/state:ny/cd:25" 894 | name: "New York's 25th congressional district" 895 | sld-id: cd-3625 896 | - os-id: "ocd-division/country:us/state:ny/cd:26" 897 | name: "New York's 26th congressional district" 898 | sld-id: cd-3626 899 | - os-id: "ocd-division/country:us/state:ny/cd:27" 900 | name: "New York's 27th congressional district" 901 | sld-id: cd-3627 902 | - os-id: "ocd-division/country:us/state:ny/cd:2" 903 | name: "New York's 2nd congressional district" 904 | sld-id: cd-3602 905 | - os-id: "ocd-division/country:us/state:ny/cd:3" 906 | name: "New York's 3rd congressional district" 907 | sld-id: cd-3603 908 | - os-id: "ocd-division/country:us/state:ny/cd:4" 909 | name: "New York's 4th congressional district" 910 | sld-id: cd-3604 911 | - os-id: "ocd-division/country:us/state:ny/cd:5" 912 | name: "New York's 5th congressional district" 913 | sld-id: cd-3605 914 | - os-id: "ocd-division/country:us/state:ny/cd:6" 915 | name: "New York's 6th congressional district" 916 | sld-id: cd-3606 917 | - os-id: "ocd-division/country:us/state:ny/cd:7" 918 | name: "New York's 7th congressional district" 919 | sld-id: cd-3607 920 | - os-id: "ocd-division/country:us/state:ny/cd:8" 921 | name: "New York's 8th congressional district" 922 | sld-id: cd-3608 923 | - os-id: "ocd-division/country:us/state:ny/cd:9" 924 | name: "New York's 9th congressional district" 925 | sld-id: cd-3609 926 | - os-id: "ocd-division/country:us/state:ny/cd:28" 927 | name: "New York's 28th congressional district (obsolete as of 2012)" 928 | sld-id: cd-3628 929 | expired: 2013-01-03 930 | - os-id: "ocd-division/country:us/state:ny/cd:29" 931 | name: "New York's 29th congressional district (obsolete as of 2012)" 932 | sld-id: cd-3629 933 | expired: 2013-01-03 934 | - os-id: "ocd-division/country:us/state:oh/cd:10" 935 | name: "Ohio's 10th congressional district" 936 | sld-id: cd-3910 937 | - os-id: "ocd-division/country:us/state:oh/cd:11" 938 | name: "Ohio's 11th congressional district" 939 | sld-id: cd-3911 940 | - os-id: "ocd-division/country:us/state:oh/cd:12" 941 | name: "Ohio's 12th congressional district" 942 | sld-id: cd-3912 943 | - os-id: "ocd-division/country:us/state:oh/cd:13" 944 | name: "Ohio's 13th congressional district" 945 | sld-id: cd-3913 946 | - os-id: "ocd-division/country:us/state:oh/cd:14" 947 | name: "Ohio's 14th congressional district" 948 | sld-id: cd-3914 949 | - os-id: "ocd-division/country:us/state:oh/cd:15" 950 | name: "Ohio's 15th congressional district" 951 | sld-id: cd-3915 952 | - os-id: "ocd-division/country:us/state:oh/cd:16" 953 | name: "Ohio's 16th congressional district" 954 | sld-id: cd-3916 955 | - os-id: "ocd-division/country:us/state:oh/cd:1" 956 | name: "Ohio's 1st congressional district" 957 | sld-id: cd-3901 958 | - os-id: "ocd-division/country:us/state:oh/cd:2" 959 | name: "Ohio's 2nd congressional district" 960 | sld-id: cd-3902 961 | - os-id: "ocd-division/country:us/state:oh/cd:3" 962 | name: "Ohio's 3rd congressional district" 963 | sld-id: cd-3903 964 | - os-id: "ocd-division/country:us/state:oh/cd:4" 965 | name: "Ohio's 4th congressional district" 966 | sld-id: cd-3904 967 | - os-id: "ocd-division/country:us/state:oh/cd:5" 968 | name: "Ohio's 5th congressional district" 969 | sld-id: cd-3905 970 | - os-id: "ocd-division/country:us/state:oh/cd:6" 971 | name: "Ohio's 6th congressional district" 972 | sld-id: cd-3906 973 | - os-id: "ocd-division/country:us/state:oh/cd:7" 974 | name: "Ohio's 7th congressional district" 975 | sld-id: cd-3907 976 | - os-id: "ocd-division/country:us/state:oh/cd:8" 977 | name: "Ohio's 8th congressional district" 978 | sld-id: cd-3908 979 | - os-id: "ocd-division/country:us/state:oh/cd:9" 980 | name: "Ohio's 9th congressional district" 981 | sld-id: cd-3909 982 | - os-id: "ocd-division/country:us/state:oh/cd:17" 983 | name: "Ohio's 17th congressional district (obsolete as of 2012)" 984 | sld-id: cd-3917 985 | expired: 2013-01-03 986 | - os-id: "ocd-division/country:us/state:oh/cd:18" 987 | name: "Ohio's 18th congressional district (obsolete as of 2012)" 988 | sld-id: cd-3918 989 | expired: 2013-01-03 990 | - os-id: "ocd-division/country:us/state:ok/cd:1" 991 | name: "Oklahoma's 1st congressional district" 992 | sld-id: cd-4001 993 | - os-id: "ocd-division/country:us/state:ok/cd:2" 994 | name: "Oklahoma's 2nd congressional district" 995 | sld-id: cd-4002 996 | - os-id: "ocd-division/country:us/state:ok/cd:3" 997 | name: "Oklahoma's 3rd congressional district" 998 | sld-id: cd-4003 999 | - os-id: "ocd-division/country:us/state:ok/cd:4" 1000 | name: "Oklahoma's 4th congressional district" 1001 | sld-id: cd-4004 1002 | - os-id: "ocd-division/country:us/state:ok/cd:5" 1003 | name: "Oklahoma's 5th congressional district" 1004 | sld-id: cd-4005 1005 | - os-id: "ocd-division/country:us/state:or/cd:1" 1006 | name: "Oregon's 1st congressional district" 1007 | sld-id: cd-4101 1008 | - os-id: "ocd-division/country:us/state:or/cd:2" 1009 | name: "Oregon's 2nd congressional district" 1010 | sld-id: cd-4102 1011 | - os-id: "ocd-division/country:us/state:or/cd:3" 1012 | name: "Oregon's 3rd congressional district" 1013 | sld-id: cd-4103 1014 | - os-id: "ocd-division/country:us/state:or/cd:4" 1015 | name: "Oregon's 4th congressional district" 1016 | sld-id: cd-4104 1017 | - os-id: "ocd-division/country:us/state:or/cd:5" 1018 | name: "Oregon's 5th congressional district" 1019 | sld-id: cd-4105 1020 | - os-id: "ocd-division/country:us/state:pa/cd:10" 1021 | name: "Pennsylvania's 10th congressional district" 1022 | sld-id: cd-4210 1023 | - os-id: "ocd-division/country:us/state:pa/cd:11" 1024 | name: "Pennsylvania's 11th congressional district" 1025 | sld-id: cd-4211 1026 | - os-id: "ocd-division/country:us/state:pa/cd:12" 1027 | name: "Pennsylvania's 12th congressional district" 1028 | sld-id: cd-4212 1029 | - os-id: "ocd-division/country:us/state:pa/cd:13" 1030 | name: "Pennsylvania's 13th congressional district" 1031 | sld-id: cd-4213 1032 | - os-id: "ocd-division/country:us/state:pa/cd:14" 1033 | name: "Pennsylvania's 14th congressional district" 1034 | sld-id: cd-4214 1035 | - os-id: "ocd-division/country:us/state:pa/cd:15" 1036 | name: "Pennsylvania's 15th congressional district" 1037 | sld-id: cd-4215 1038 | - os-id: "ocd-division/country:us/state:pa/cd:16" 1039 | name: "Pennsylvania's 16th congressional district" 1040 | sld-id: cd-4216 1041 | - os-id: "ocd-division/country:us/state:pa/cd:17" 1042 | name: "Pennsylvania's 17th congressional district" 1043 | sld-id: cd-4217 1044 | - os-id: "ocd-division/country:us/state:pa/cd:18" 1045 | name: "Pennsylvania's 18th congressional district" 1046 | sld-id: cd-4218 1047 | - os-id: "ocd-division/country:us/state:pa/cd:1" 1048 | name: "Pennsylvania's 1st congressional district" 1049 | sld-id: cd-4201 1050 | - os-id: "ocd-division/country:us/state:pa/cd:2" 1051 | name: "Pennsylvania's 2nd congressional district" 1052 | sld-id: cd-4202 1053 | - os-id: "ocd-division/country:us/state:pa/cd:3" 1054 | name: "Pennsylvania's 3rd congressional district" 1055 | sld-id: cd-4203 1056 | - os-id: "ocd-division/country:us/state:pa/cd:4" 1057 | name: "Pennsylvania's 4th congressional district" 1058 | sld-id: cd-4204 1059 | - os-id: "ocd-division/country:us/state:pa/cd:5" 1060 | name: "Pennsylvania's 5th congressional district" 1061 | sld-id: cd-4205 1062 | - os-id: "ocd-division/country:us/state:pa/cd:6" 1063 | name: "Pennsylvania's 6th congressional district" 1064 | sld-id: cd-4206 1065 | - os-id: "ocd-division/country:us/state:pa/cd:7" 1066 | name: "Pennsylvania's 7th congressional district" 1067 | sld-id: cd-4207 1068 | - os-id: "ocd-division/country:us/state:pa/cd:8" 1069 | name: "Pennsylvania's 8th congressional district" 1070 | sld-id: cd-4208 1071 | - os-id: "ocd-division/country:us/state:pa/cd:9" 1072 | name: "Pennsylvania's 9th congressional district" 1073 | sld-id: cd-4209 1074 | - os-id: "ocd-division/country:us/state:pa/cd:19" 1075 | name: "Pennsylvania's 19th congressional district (obsolete as of 2012)" 1076 | sld-id: cd-4219 1077 | expired: 2013-01-03 1078 | - os-id: "ocd-division/country:us/state:ri/cd:1" 1079 | name: "Rhode Island's 1st congressional district" 1080 | sld-id: cd-4401 1081 | - os-id: "ocd-division/country:us/state:ri/cd:2" 1082 | name: "Rhode Island's 2nd congressional district" 1083 | sld-id: cd-4402 1084 | - os-id: "ocd-division/country:us/state:sc/cd:1" 1085 | name: "South Carolina's 1st congressional district" 1086 | sld-id: cd-4501 1087 | - os-id: "ocd-division/country:us/state:sc/cd:2" 1088 | name: "South Carolina's 2nd congressional district" 1089 | sld-id: cd-4502 1090 | - os-id: "ocd-division/country:us/state:sc/cd:3" 1091 | name: "South Carolina's 3rd congressional district" 1092 | sld-id: cd-4503 1093 | - os-id: "ocd-division/country:us/state:sc/cd:4" 1094 | name: "South Carolina's 4th congressional district" 1095 | sld-id: cd-4504 1096 | - os-id: "ocd-division/country:us/state:sc/cd:5" 1097 | name: "South Carolina's 5th congressional district" 1098 | sld-id: cd-4505 1099 | - os-id: "ocd-division/country:us/state:sc/cd:6" 1100 | name: "South Carolina's 6th congressional district" 1101 | sld-id: cd-4506 1102 | - os-id: "ocd-division/country:us/state:sc/cd:7" 1103 | name: "South Carolina's 7th congressional district" 1104 | sld-id: cd-4507 1105 | - os-id: "ocd-division/country:us/state:sd/cd:at-large" 1106 | name: "South Dakota's at-large congressional district" 1107 | sld-id: cd-4600 1108 | - os-id: "ocd-division/country:us/state:tn/cd:1" 1109 | name: "Tennessee's 1st congressional district" 1110 | sld-id: cd-4701 1111 | - os-id: "ocd-division/country:us/state:tn/cd:2" 1112 | name: "Tennessee's 2nd congressional district" 1113 | sld-id: cd-4702 1114 | - os-id: "ocd-division/country:us/state:tn/cd:3" 1115 | name: "Tennessee's 3rd congressional district" 1116 | sld-id: cd-4703 1117 | - os-id: "ocd-division/country:us/state:tn/cd:4" 1118 | name: "Tennessee's 4th congressional district" 1119 | sld-id: cd-4704 1120 | - os-id: "ocd-division/country:us/state:tn/cd:5" 1121 | name: "Tennessee's 5th congressional district" 1122 | sld-id: cd-4705 1123 | - os-id: "ocd-division/country:us/state:tn/cd:6" 1124 | name: "Tennessee's 6th congressional district" 1125 | sld-id: cd-4706 1126 | - os-id: "ocd-division/country:us/state:tn/cd:7" 1127 | name: "Tennessee's 7th congressional district" 1128 | sld-id: cd-4707 1129 | - os-id: "ocd-division/country:us/state:tn/cd:8" 1130 | name: "Tennessee's 8th congressional district" 1131 | sld-id: cd-4708 1132 | - os-id: "ocd-division/country:us/state:tn/cd:9" 1133 | name: "Tennessee's 9th congressional district" 1134 | sld-id: cd-4709 1135 | - os-id: "ocd-division/country:us/state:tx/cd:10" 1136 | name: "Texas's 10th congressional district" 1137 | sld-id: cd-4810 1138 | - os-id: "ocd-division/country:us/state:tx/cd:11" 1139 | name: "Texas's 11th congressional district" 1140 | sld-id: cd-4811 1141 | - os-id: "ocd-division/country:us/state:tx/cd:12" 1142 | name: "Texas's 12th congressional district" 1143 | sld-id: cd-4812 1144 | - os-id: "ocd-division/country:us/state:tx/cd:13" 1145 | name: "Texas's 13th congressional district" 1146 | sld-id: cd-4813 1147 | - os-id: "ocd-division/country:us/state:tx/cd:14" 1148 | name: "Texas's 14th congressional district" 1149 | sld-id: cd-4814 1150 | - os-id: "ocd-division/country:us/state:tx/cd:15" 1151 | name: "Texas's 15th congressional district" 1152 | sld-id: cd-4815 1153 | - os-id: "ocd-division/country:us/state:tx/cd:16" 1154 | name: "Texas's 16th congressional district" 1155 | sld-id: cd-4816 1156 | - os-id: "ocd-division/country:us/state:tx/cd:17" 1157 | name: "Texas's 17th congressional district" 1158 | sld-id: cd-4817 1159 | - os-id: "ocd-division/country:us/state:tx/cd:18" 1160 | name: "Texas's 18th congressional district" 1161 | sld-id: cd-4818 1162 | - os-id: "ocd-division/country:us/state:tx/cd:19" 1163 | name: "Texas's 19th congressional district" 1164 | sld-id: cd-4819 1165 | - os-id: "ocd-division/country:us/state:tx/cd:1" 1166 | name: "Texas's 1st congressional district" 1167 | sld-id: cd-4801 1168 | - os-id: "ocd-division/country:us/state:tx/cd:20" 1169 | name: "Texas's 20th congressional district" 1170 | sld-id: cd-4820 1171 | - os-id: "ocd-division/country:us/state:tx/cd:21" 1172 | name: "Texas's 21st congressional district" 1173 | sld-id: cd-4821 1174 | - os-id: "ocd-division/country:us/state:tx/cd:22" 1175 | name: "Texas's 22nd congressional district" 1176 | sld-id: cd-4822 1177 | - os-id: "ocd-division/country:us/state:tx/cd:23" 1178 | name: "Texas's 23rd congressional district" 1179 | sld-id: cd-4823 1180 | - os-id: "ocd-division/country:us/state:tx/cd:24" 1181 | name: "Texas's 24th congressional district" 1182 | sld-id: cd-4824 1183 | - os-id: "ocd-division/country:us/state:tx/cd:25" 1184 | name: "Texas's 25th congressional district" 1185 | sld-id: cd-4825 1186 | - os-id: "ocd-division/country:us/state:tx/cd:26" 1187 | name: "Texas's 26th congressional district" 1188 | sld-id: cd-4826 1189 | - os-id: "ocd-division/country:us/state:tx/cd:27" 1190 | name: "Texas's 27th congressional district" 1191 | sld-id: cd-4827 1192 | - os-id: "ocd-division/country:us/state:tx/cd:28" 1193 | name: "Texas's 28th congressional district" 1194 | sld-id: cd-4828 1195 | - os-id: "ocd-division/country:us/state:tx/cd:29" 1196 | name: "Texas's 29th congressional district" 1197 | sld-id: cd-4829 1198 | - os-id: "ocd-division/country:us/state:tx/cd:2" 1199 | name: "Texas's 2nd congressional district" 1200 | sld-id: cd-4802 1201 | - os-id: "ocd-division/country:us/state:tx/cd:30" 1202 | name: "Texas's 30th congressional district" 1203 | sld-id: cd-4830 1204 | - os-id: "ocd-division/country:us/state:tx/cd:31" 1205 | name: "Texas's 31st congressional district" 1206 | sld-id: cd-4831 1207 | - os-id: "ocd-division/country:us/state:tx/cd:32" 1208 | name: "Texas's 32nd congressional district" 1209 | sld-id: cd-4832 1210 | - os-id: "ocd-division/country:us/state:tx/cd:33" 1211 | name: "Texas's 33rd congressional district" 1212 | sld-id: cd-4833 1213 | - os-id: "ocd-division/country:us/state:tx/cd:34" 1214 | name: "Texas's 34th congressional district" 1215 | sld-id: cd-4834 1216 | - os-id: "ocd-division/country:us/state:tx/cd:35" 1217 | name: "Texas's 35th congressional district" 1218 | sld-id: cd-4835 1219 | - os-id: "ocd-division/country:us/state:tx/cd:36" 1220 | name: "Texas's 36th congressional district" 1221 | sld-id: cd-4836 1222 | - os-id: "ocd-division/country:us/state:tx/cd:3" 1223 | name: "Texas's 3rd congressional district" 1224 | sld-id: cd-4803 1225 | - os-id: "ocd-division/country:us/state:tx/cd:4" 1226 | name: "Texas's 4th congressional district" 1227 | sld-id: cd-4804 1228 | - os-id: "ocd-division/country:us/state:tx/cd:5" 1229 | name: "Texas's 5th congressional district" 1230 | sld-id: cd-4805 1231 | - os-id: "ocd-division/country:us/state:tx/cd:6" 1232 | name: "Texas's 6th congressional district" 1233 | sld-id: cd-4806 1234 | - os-id: "ocd-division/country:us/state:tx/cd:7" 1235 | name: "Texas's 7th congressional district" 1236 | sld-id: cd-4807 1237 | - os-id: "ocd-division/country:us/state:tx/cd:8" 1238 | name: "Texas's 8th congressional district" 1239 | sld-id: cd-4808 1240 | - os-id: "ocd-division/country:us/state:tx/cd:9" 1241 | name: "Texas's 9th congressional district" 1242 | sld-id: cd-4809 1243 | - os-id: "ocd-division/country:us/state:ut/cd:1" 1244 | name: "Utah's 1st congressional district" 1245 | sld-id: cd-4901 1246 | - os-id: "ocd-division/country:us/state:ut/cd:2" 1247 | name: "Utah's 2nd congressional district" 1248 | sld-id: cd-4902 1249 | - os-id: "ocd-division/country:us/state:ut/cd:3" 1250 | name: "Utah's 3rd congressional district" 1251 | sld-id: cd-4903 1252 | - os-id: "ocd-division/country:us/state:ut/cd:4" 1253 | name: "Utah's 4th congressional district" 1254 | sld-id: cd-4904 1255 | - os-id: "ocd-division/country:us/state:va/cd:10" 1256 | name: "Virginia's 10th congressional district" 1257 | sld-id: cd-5110 1258 | - os-id: "ocd-division/country:us/state:va/cd:11" 1259 | name: "Virginia's 11th congressional district" 1260 | sld-id: cd-5111 1261 | - os-id: "ocd-division/country:us/state:va/cd:1" 1262 | name: "Virginia's 1st congressional district" 1263 | sld-id: cd-5101 1264 | - os-id: "ocd-division/country:us/state:va/cd:2" 1265 | name: "Virginia's 2nd congressional district" 1266 | sld-id: cd-5102 1267 | - os-id: "ocd-division/country:us/state:va/cd:3" 1268 | name: "Virginia's 3rd congressional district" 1269 | sld-id: cd-5103 1270 | - os-id: "ocd-division/country:us/state:va/cd:4" 1271 | name: "Virginia's 4th congressional district" 1272 | sld-id: cd-5104 1273 | - os-id: "ocd-division/country:us/state:va/cd:5" 1274 | name: "Virginia's 5th congressional district" 1275 | sld-id: cd-5105 1276 | - os-id: "ocd-division/country:us/state:va/cd:6" 1277 | name: "Virginia's 6th congressional district" 1278 | sld-id: cd-5106 1279 | - os-id: "ocd-division/country:us/state:va/cd:7" 1280 | name: "Virginia's 7th congressional district" 1281 | sld-id: cd-5107 1282 | - os-id: "ocd-division/country:us/state:va/cd:8" 1283 | name: "Virginia's 8th congressional district" 1284 | sld-id: cd-5108 1285 | - os-id: "ocd-division/country:us/state:va/cd:9" 1286 | name: "Virginia's 9th congressional district" 1287 | sld-id: cd-5109 1288 | - os-id: "ocd-division/country:us/state:vt/cd:at-large" 1289 | name: "Vermont's at-large congressional district" 1290 | sld-id: cd-5000 1291 | - os-id: "ocd-division/country:us/state:wa/cd:10" 1292 | name: "Washington's 10th congressional district" 1293 | sld-id: cd-5310 1294 | - os-id: "ocd-division/country:us/state:wa/cd:1" 1295 | name: "Washington's 1st congressional district" 1296 | sld-id: cd-5301 1297 | - os-id: "ocd-division/country:us/state:wa/cd:2" 1298 | name: "Washington's 2nd congressional district" 1299 | sld-id: cd-5302 1300 | - os-id: "ocd-division/country:us/state:wa/cd:3" 1301 | name: "Washington's 3rd congressional district" 1302 | sld-id: cd-5303 1303 | - os-id: "ocd-division/country:us/state:wa/cd:4" 1304 | name: "Washington's 4th congressional district" 1305 | sld-id: cd-5304 1306 | - os-id: "ocd-division/country:us/state:wa/cd:5" 1307 | name: "Washington's 5th congressional district" 1308 | sld-id: cd-5305 1309 | - os-id: "ocd-division/country:us/state:wa/cd:6" 1310 | name: "Washington's 6th congressional district" 1311 | sld-id: cd-5306 1312 | - os-id: "ocd-division/country:us/state:wa/cd:7" 1313 | name: "Washington's 7th congressional district" 1314 | sld-id: cd-5307 1315 | - os-id: "ocd-division/country:us/state:wa/cd:8" 1316 | name: "Washington's 8th congressional district" 1317 | sld-id: cd-5308 1318 | - os-id: "ocd-division/country:us/state:wa/cd:9" 1319 | name: "Washington's 9th congressional district" 1320 | sld-id: cd-5309 1321 | - os-id: "ocd-division/country:us/state:wi/cd:1" 1322 | name: "Wisconsin's 1st congressional district" 1323 | sld-id: cd-5501 1324 | - os-id: "ocd-division/country:us/state:wi/cd:2" 1325 | name: "Wisconsin's 2nd congressional district" 1326 | sld-id: cd-5502 1327 | - os-id: "ocd-division/country:us/state:wi/cd:3" 1328 | name: "Wisconsin's 3rd congressional district" 1329 | sld-id: cd-5503 1330 | - os-id: "ocd-division/country:us/state:wi/cd:4" 1331 | name: "Wisconsin's 4th congressional district" 1332 | sld-id: cd-5504 1333 | - os-id: "ocd-division/country:us/state:wi/cd:5" 1334 | name: "Wisconsin's 5th congressional district" 1335 | sld-id: cd-5505 1336 | - os-id: "ocd-division/country:us/state:wi/cd:6" 1337 | name: "Wisconsin's 6th congressional district" 1338 | sld-id: cd-5506 1339 | - os-id: "ocd-division/country:us/state:wi/cd:7" 1340 | name: "Wisconsin's 7th congressional district" 1341 | sld-id: cd-5507 1342 | - os-id: "ocd-division/country:us/state:wi/cd:8" 1343 | name: "Wisconsin's 8th congressional district" 1344 | sld-id: cd-5508 1345 | - os-id: "ocd-division/country:us/state:wv/cd:1" 1346 | name: "West Virginia's 1st congressional district" 1347 | sld-id: cd-5401 1348 | - os-id: "ocd-division/country:us/state:wv/cd:2" 1349 | name: "West Virginia's 2nd congressional district" 1350 | sld-id: cd-5402 1351 | - os-id: "ocd-division/country:us/state:wv/cd:3" 1352 | name: "West Virginia's 3rd congressional district" 1353 | sld-id: cd-5403 1354 | - os-id: "ocd-division/country:us/state:wy/cd:at-large" 1355 | name: "Wyoming's at-large congressional district" 1356 | sld-id: cd-5600 1357 | - os-id: "ocd-division/country:us/state:dc/cd:at-large" 1358 | name: "Washington DC's at-large congressional district" 1359 | sld-id: cd-1198 1360 | - os-id: "ocd-division/country:us/state:pr/cd:at-large" 1361 | name: "Puerto Rico's at-large congressional district" 1362 | sld-id: cd-7298 1363 | --------------------------------------------------------------------------------