My Dane County school attendance area maps app

1 view
Skip to first unread message

Erik Paulson

unread,
Jul 15, 2025, 10:47:19 AMJul 15
to hacking...@googlegroups.com
I am hoping that we can use this email list as more than just announcements, and we might start using it for sharing things we’re working on or questions or just general observations. (And you shouldn’t worry too much about how perfectly aligned your project is for “civic tech” - doing something fun with RSS feeds? Well, civic data can go in an RSS feed, so fair game! Doing a CSS library? Civic data is often formatted with CSS, post it! Digging up data for wikipedia? Tell us about it! I’d love to have to deal with the problem of too many messages on this list)

I’ll start off by sharing a project I did a month or so back, my map of school attendance areas for school districts that are at least partially in Dane County:

https://epaulson.github.io/dane-county-schools/

It turns out there’s no one source for school attendance areas - the state Dept of Public Instruction has school district boundaries, but where the kids that go to each school actually come from is all over the place, so I first sat down to collect it. MMSD (Madison) does actually post a GIS shapefile, and by just cold emailing a few folks at different districts I got a few more shapefiles, but for a lot of them the best I found was a PDF, so I fired up QGIS and traced it out. For the smaller districts that only had 1 elementary, 1 middle, and 1 high school, I just copied the district shape from DPI.

After that I cleaned up data and combined them all into a couple of different geojson/geobuf files (geobuf is geojson in google protobuf - much smaller and faster to decode) and built an all client-side app that’s served from Github pages. It’s simple enough that it’s not using any framework, just straight up Javascript. I use leaflet for displaying the maps, and turf.js for doing some of the geo calculations in the app.

The map can select between seeing the areas for elementary schools, middle schools, or high schools. You can also intersect the attendance areas by other political subdivisions, so if you want to see how a city council district or a state assembly district break down by school attendance area, you can filter by that, and the app shows only the parts of the school areas that are part of that other political subdivision. You can filter by alder district for all the cities in Dane County that have a city council (villages and towns don’t), by county board district, by city, by school district, by State Assembly district, or by State Senate district (only the legislative districts that are have some part of Dane County, and then only for the school districts that have in parts of Dane county)

The intersections are all calculated client-side by turfjs. The state of the app is in the URL so you can share a URL like
https://epaulson.github.io/dane-county-schools/?schoolType=middle&subdivisionType=supervisor&subdivisionIdx=9

and you’ll be zoomed right to the middle schools for the county board, district 10.
If you click on any of the polygons, you’ll get a popup that has a link to the school website, the state DPI school directory page for that school (which has things like the first and last day of school and the school report card) and a link to the federal National Center for Education Statistics page for that school, which has a lot of demographic data for that school.

The locations of the schools are also on the map, though for the most part I filtered out things that don’t have attendance areas like charter schools.

Anyway, it was fun, I learned a bunch about the different schools in the area and I learned a bunch about how to use QGIS. The geodata is all in the github repo for the project, which is linked to in the ‘About’ button on the project.

There’s not a lot more that I’m going to add to it, but a few weeks back I saw a story in the newspaper about MMSD planning on revising their attendance areas in the next few years so if they do and I can get the data I imagine I’d update it. 

-Erik
Reply all
Reply to author
Forward
0 new messages