A car conundrum

Recently, I’ve become a bit interested in urban planning, and one of the things that has struck me the most (as a U.S. citizen) is how car-dependent many of our communities are. Take my hometown of Pensacola for example:

Escambia Country transit map
Escambia Country transit map

This is a map of Escambia County’s bus system, and though it does have decent coverage, most buses only run until 5 PM and come by every 2-4 hours, making them impractical for many people.

So, for most of my life I’ve had to get around town using a car, and one of the consequences of car dependency that I wasn’t really aware of until recently was the amount of land that’s needed to sustain all these cars. Take, for instance, parking:

A picture of downtown Houston, with parking lots outlined in red.
Downtown Houston, with parking lots outlined in red.

Just parking alone takes up 26% of downtown Houston. Which made me wonder: how much parking really is there?

The Parking Calculator

So, I created a website that displays all of the parking in an area, as well as how much space it uses.

Screenshot of the parking calculator website.
The Parking Calculator! The outlined blue areas represent spaces used for parking, and the purple circle represents the combined area of all the parking spaces.

It displays the parking in the area that you select, as well as the percentage of total area that parking takes up.

The parking data comes from OpenStreetMap using the Overpass API. Each time you press the calculate button, the website basically makes the following query to the API:

[out:json][timeout:25];
(
    way["amenity"="parking"]({{bbox}});
    relation["amenity"="parking"]({{bbox}});
    way["highway"]["parking:lane:both"]["parking:lane:both"!~"no"]({{bbox}});
    way["highway"]["parking:lane:right"]["parking:lane:right"!~"no"]({{bbox}});
    way["highway"]["parking:lane:left"]["parking:lane:left"!~"no"]({{bbox}});
);
out body;
>;
out skel qt

This outputs a JSON representation of any areas with the “parking” amenity tag as well as lane parking. Then, the JSON is converted to GeoJSON, and the total area is calculated using turf.js’s area function.

Since street parking is represented as a line, I estimated the width of street parking to be 2.7 meters and buffered the lines to add them to the area calculation.

The calculator also displays the total parking area, an estimation of the number of parking spaces, and the percent of bounded area that parking takes up.

Parking results for the University of Florida
Parking results for the University of Florida

You can try it out here: Parking Calculator

And here’s a link to the source code.

Updated: