Skip to content
Michael Lizzio

WastedAsphalt

Scores how empty every parking lot in a county is, using satellite images

  • FastAPI
  • React + TypeScript
  • Mapbox GL
  • OpenStreetMap
  • OpenCV
  • SQLite job queue
  • GeoPackage / GeoJSON export

April 2026

WastedAsphalt with Monroe County selected, showing 3,726 lots, 3,697 analyzed, 29 skipped, and a 26 percent average beside a satellite map around Rochester
A finished Monroe County run.
What it is
A tool that takes every parking lot in a New York county from OpenStreetMap, grabs a satellite image of each one, and scores how empty it looks.
Why I made it
I wanted to know how much of a city is paved over for parking that nobody is using, and all the data to answer that is public.
What I did
I built a FastAPI and React app that runs a whole county as a job you can pause and resume, scores each lot with OpenCV, and exports the results for ArcGIS.
How it turned out
Monroe County came out to 3,726 lots with a 26% average score. The score is a simple color trick, not a car detector, so painted lines and shadows count too.

The details

The idea

Everything you need to answer that question is public. The Census has county boundaries, OpenStreetMap already has parking lots drawn as shapes, and satellite images are one request away. WastedAsphalt connects those three and puts a number on every lot. For Monroe County it analyzed 3,697 lots (29 were skipped) in about eleven minutes.

WastedAsphalt county picker with a New York map, county list, and analysis panels
Picking a county.

Every lot, colored

When a county finishes, every lot shows up on the map colored by its score, from green to red. Downtown Rochester is where it gets interesting. The results export straight into ArcGIS, so they can be compared with other city data.

  • Satellite map zoomed to downtown Rochester with parking lot polygons colored green, yellow, orange, and red according to their utilization score
    Downtown Rochester, one colored shape per lot.
  • Completed Monroe County analysis with thousands of parking lots colored on the map and job totals in the side panels
    The whole county, finished.

How a lot gets scored

For each lot, the program finds the usual color of its asphalt and then measures how much of the lot is a different color. That's the score. The catch is that it isn't really counting cars. Painted lines, shadows and patches count too, so the lot below scored 0.91 even though it's maybe a third full. It's a simple color trick, not a trained car detector.

  • Raw satellite image and analysis overlay of the same parking lot, with a teal boundary and detected anomalies highlighted over the paved surface
    The satellite image, and what the program counted. The painted stripes push the score up.
  • Four Monroe County parking-lot satellite images paired with overlays marking lot boundaries in teal and detected anomalies in red
    A few more lots and their overlays.

Running a whole county

A county is thousands of image downloads, so the job can be paused and resumed, and it picks up where it left off even if the program crashes. Images are saved too, so running a county again doesn't download them twice.

Monroe County results screen with buttons to export GeoPackage, GeoJSON, and CSV files
Exporting results for ArcGIS.